2017-03-09 4 views
0

사용중인 ejabberd 모듈 mod_pottymouth가 메시지를 예상대로 필터링하지 않습니다. 로깅을 추가 한 후에는 실제 필터링을 수행하는 대신 일반 처리기 메소드가 호출되는 것을 볼 수 있습니다. 문제는 적절한 함수가 호출되도록 ejabberd 메시지를 구문 분석 할 수 없습니다. 누구든지 도와 줄 수 있습니까? 예상되는 Ejabberd filter_packet 함수가 호출되지 않습니다.

on_filter_packet({_From, _To, {xmlel, <<"message">>, _Attrs, Els} = _Packet} = _Msg) -> 
    %This is what should be called to filter messages, but is never called 
    FilteredEls = filterMessageBodyElements(Els, []), 
    {_From, _To, {xmlel, <<"message">>, _Attrs, FilteredEls}}; 
on_filter_packet(Msg) -> 
% This is what actually gets called 
Msg. 

은 17.01

+0

ejabberd 17.01, 및 ejabberd-있는 contrib의 최신 mod_pottymouth를 사용하여 : 그래서, 기본적으로, 코드는 다음과 같이한다 https://docs.ejabberd.im/developer/guide/#ejabberd-routerhttps://github.com/processone/xmpp/blob/master/README.md

을 읽어 보시기 바랍니다 – bwsmith

답변

0

당신이 기록 대신 튜플 xmlel 사용하여 시도 가지고 ejabberd 사용?

1

16.12부터 시작하여 ejabberd는 xmlel 요소를 라우팅하지 않습니다. 새 스타일 레코드 (message, presence 또는 iq)를 처리해야합니다.

on_filter_packet(#message{body = Body} = Msg) -> 
    NewBody = filterMessageBody(Body), 
    Msg#message{body = NewBody}; 
on_filter_packet(Stanza) -> 
    Stanza.