質問

私は Ejabberd をテスト ユーザーで起動して実行していますが、正常に動作しています。次のように、メッセージをインターセプトして変更できるモジュールを作成したいと考えています。

  1. 「メッセージ」を傍受する
  2. それらをphpファイルに送信します
  3. 同じphpファイルから結果を取得します(即時)
  4. メッセージスタンザを変更して受信者に送信します。

ejabberd のドキュメントは弱く、チュートリアルも存在しません。これを行うサンプルコードを教えていただけますか。そうすれば、自分のニーズに合わせて構成する方法がわかります。

バンドルありがとう!

アディル

役に立ちましたか?

解決

ここでは、そのようなモジュールの基本的な例を以下に示します。

-module(packet_interceptor).
-behaviour(gen_mod).

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

-export([on_filter_packet/1]).


start(Host, _Opts) ->
    ejabberd_hooks:add(filter_packet, global, ?MODULE, on_filter_packet, 0).

on_filter_packet({From, To, XML} = Packet) ->
    %% does something with a packet
    %% should return modified Packet or atom `drop` to drop the packet
    Packet.

そしてmoduleセクションにejabberdの設定にこのモジュールを追加することを確認します:

{modules,
 [...
  ...
  ...
  {packet_interceptor, []}
 ]}.

ちょうどあなたが望むようにon_filter_packet/1拡張し、適切に変更されたパケットを返します。

他のヒント

gleberの例は良好です。また、私は呼ばChessparkのために構築されたパケット操作の複雑な例を書きました mod_sunshineするます。

  

どのように(=?XMLを介し)のphpに、このXMLデータを送信し、結果のXMLを取得し、受信者に渡すことができますか?

それぞれのバイナリまたは文字列にXMLの内部表現をオンにするnode_to_list / 1

:node_to_binary / 1またはexmpp_xml:あなたはexmppを使用していますejabberdの最近のバージョンをお持ちの場合は、

、あなたはexmpp_xmlを使用することができます。

同様にあり、古いejabberdの関数の名前が、XMLモジュール内であった。

そこでやりたいことは、XMPPサーバーコンポーネントを作成することのようです。その投稿ではすでに多くのことが述べられています サーバー コンポーネントの開発を実験する XMPP サーバー.

役立つリンクをいくつかリンクさせていただきます。

Gleber のソリューションは実際には「ejabberd」指向です (確かに、あなたのケースでは最も簡単なソリューションです) が、このソリューションは他の XMPP サーバーに合わせて拡張できます。

インタフェースがあります:

ejabberd_router:register_route(MyHost)

私は過去に使用し、うまく機能しています。 MyHostをejabberdに登録されると、モジュールはMyHostメッセージ(infoを想定)を介しgen_serverすることを意図した通信を受け取ることになります。

@gleberで述べたように、コンフィギュレーション・ファイルにあなたのモジュールを追加することを忘れないでください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top