2017-03-09 49 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. 

これはejabberd 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使用してみましたを使用していますか?

1

16.12から始まり、ejabberdはxmlel要素をルーティングしません。新しいスタイルレコードを処理する必要があります:messagepresenceまたはiq

on_filter_packet(#message{body = Body} = Msg) -> 
    NewBody = filterMessageBody(Body), 
    Msg#message{body = NewBody}; 
on_filter_packet(Stanza) -> 
    Stanza. 
関連する問題