Frage

Ich habe Ejabberd und läuft mit Testanwendern und seine Arbeits gut. Ich möchte ein Modul, das kann Nachrichten versenden, schreiben und modifizieren, um sie wie folgt:

  1. Intercept "Botschaften"
  2. sie auf eine PHP-Datei senden
  3. erhalten Sie das Ergebnis aus der gleichen PHP-Datei (sofort)
  4. Ändern Sie die Nachricht Strophe und es auf den Draht an den Empfänger senden

Die ejabberd Dokumentation ist schwach und Tutorials sind nicht vorhanden. Können Sie mir einige Beispiel-Code geben, der dies tut. Ich kann dann Figur wie konfigurieren es für meine Bedürfnisse.

Durch ein Bündel!

Adil

War es hilfreich?

Lösung

Hier ist das Grund Beispiel für ein solches Modul:

-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.

Und stellen Sie sicher, dass dieses Modul in dem ejabberd hinzufügen Konfiguration in module Abschnitt:

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

Just erweitern on_filter_packet/1, wie Sie wollen und entsprechend modifizierte Paket zurück.

Andere Tipps

Gleber Vorbild ist ausgezeichnet. Ich schrieb auch ein komplexeres Beispiel für eine Paketmanipulation, dass ich für Chesspark gebaut genannt mod_sunshine .

  

Wie diese XML-Daten zu php senden kann (über? Xml =) und Abrufen der resultierenden XML und dann an den Empfänger übergeben?

Wenn Sie eine aktuelle Version von ejabberd, dass Anwendungen exmpp haben, können Sie exmpp_xml: node_to_binary / 1 oder exmpp_xml. Node_to_list / 1 die interne Darstellung des XML in einem binären oder eine Zeichenfolge drehen bzw.

Es wurden ähnlich benannten Funktionen in der älteren ejabberd, aber innerhalb des XML-Modul.

Es scheint, dass das, was Sie es tun wollen, ist eine XMPP-Server-Komponente zu erstellen. Viele Dinge schon gesagt wurde auf diesem Posten Welche XMPP-Server experimentieren, um eine Server-Komponente entwickeln.

Ich kann Ihnen einige nützliche Links Link:

Gleber Lösung ist wirklich „ejabberd“ orientiert (sicherlich das einfachste in Ihrem Fall), während diese mit anderen XMPP-Servern skaliert werden kann.

Es ist die Schnittstelle:

ejabberd_router:register_route(MyHost)

, die ich in der Vergangenheit verwendet haben und funktioniert gut. Sobald die MyHost mit ejabberd registriert ist, wird das Modul die Kommunikation empfangen soll MyHost durch info Nachrichten (unter der Annahme gen_server).

Wie von @gleber, vergessen Sie nicht, Ihr Modul in die Konfigurationsdatei hinzuzufügen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top