2016-05-25 9 views
1

Ich versuche, Benutzer os "Windows XP, Windows 7, Linux .... etc" zu lesen, wenn sie verbunden sind Ich arbeite an Ejabberd 2.1.x, aber nichts mir gezeigt.ejabberd: Benutzer (Version & os) beim Verbinden mit dem Server

Was ich tue, ist:

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

Es Rückkehr mit allen Benutzern, Daten wie (Status, Ressourcen, Kappen ... etc) else (Version, os, Client-Name) gibt es eine Möglichkeit, mach das ?

ich es glaube, ist weg, dies zu tun cuz in (muc Chat) gibt es viele bieten diese wie tun, wenn ich ein:

version some_user 

Rückkehr zu mir mit diesem msg:

name : Psi+ 
version : 1.1 
os : Windows XP 

aber ich weiß nicht, wie sie das machen.

+0

Aus Interesse, gibt es einen bestimmten Grund, warum Sie sind auf ejabberd 2.1.x? Seither gab es viele neuere Veröffentlichungen. – legoscia

+0

Werfen Sie einen Blick auf das Modul [os] (http://erlang.org/doc/man/os.html) Erlang. Vielleicht wird es dich für die Lösung führen. –

+1

@legoscia Ich habe an dieser Version vor 3 Jahren gearbeitet und ich habe viele Dinge hinzugefügt und einige Fehler behoben, so dass ich diese Version nicht auf die neuere Version ändern möchte. In meinem Fall: catch (Name, Betriebssystem, Version) des Clients ist es möglich, diese Informationen bei der Benutzeranmeldung auf dem Server zu erhalten? –

Antwort

2

Sie können diese Informationen erhalten, indem Sie eine Anfrage "Software Version" an den Client senden, wie in XEP-0092 beschrieben. Dies ist etwas, was Ejabberd normalerweise nicht tut, also müssen Sie möglicherweise Code für das Nachverfolgen von Antworten selbst schreiben. (Die Grundidee ist, dass der Server die Anfrage mit einer bestimmten ID sendet und dann nach Antworten mit derselben ID sucht, wobei Timeouts und Fehler zu berücksichtigen sind.)

+0

Dank für Ihre Antwort zur Verfügung gestellt. Gibt es irgendein Beispiel, hilf mir? Was soll ich anfangen? thnx wieder. –