Question

Je ejabberd et en cours d'exécution avec les utilisateurs de test, et son travail bien. Je veux écrire un module qui peut intercepter les messages et les modifier, comme suit:

  1. intercepter "messages"
  2. les envoyer à un fichier php
  3. obtenir le résultat du même fichier php (immédiat)
  4. Modifier la strophe du message et l'envoyer sur le fil au destinataire

La documentation ejabberd est faible et tutoriels sont inexistants. Pouvez-vous me donner quelques exemples de code qui fait cela. Je peux alors comprendre comment le configurer pour mes besoins.

Merci un paquet!

Adil

Était-ce utile?

La solution

Voici l'exemple de base de tel module:

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

Et assurez-vous d'ajouter ce module dans la configuration ejabberd dans la section de module:

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

Il suffit de prolonger on_filter_packet/1 la façon dont vous voulez et revenir paquet modifié de manière appropriée.

Autres conseils

L'exemple de Gleber est excellent. J'ai aussi écrit un exemple plus complexe de manipulation de paquets que j'ai construit pour Chesspark appelé mod_sunshine .

  

Comment envoyer ces données XML à PHP (via? Xml =) et récupérer le XML résultant et passer ensuite au destinataire?

Si vous avez une version récente de ejabberd qui utilise exmpp, vous pouvez utiliser exmpp_xml: node_to_binary / 1 ou exmpp_xml:. Node_to_list / 1 pour activer la représentation interne du XML à un binaire ou une chaîne respectivement

Il y avait même nom fonctions dans le ejabberd plus, mais à l'intérieur du module XML.

Il semble que ce que vous voulez y faire est de créer un composant serveur XMPP. Beaucoup de choses ont déjà été dit sur ce poste href="https://stackoverflow.com/questions/1105378/which-xmpp-server-to-experiment-developing-a-server-component"> .

Je peux vous relier quelques liens utiles:

La solution de Gleber est vraiment « ejabberd » orientée (certainement le plus facile dans votre cas), alors que celui-ci peut évoluer avec d'autres serveurs XMPP.

Il est l'interface:

ejabberd_router:register_route(MyHost)

que je l'ai utilisé dans le passé et fonctionne bien. Une fois que le MyHost est inscrit sur ejabberd, le module recevra les communications destinées à MyHost par des messages de info (en supposant gen_server).

Comme l'a noté @gleber, ne pas oublier d'ajouter votre module dans le fichier de configuration.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top