ejabberd: получить пользователей (версию и ОС) при подключении к серверу

Я пытаюсь читать пользователей os "Windows XP, Windows 7, Linux .... etc", когда они подключаются. Я работаю над ejabberd 2.1.x, но мне ничего не показывается.

Что я делаю:

-module(mod_test).

-behaviour(gen_mod).

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

%% hook handlers
-export([user_send_packet/3, filter_packet/1]).

-include("ejabberd.hrl").
-include("jlib.hrl").

-define(PROCNAME, ejabberd_mod_filter).

start(Host, _Opts) ->
    ejabberd_hooks:add(user_send_packet, Host, ?MODULE, user_send_packet, 75),
    ejabberd_hooks:add(filter_packet, global, ?MODULE, filter_packet, 75),
    ok.

stop(Host) ->
    ejabberd_hooks:delete(filter_packet, global, ?MODULE, filter_packet, 75),
    ejabberd_hooks:delete(user_send_packet, Host, ?MODULE, user_send_packet, 75),
    ok.

user_send_packet(_From, _To, _Packet) ->
    ok.

filter_packet({From, To, Packet}) ->
    io:format("~p", [Packet]),
filter_packet(Arg) ->
    Arg.

Он возвращается со всеми данными пользователей, такими как (статус, ресурс, колпачки ... и т. Д.), Еще (версия, ОС, имя клиента), есть ли способ сделать это?

Я верю, что это можно сделать, потому что в (muc chat) есть много ботов, которые делают это, если я набираю:

version some_user

вернуться ко мне с этим сообщением:

name : Psi+
version : 1.1
os : Windows XP

но я не знаю, как они это делают.


person Mr. zero    schedule 25.05.2016    source источник
comment
Ради интереса, есть ли какая-то конкретная причина, по которой вы используете ejabberd 2.1.x? С тех пор было много новых релизов.   -  person legoscia    schedule 25.05.2016
comment
Взгляните на os модуль erlang. Может быть, это приведет вас к решению.   -  person A. Sarid    schedule 25.05.2016
comment
@legoscia Я работал над этой версией до 3 лет, добавил в нее много вещей и исправил некоторые ошибки, поэтому я не хочу менять эту версию на более новую версию. В моем случае: поймать (имя, ОС, версия) клиента можно ли получить эту информацию, когда пользователь входит на сервер?   -  person Mr. zero    schedule 26.05.2016
comment
@ А.Сарид, нет, я не имел в виду модуль ОС. os : например, какой пользователь использует (Windows, Linux), он предоставляется протоколом xmpp   -  person Mr. zero    schedule 26.05.2016


Ответы (1)


Вы можете получить эту информацию, отправив клиенту запрос «Версия программного обеспечения», как описано в XEP-0092. Обычно ejabberd этого не делает, поэтому вам, возможно, придется написать код для отслеживания ответов самостоятельно. (Основная идея заключается в том, что сервер отправляет запрос с определенным идентификатором, а затем должен проверять ответы с тем же идентификатором, принимая во внимание тайм-ауты и ошибки.)

person legoscia    schedule 26.05.2016
comment
спасибо за Ваш ответ. есть ли какой-нибудь пример, помогите мне? с чего мне начать? спасибо еще раз. - person Mr. zero; 27.05.2016