سؤال

لديّ ejabberd وأجري مع مستخدمي الاختبار ، وعمله بشكل جيد. أريد أن أكتب وحدة نمطية يمكنها اعتراض الرسائل وتعديلها ، على النحو التالي:

  1. اعتراض "الرسائل"
  2. أرسلهم إلى ملف PHP
  3. احصل على النتيجة من نفس ملف PHP (فوري)
  4. قم بتعديل الرسالة stanza وأرسلها إلى أسفل السلك إلى المستلم

وثائق 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.

وتأكد من إضافة هذه الوحدة إلى تكوين Ejabberd إلى module الجزء:

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

فقط تمتد on_filter_packet/1 الطريقة التي تريدها وإرجاع الحزمة المعدلة بشكل مناسب.

نصائح أخرى

مثال Gleber ممتاز. لقد كتبت أيضًا مثالًا أكثر تعقيدًا على معالجة الحزم التي قمت بإنشائها لـ Chesspark التي تسمىmod_sunshine.

كيف يمكن إرسال بيانات XML هذه إلى PHP (عبر؟ xml =) واسترداد XML الناتج ثم تمريرها إلى المستلم؟

إذا كان لديك إصدار حديث من ejabberd يستخدم EXMPP ، فيمكنك استخدام exmpp_xml: node_to_binary/1 أو exmpp_xml: node_to_list/1 لتحويل التمثيل الداخلي لـ XML إلى ثنائي أو سلسلة على التوالي.

كانت هناك وظائف مشابهة في Ejabberd الأقدم ، ولكن داخل وحدة XML.

يبدو أن ما تريد القيام به هو إنشاء مكون خادم XMPP. لقد قيل بالفعل الكثير من الأشياء في هذا المنشور أي خادم XMPP لتجربة تطوير مكون الخادم.

يمكنني ربطك ببعض الروابط المفيدة:

حل Gleber هو في الحقيقة "Ejabberd" الموجهة (بالتأكيد أسهل في قضيتك) ، في حين أن هذا واحد يمكن أن يتوسع مع خوادم XMPP الأخرى.

هناك الواجهة:

ejabberd_router:register_route(MyHost)

التي استخدمتها في الماضي وتعمل بشكل جيد. مرة واحدة في MyHost مسجل لدى Ejabberd ، ستتلقى الوحدة الاتصالات المقصودة MyHost عبر info الرسائل (على افتراض gen_server).

كما لوحظ بواسطة @beger ، لا تنس إضافة الوحدة النمطية إلى ملف التكوين.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top