Фильтрация пакетов Ejabberd

#php #erlang #ejabberd

#php #erlang #ejabberd

Вопрос:

Я пытаюсь создать приложение для онлайн-чата поверх ejabberd, я использую extauth, и до сих пор все работало нормально. Теперь я столкнулся с проблемой отправки сообщения от пользователя, которого нет в реестре B (какой-то модератор или что-то в этом роде), но ejabberd блокирует сообщение, потому что оба пользователя не подключены, я изучил функцию общего реестра Ejabberd, но она не работает с Extauth, я также попытался отфильтровать пакет (если пакет от модератора, чем просто переслать его, либо выполнить обычную обработку), но это не увенчалось успехом (не знаю, как переслать пакет и остановить выполнение перехватов).

Пожалуйста, помогите мне, как я могу достичь этой функциональности.

Спасибо

Ответ №1:

почему бы не подписывать пользователей друг на друга (отправляя последовательность subscribe-подписанный) — это может быть только временным. Подписавшись на пользователей, вы создадите записи в таблице реестра, которые позволят доставлять пакеты. Также, в зависимости от архитектуры вашего приложения для чата, возможно, попробуйте mod_muc?

хорошая ссылка на все потоки данных: http://xmpp.org /

Комментарии:

1. Подписка пользователей друг на друга — это последний вариант, но я хочу создать широковещательного пользователя.

Ответ №2:

Хотя форум старый, добавляю ответ для справки и изучения. Чтобы обойти перехваты и переслать сообщение, возможно, помогут следующие шаги

  • Добавьте перехват для ‘filter_packet’ с большим приоритетом
  • В этом выполните ваши проверки
  • перешлите это, вызвав ‘run’ на другом перехватчике, который вы ищете
  • отбросьте пакет в этот момент (поскольку об этом позаботится другой хук, для которого вызывается ‘run’)