25
1
mirror of https://github.com/processone/ejabberd.git synced 2024-11-22 16:20:52 +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
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>
* 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_receive/4]).
-include_lib("exmpp/include/exmpp.hrl").
-include("ejabberd.hrl").
-include("jlib.hrl").
start(Host, _Opts) ->
ejabberd_hooks:add(user_send_packet, Host,
@ -52,26 +53,21 @@ stop(Host) ->
ok.
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_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, []),
ServerJID = #jid{user = "", server = Host, resource = "",
luser = "", lserver = Host, lresource = ""},
NewAttrs = jlib:replace_from_to_attrs(jlib:jid_to_string(From),
jlib:jid_to_string(To),
Attrs),
FixedPacket = {xmlelement, Name, NewAttrs, Els},
ServerJID = #jid{domain = Host, ldomain = Host},
FixedPacket = exmpp_stanza:set_jids(Packet, From, To),
lists:foreach(
fun(Logger) ->
ejabberd_router:route(
ServerJID,
#jid{user = "", server = Logger, resource = "",
luser = "", lserver = Logger, lresource = ""},
{xmlelement, "route", [], [FixedPacket]})
#jid{domain = Logger, ldomain = Logger},
#xmlel{name = 'route', children = [FixedPacket]})
end, Loggers).

View File

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

View File

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