1

私が抱えている問題は、定義したフックがイベント「user_send_packet」で呼び出されていないことです。私は、送信されている任意のスタンザ (メッセージを含む) がこのイベントをトリガーすると想定していました。

フックを「0」に設定することで、フックの呼び出し方法の優先度を考慮しました。ログで、モジュールが開始されていることを確認しました (「mod_stanza_ack starting」)。erl ファイルはコンパイルされましたが、"gen_mod" is undefined という警告だけが表示されましたが、ejabberd メーリング リストで、これは無害であり、変数 "Host" が 12 行目で使用されていないことも確認しました。それと一緒ですが、これが事実かどうかはわかりません。

-module(mod_stanza_ack).
-behaviour(gen_mod).

-include("ejabberd.hrl").

-export([start/2,
         stop/1]).

-export([on_user_send_packet/3]).


start(Host, _Opts) ->
    ?INFO_MSG("mod_stanza_ack starting", []),
    ejabberd_hooks:add(user_send_packet, global, ?MODULE, on_user_send_packet, 0),
    ok.

stop(Host) ->
    ?INFO_MSG("mod_stanza_ack stopping", []),
    ejabberd_hooks:delete(user_send_packet, global, ?MODULE, on_user_send_packet, 0),
    ok.

on_user_send_packet(From, To, Packet) ->
    ?INFO_MSG("mod_stanza_ack a package has been sent coming from: ~p", [From]),
    ?INFO_MSG("mod_stanza_ack a package has been sent to: ~p", [To]),
    ?INFO_MSG("mod_stanza_ack a package has been sent with the following packet: ~p",     [Packet]),
    Packet.
4

1 に答える 1

0

構文は問題ないように見え、フックとコンパイルの警告に関する正しい仮定があります。どのバージョンの ejabberd を使用していますか?

「グローバル」処理にバグ/混乱があるようです。

user_send_packet を実行する ejabberd_c2s は、Host をスコープとして実行します。スコープの実装は非常に素朴で、「グローバル」コールバックはホスト フックの下に接続されていません。

私の 2.1.6 にはまだ「バグのある」動作があり、あなたのケースを再現できました。これを修正するには、'global' キーワードではなく Host を使用してフックを追加します。

于 2013-04-11T00:09:42.157 に答える