25
1
mirror of https://github.com/processone/ejabberd.git synced 2024-11-26 16:26:24 +01:00

Convert to exmpp.

PR:		EJABP-1

SVN Revision: 1610
This commit is contained in:
Jean-Sébastien Pédron 2008-10-07 09:55:38 +00:00
parent ca7a0813b4
commit 78466384c4
4 changed files with 53 additions and 62 deletions

View File

@ -3,6 +3,9 @@
* src/ejabberd_local.erl: Fix a bug where an error stanza was not * src/ejabberd_local.erl: Fix a bug where an error stanza was not
created correctly, leading to ejabberd_c2s crash. created correctly, leading to ejabberd_c2s crash.
* src/mod_stats.erl, src/mod_service_log.erl, src/mod_time.erl:
Convert to exmpp.
2008-10-06 Jean-Sébastien Pédron <js.pedron@meetic-corp.com> 2008-10-06 Jean-Sébastien Pédron <js.pedron@meetic-corp.com>
* src/ejabberd_sm.erl (process_iq/3): Fix a bug where we were matching * src/ejabberd_sm.erl (process_iq/3): Fix a bug where we were matching

View File

@ -34,8 +34,9 @@
log_user_send/3, log_user_send/3,
log_user_receive/4]). log_user_receive/4]).
-include_lib("exmpp/include/exmpp.hrl").
-include("ejabberd.hrl"). -include("ejabberd.hrl").
-include("jlib.hrl").
start(Host, _Opts) -> start(Host, _Opts) ->
ejabberd_hooks:add(user_send_packet, Host, ejabberd_hooks:add(user_send_packet, Host,
@ -52,26 +53,21 @@ stop(Host) ->
ok. ok.
log_user_send(From, To, Packet) -> log_user_send(From, To, Packet) ->
log_packet(From, To, Packet, From#jid.lserver). log_packet(From, To, Packet, From#jid.ldomain).
log_user_receive(_JID, From, To, Packet) -> log_user_receive(_JID, From, To, Packet) ->
log_packet(From, To, Packet, To#jid.lserver). log_packet(From, To, Packet, To#jid.ldomain).
log_packet(From, To, {xmlelement, Name, Attrs, Els}, Host) -> log_packet(From, To, Packet, Host) ->
Loggers = gen_mod:get_module_opt(Host, ?MODULE, loggers, []), Loggers = gen_mod:get_module_opt(Host, ?MODULE, loggers, []),
ServerJID = #jid{user = "", server = Host, resource = "", ServerJID = #jid{domain = Host, ldomain = Host},
luser = "", lserver = Host, lresource = ""}, FixedPacket = exmpp_stanza:set_jids(Packet, From, To),
NewAttrs = jlib:replace_from_to_attrs(jlib:jid_to_string(From),
jlib:jid_to_string(To),
Attrs),
FixedPacket = {xmlelement, Name, NewAttrs, Els},
lists:foreach( lists:foreach(
fun(Logger) -> fun(Logger) ->
ejabberd_router:route( ejabberd_router:route(
ServerJID, ServerJID,
#jid{user = "", server = Logger, resource = "", #jid{domain = Logger, ldomain = Logger},
luser = "", lserver = Logger, lresource = ""}, #xmlel{name = 'route', children = [FixedPacket]})
{xmlelement, "route", [], [FixedPacket]})
end, Loggers). end, Loggers).

View File

@ -33,7 +33,7 @@
stop/1, stop/1,
process_local_iq/3]). process_local_iq/3]).
-include("jlib.hrl"). -include_lib("exmpp/include/exmpp.hrl").
start(Host, Opts) -> start(Host, Opts) ->
IQDisc = gen_mod:get_opt(iqdisc, Opts, one_queue), IQDisc = gen_mod:get_opt(iqdisc, Opts, one_queue),
@ -44,33 +44,26 @@ stop(Host) ->
gen_iq_handler:remove_iq_handler(ejabberd_local, Host, ?NS_STATS). gen_iq_handler:remove_iq_handler(ejabberd_local, Host, ?NS_STATS).
process_local_iq(_From, To, #iq{id = _ID, type = Type, process_local_iq(_From, To, #iq{type = get,
xmlns = XMLNS, sub_el = SubEl} = IQ) -> ns = XMLNS, payload = SubEl} = IQ_Rec) ->
%%Lang = xml:get_tag_attr_s("xml:lang", SubEl), Node = string:tokens(exmpp_xml:get_attribute(SubEl, 'node', ""), "/"),
case Type of Names = get_names(exmpp_xml:get_child_elements(SubEl), []),
set ->
IQ#iq{type = error, sub_el = [SubEl, ?ERR_NOT_ALLOWED]};
get ->
{xmlelement, _, _Attrs, Els} = SubEl,
Node = string:tokens(xml:get_tag_attr_s("node", SubEl), "/"),
Names = get_names(Els, []),
case get_local_stats(To#jid.server, Node, Names) of case get_local_stats(To#jid.domain, Node, Names) of
{result, Res} -> {result, Res} ->
IQ#iq{type = result, Result = #xmlel{ns = XMLNS, name = 'query', children = Res},
sub_el = [{xmlelement, "query", exmpp_iq:result(IQ_Rec, Result);
[{"xmlns", XMLNS}],
Res}]};
{error, Error} -> {error, Error} ->
IQ#iq{type = error, sub_el = [SubEl, Error]} exmpp_iq:error(IQ_Rec, Error)
end end;
end. process_local_iq(_From, _To, #iq{type = set} = IQ_Rec) ->
exmpp_iq:error(IQ_Rec, 'not-allowed').
get_names([], Res) -> get_names([], Res) ->
Res; Res;
get_names([{xmlelement, "stat", Attrs, _} | Els], Res) -> get_names([#xmlel{name = 'stat', attrs = Attrs} | Els], Res) ->
Name = xml:get_attr_s("name", Attrs), Name = exmpp_xml:get_attribute_from_list(Attrs, 'name', ""),
case Name of case Name of
"" -> "" ->
get_names(Els, Res); get_names(Els, Res);
@ -81,7 +74,7 @@ get_names([_ | Els], Res) ->
get_names(Els, Res). get_names(Els, Res).
-define(STAT(Name), {xmlelement, "stat", [{"name", Name}], []}). -define(STAT(Name), #xmlel{ns = ?NS_STATS, name = 'stat', attrs = [#xmlattr{name = 'name', value = Name}]}).
get_local_stats(_Server, [], []) -> get_local_stats(_Server, [], []) ->
{result, {result,
@ -110,30 +103,30 @@ get_local_stats(_Server, ["running nodes", _], []) ->
get_local_stats(_Server, ["running nodes", ENode], Names) -> get_local_stats(_Server, ["running nodes", ENode], Names) ->
case search_running_node(ENode) of case search_running_node(ENode) of
false -> false ->
{error, ?ERR_ITEM_NOT_FOUND}; {error, 'item-not-found'};
Node -> Node ->
{result, {result,
lists:map(fun(Name) -> get_node_stat(Node, Name) end, Names)} lists:map(fun(Name) -> get_node_stat(Node, Name) end, Names)}
end; end;
get_local_stats(_Server, _, _) -> get_local_stats(_Server, _, _) ->
{error, ?ERR_FEATURE_NOT_IMPLEMENTED}. {error, 'feature-not-implemented'}.
-define(STATVAL(Val, Unit), -define(STATVAL(Val, Unit),
{xmlelement, "stat", #xmlel{ns = ?NS_STATS, name = 'stat', attrs =
[{"name", Name}, [#xmlattr{name = 'name', value = Name},
{"units", Unit}, #xmlattr{name = 'units', value = Unit},
{"value", Val} #xmlattr{name = 'value', value = Val}
], []}). ]}).
-define(STATERR(Code, Desc), -define(STATERR(Code, Desc),
{xmlelement, "stat", #xmlel{ns = ?NS_STATS, name = 'stat', attrs=
[{"name", Name}], [#xmlattr{name = 'name', value = Name}], children =
[{xmlelement, "error", [#xmlel{ns = ?NS_STATS, name = 'error', attrs =
[{"code", Code}], [#xmlattr{name = 'code', value = Code}], children =
[{xmlcdata, Desc}]}]}). [#xmlcdata{cdata = list_to_binary(Desc)}]}]}).
get_local_stat(Server, [], Name) when Name == "users/online" -> get_local_stat(Server, [], Name) when Name == "users/online" ->

View File

@ -33,8 +33,9 @@
stop/1, stop/1,
process_local_iq/3]). process_local_iq/3]).
-include_lib("exmpp/include/exmpp.hrl").
-include("ejabberd.hrl"). -include("ejabberd.hrl").
-include("jlib.hrl").
start(Host, Opts) -> start(Host, Opts) ->
@ -45,17 +46,15 @@ start(Host, Opts) ->
stop(Host) -> stop(Host) ->
gen_iq_handler:remove_iq_handler(ejabberd_local, Host, ?NS_TIME). gen_iq_handler:remove_iq_handler(ejabberd_local, Host, ?NS_TIME).
process_local_iq(_From, _To, #iq{type = Type, sub_el = SubEl} = IQ) -> process_local_iq(_From, _To, #iq{type = get} = IQ_Rec) ->
case Type of
set ->
IQ#iq{type = error, sub_el = [SubEl, ?ERR_NOT_ALLOWED]};
get ->
UTC = jlib:timestamp_to_iso(calendar:universal_time()), UTC = jlib:timestamp_to_iso(calendar:universal_time()),
IQ#iq{type = result, Result = #xmlel{ns = ?NS_TIME, name = 'query', children = [
sub_el = [{xmlelement, "query", #xmlel{ns = ?NS_TIME, name = 'utc', children = [
[{"xmlns", ?NS_TIME}], #xmlcdata{cdata = list_to_binary(UTC)}
[{xmlelement, "utc", [], ]}
[{xmlcdata, UTC}]}]}]} ]},
end. exmpp_iq:result(IQ_Rec, Result);
process_local_iq(_From, _To, #iq{type = set} = IQ_Rec) ->
exmpp_iq:error(IQ_Rec, 'not-allowed').