24
1
mirror of https://github.com/processone/ejabberd.git synced 2024-06-10 21:47:01 +02:00

XML attributes as binary(). Change Node argument to binary in the following hooks:

disco_local_items, disco_local_features, disco_local_identity, disco_sm_items and 
disco_sm_identity.

SVN Revision: 1780
This commit is contained in:
Pablo Polvorin 2009-01-08 14:54:00 +00:00
parent 2cbd61f268
commit e0e58711bb
28 changed files with 596 additions and 573 deletions

View File

@ -1,3 +1,18 @@
2009-01-08 Pablo Polvorin <pablo.polvorin@process-one.net>
* src/mod_vcard_ldap.erl, src/mod_muc/mod_muc.erl, src/mod_roster.hrl,
src/mod_offline_odbc.erl, src/ejabberd_s2s_in.erl, src/adhoc.erl,
src/mod_configure.erl, src/mod_irc/mod_irc_connection.erl,
src/mod_irc/mod_irc.erl, src/web/ejabberd_http_poll.erl,
src/mod_privacy_odbc.erl, src/ejabberd_c2s.erl, src/mod_announce.erl,
src/mod_privacy.erl, src/mod_adhoc.erl, src/mod_pubsub/mod_pubsub.erl,
src/mod_vcard_odbc.erl, src/mod_stats.erl, src/mod_last.erl,
src/mod_roster.erl, src/ejabberd_service.erl, src/mod_disco.erl,
src/mod_configure2.erl, src/mod_roster_odbc.erl, src/ejabberd_s2s_out.erl,
src/mod_last_odbc.erl: XML attributes as binary(). Change Node argument
to binary in the following hooks: disco_local_items, disco_local_features,
disco_local_identity, disco_sm_items and disco_sm_identity.
2009-01-05 Pablo Polvorin <pablo.polvorin@process-one.net>
* src/mod_roster.erl: Fix typo.

View File

@ -113,7 +113,7 @@ produce_response(#adhoc_response{lang = _Lang,
"" ->
ActionsElAttrs = [];
_ ->
ActionsElAttrs = [#xmlattr{name = 'execute', value = DefaultAction}]
ActionsElAttrs = [#xmlattr{name = 'execute', value = list_to_binary(DefaultAction)}]
end,
ActionsEls = [#xmlel{ns = ?NS_ADHOC, name = 'actions', attrs =
ActionsElAttrs, children =
@ -121,11 +121,11 @@ produce_response(#adhoc_response{lang = _Lang,
end,
NotesEls = lists:map(fun({Type, Text}) ->
#xmlel{ns = ?NS_ADHOC, name = 'note', attrs =
[#xmlattr{name = 'type', value = Type}],
[#xmlattr{name = 'type', value = list_to_binary(Type)}],
children = [#xmlcdata{cdata = list_to_binary(Text)}]}
end, Notes),
#xmlel{ns = ?NS_ADHOC, name = 'command', attrs =
[#xmlattr{name = 'sessionid', value = SessionID},
#xmlattr{name = 'node', value = Node},
#xmlattr{name = 'status', value = atom_to_list(Status)}], children =
[#xmlattr{name = 'sessionid', value = list_to_binary(SessionID)},
#xmlattr{name = 'node', value = list_to_binary(Node)},
#xmlattr{name = 'status', value = list_to_binary(atom_to_list(Status))}], children =
ActionsEls ++ NotesEls ++ Elements}.

View File

@ -837,7 +837,7 @@ session_established2(El, StateData) ->
undefined ->
exmpp_jid:jid_to_bare_jid(StateData#state.jid);
_ ->
exmpp_jid:list_to_jid(To)
exmpp_jid:binary_to_jid(To)
end,
NewEl = case exmpp_stanza:get_lang(El) of
undefined ->
@ -1923,7 +1923,7 @@ check_from(El, FromJID) ->
El;
SJID ->
try
JID = exmpp_jid:list_to_jid(SJID),
JID = exmpp_jid:binary_to_jid(SJID),
case exmpp_jid:compare_jids(JID, FromJID) of
true ->
El;

View File

@ -371,7 +371,7 @@ stream_established({xmlstreamelement, El}, StateData) ->
error;
F ->
try
exmpp_jid:list_to_jid(F)
exmpp_jid:binary_to_jid(F)
catch
_Exception1 -> error
end
@ -381,7 +381,7 @@ stream_established({xmlstreamelement, El}, StateData) ->
error;
T ->
try
exmpp_jid:list_to_jid(T)
exmpp_jid:binary_to_jid(T)
catch
_Exception2 -> error
end

View File

@ -807,8 +807,8 @@ bounce_element(El, Condition) ->
"result" -> ok;
_ ->
Err = exmpp_stanza:reply_with_error(El, Condition),
From = exmpp_jid:list_to_jid(exmpp_stanza:get_sender(El)),
To = exmpp_jid:list_to_jid(exmpp_stanza:get_recipient(El)),
From = exmpp_jid:binary_to_jid(exmpp_stanza:get_sender(El)),
To = exmpp_jid:binary_to_jid(exmpp_stanza:get_recipient(El)),
% No namespace conversion (:server <-> :client) is done.
% This is handled by C2S and S2S send_element functions.
ejabberd_router:route(To, From, Err)

View File

@ -154,7 +154,7 @@ wait_for_stream({xmlstreamstart, #xmlel{ns = NS, attrs = Attrs}}, StateData) ->
%% component served by this Jabber server.
%% However several transports don't respect that,
%% so ejabberd doesn't check 'to' attribute (EJAB-717)
To = exmpp_stanza:get_recipient_from_attrs(Attrs),
To = binary_to_list(exmpp_stanza:get_recipient_from_attrs(Attrs)),
Opening_Reply = exmpp_stream:opening_reply(xml:crypt(To),
?NS_COMPONENT_ACCEPT,
{0, 0}, StateData#state.streamid),
@ -227,10 +227,10 @@ stream_established({xmlstreamelement, El}, StateData) ->
%% when accept packets from any address.
%% In this case, the component can send packet of
%% behalf of the server users.
false -> exmpp_jid:list_to_jid(From);
false -> exmpp_jid:binary_to_jid(From);
%% The default is the standard behaviour in XEP-0114
_ ->
FromJID1 = exmpp_jib:string_to_jid(From),
FromJID1 = exmpp_jid:binary_to_jid(From),
Server = exmpp_jid:ldomain_as_list(FromJID1),
case lists:member(Server, StateData#state.hosts) of
true -> FromJID1;
@ -240,7 +240,7 @@ stream_established({xmlstreamelement, El}, StateData) ->
To = exmpp_stanza:get_recipient(El),
ToJID = case To of
undefined -> error;
_ -> exmpp_jib:string_to_jid(To)
_ -> exmpp_jib:binary_to_jid(To)
end,
if ((El#xmlel.name == 'iq') or
(El#xmlel.name == 'message') or

View File

@ -81,8 +81,8 @@ stop(Host) ->
%-------------------------------------------------------------------------
get_local_commands(Acc, _From, To, "", Lang) ->
Server = exmpp_jid:domain_as_list(To),
get_local_commands(Acc, _From, To, <<>>, Lang) ->
Server = exmpp_jid:domain(To),
LServer = exmpp_jid:ldomain_as_list(To),
Display = gen_mod:get_module_opt(LServer, ?MODULE, report_commands_node, false),
case Display of
@ -96,16 +96,17 @@ get_local_commands(Acc, _From, To, "", Lang) ->
Nodes = [#xmlel{ns = ?NS_DISCO_ITEMS,
name = 'item', attrs =
[#xmlattr{name = 'jid', value = Server},
#xmlattr{name = 'node', value = ?NS_ADHOC_s},
#xmlattr{name = 'name', value = translate:translate(Lang, "Commands")}]
#xmlattr{name = 'node', value = list_to_binary(?NS_ADHOC_s)},
#xmlattr{name = 'name',
value = list_to_binary(translate:translate(Lang, "Commands"))}]
}],
{result, Items ++ Nodes}
end;
get_local_commands(_Acc, From, To, ?NS_ADHOC_s, Lang) ->
get_local_commands(_Acc, From, To, ?NS_ADHOC_b, Lang) ->
ejabberd_hooks:run_fold(adhoc_local_items, exmpp_jid:ldomain(To), {result, []}, [From, To, Lang]);
get_local_commands(_Acc, _From, _To, "ping", _Lang) ->
get_local_commands(_Acc, _From, _To, <<"ping">>, _Lang) ->
{result, []};
get_local_commands(Acc, _From, _To, _Node, _Lang) ->
@ -113,7 +114,7 @@ get_local_commands(Acc, _From, _To, _Node, _Lang) ->
%-------------------------------------------------------------------------
get_sm_commands(Acc, _From, To, "", Lang) ->
get_sm_commands(Acc, _From, To, <<>>, Lang) ->
LServer = exmpp_jid:ldomain_as_list(To),
Display = gen_mod:get_module_opt(LServer, ?MODULE, report_commands_node, false),
case Display of
@ -126,14 +127,14 @@ get_sm_commands(Acc, _From, To, "", Lang) ->
end,
Nodes = [#xmlel{ns = ?NS_DISCO_ITEMS,
name = 'item', attrs =
[#xmlattr{name = 'jid', value = exmpp_jid:jid_to_list(To)},
#xmlattr{name = 'node', value = ?NS_ADHOC_s},
#xmlattr{name = 'name', value = translate:translate(Lang, "Commands")}]
[#xmlattr{name = 'jid', value = exmpp_jid:jid_to_binary(To)},
#xmlattr{name = 'node', value = list_to_binary(?NS_ADHOC_s)},
#xmlattr{name = 'name', value = list_to_binary(translate:translate(Lang, "Commands"))}]
}],
{result, Items ++ Nodes}
end;
get_sm_commands(_Acc, From, To, ?NS_ADHOC_s, Lang) ->
get_sm_commands(_Acc, From, To, ?NS_ADHOC_b, Lang) ->
ejabberd_hooks:run_fold(adhoc_sm_items, exmpp_jid:ldomain(To), {result, []}, [From, To, Lang]);
get_sm_commands(Acc, _From, _To, _Node, _Lang) ->
@ -142,17 +143,17 @@ get_sm_commands(Acc, _From, _To, _Node, _Lang) ->
%-------------------------------------------------------------------------
%% On disco info request to the ad-hoc node, return automation/command-list.
get_local_identity(Acc, _From, _To, ?NS_ADHOC_s, Lang) ->
get_local_identity(Acc, _From, _To, ?NS_ADHOC_b, Lang) ->
[#xmlel{ns = ?NS_DISCO_INFO, name = 'identity', attrs =
[#xmlattr{name = 'category', value = "automation"},
#xmlattr{name = 'type', value = "command-list"},
#xmlattr{name = 'name', value = translate:translate(Lang, "Commands")}]} | Acc];
[#xmlattr{name = 'category', value = <<"automation">>},
#xmlattr{name = 'type', value = <<"command-list">>},
#xmlattr{name = 'name', value = list_to_binary(translate:translate(Lang, "Commands"))}]} | Acc];
get_local_identity(Acc, _From, _To, "ping", Lang) ->
get_local_identity(Acc, _From, _To, <<"ping">>, Lang) ->
[#xmlel{ns = ?NS_DISCO_INFO, name = 'identity', attrs =
[#xmlattr{name = 'category', value = "automation"},
#xmlattr{name = 'type', value = "command-node"},
#xmlattr{name = 'name', value = translate:translate(Lang, "Ping")}]} | Acc];
[#xmlattr{name = 'category', value = <<"automation">>},
#xmlattr{name = 'type', value = <<"command-node">>},
#xmlattr{name = 'name', value = list_to_binary(translate:translate(Lang, "Ping"))}]} | Acc];
get_local_identity(Acc, _From, _To, _Node, _Lang) ->
Acc.
@ -162,27 +163,27 @@ get_local_identity(Acc, _From, _To, _Node, _Lang) ->
%% On disco info request to the ad-hoc node, return automation/command-list.
get_sm_identity(Acc, _From, _To, ?NS_ADHOC_s, Lang) ->
[#xmlel{ns = ?NS_DISCO_INFO, name = 'identity', attrs =
[#xmlattr{name = 'category', value = "automation"},
#xmlattr{name = 'type', value = "command-list"},
#xmlattr{name = 'name', value = translate:translate(Lang, "Commands")}]} | Acc];
[#xmlattr{name = 'category', value = <<"automation">>},
#xmlattr{name = 'type', value = <<"command-list">>},
#xmlattr{name = 'name', value = list_to_binary(translate:translate(Lang, "Commands"))}]} | Acc];
get_sm_identity(Acc, _From, _To, _Node, _Lang) ->
Acc.
%-------------------------------------------------------------------------
get_local_features(Acc, _From, _To, "", _Lang) ->
get_local_features(Acc, _From, _To, <<>>, _Lang) ->
Feats = case Acc of
{result, I} -> I;
_ -> []
end,
{result, Feats ++ [?NS_ADHOC_s]};
get_local_features(_Acc, _From, _To, ?NS_ADHOC_s, _Lang) ->
get_local_features(_Acc, _From, _To, ?NS_ADHOC_b, _Lang) ->
%% override all lesser features...
{result, []};
get_local_features(_Acc, _From, _To, "ping", _Lang) ->
get_local_features(_Acc, _From, _To, <<"ping">>, _Lang) ->
%% override all lesser features...
{result, [?NS_ADHOC_s]};
@ -236,7 +237,7 @@ process_adhoc_request(From, To, IQ_Rec, Hook) ->
ping_item(Acc, _From, To, Lang) ->
Server = exmpp_jid:domain_as_list(To),
Server = exmpp_jid:domain(To),
Items = case Acc of
{result, I} ->
I;
@ -245,8 +246,8 @@ ping_item(Acc, _From, To, Lang) ->
end,
Nodes = [#xmlel{ns = ?NS_DISCO_INFO, name = 'item', attrs =
[#xmlattr{name = 'jid', value = Server},
#xmlattr{name = 'node', value = "ping"},
#xmlattr{name = 'name', value = translate:translate(Lang, "Ping")}]}],
#xmlattr{name = 'node', value = <<"ping">>},
#xmlattr{name = 'name', value = list_to_binary(translate:translate(Lang, "Ping"))}]}],
{result, Items ++ Nodes}.

View File

@ -179,12 +179,12 @@ announce(From, To, Packet) ->
%% Announcing via ad-hoc commands
-define(INFO_COMMAND(Lang, Node),
[#xmlel{ns = ?NS_DISCO_INFO, name = 'identity', attrs =
[#xmlattr{name = 'category', value = "automation"},
#xmlattr{name = 'type', value = "command-node"},
#xmlattr{name = 'name', value = get_title(Lang, Node)}]}]).
[#xmlattr{name = 'category', value = <<"automation">>},
#xmlattr{name = 'type', value = <<"command-node">>},
#xmlattr{name = 'name', value = list_to_binary(get_title(Lang, Node))}]}]).
disco_identity(Acc, _From, _To, Node, Lang) ->
LNode = tokenize(Node),
LNode = tokenize(binary_to_list(Node)),
case LNode of
?NS_ADMINL("announce") ->
?INFO_COMMAND(Lang, Node);
@ -220,7 +220,7 @@ disco_identity(Acc, _From, _To, Node, Lang) ->
{result, Feats}
end).
disco_features(Acc, From, To, "announce", _Lang) ->
disco_features(Acc, From, To, <<"announce">>, _Lang) ->
LServer = exmpp_jid:ldomain_as_list(To),
case gen_mod:is_loaded(LServer, mod_adhoc) of
false ->
@ -248,25 +248,25 @@ disco_features(Acc, From, To, Node, _Lang) ->
AccessGlobal = gen_mod:get_module_opt(global, ?MODULE, access, none),
AllowGlobal = acl:match_rule(global, AccessGlobal, From),
case Node of
?NS_ADMIN_s ++ "#announce" ->
<<?NS_ADMIN_s, "#announce">> ->
?INFO_RESULT(Allow, [?NS_ADHOC_s]);
?NS_ADMIN_s ++ "#announce-all" ->
<<?NS_ADMIN_s, "#announce-all">> ->
?INFO_RESULT(Allow, [?NS_ADHOC_s]);
?NS_ADMIN_s ++ "#set-motd" ->
<<?NS_ADMIN_s, "#set-motd">> ->
?INFO_RESULT(Allow, [?NS_ADHOC_s]);
?NS_ADMIN_s ++ "#edit-motd" ->
<<?NS_ADMIN_s, "#edit-motd">> ->
?INFO_RESULT(Allow, [?NS_ADHOC_s]);
?NS_ADMIN_s ++ "#delete-motd" ->
<<?NS_ADMIN_s, "#delete-motd">> ->
?INFO_RESULT(Allow, [?NS_ADHOC_s]);
?NS_ADMIN_s ++ "#announce-allhosts" ->
<<?NS_ADMIN_s, "#announce-allhosts">> ->
?INFO_RESULT(AllowGlobal, [?NS_ADHOC_s]);
?NS_ADMIN_s ++ "#announce-all-allhosts" ->
<<?NS_ADMIN_s, "#announce-all-allhosts">> ->
?INFO_RESULT(AllowGlobal, [?NS_ADHOC_s]);
?NS_ADMIN_s ++ "#set-motd-allhosts" ->
<<?NS_ADMIN_s, "#set-motd-allhosts">> ->
?INFO_RESULT(AllowGlobal, [?NS_ADHOC_s]);
?NS_ADMIN_s ++ "#edit-motd-allhosts" ->
<<?NS_ADMIN_s, "#edit-motd-allhosts">> ->
?INFO_RESULT(AllowGlobal, [?NS_ADHOC_s]);
?NS_ADMIN_s ++ "#delete-motd-allhosts" ->
<<?NS_ADMIN_s, "#delete-motd-allhosts">> ->
?INFO_RESULT(AllowGlobal, [?NS_ADHOC_s]);
_ ->
Acc
@ -279,7 +279,7 @@ disco_features(Acc, From, To, Node, _Lang) ->
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
[#xmlattr{name = 'jid', value = Server},
#xmlattr{name = 'node', value = Node},
#xmlattr{name = 'name', value = get_title(Lang, Node)}]}).
#xmlattr{name = 'name', value = list_to_binary(get_title(Lang, Node))}]}).
-define(ITEMS_RESULT(Allow, Items),
case Allow of
@ -289,9 +289,9 @@ disco_features(Acc, From, To, Node, _Lang) ->
{result, Items}
end).
disco_items(Acc, From, To, "", Lang) ->
disco_items(Acc, From, To, <<>>, Lang) ->
LServer = exmpp_jid:ldomain_as_list(To),
Server = exmpp_jid:domain_as_list(To),
Server = exmpp_jid:domain(To),
case gen_mod:is_loaded(LServer, mod_adhoc) of
false ->
@ -308,12 +308,12 @@ disco_items(Acc, From, To, "", Lang) ->
{result, I} -> I;
_ -> []
end,
Nodes = [?NODE_TO_ITEM(Lang, Server, "announce")],
Nodes = [?NODE_TO_ITEM(Lang, Server, <<"announce">>)],
{result, Items ++ Nodes}
end
end;
disco_items(Acc, From, To, "announce", Lang) ->
disco_items(Acc, From, To, <<"announce">>, Lang) ->
LServer = exmpp_jid:ldomain_as_list(To),
case gen_mod:is_loaded(LServer, mod_adhoc) of
false ->
@ -333,25 +333,25 @@ disco_items(Acc, From, To, Node, _Lang) ->
AccessGlobal = gen_mod:get_module_opt(global, ?MODULE, access, none),
AllowGlobal = acl:match_rule(global, AccessGlobal, From),
case Node of
?NS_ADMIN_s ++ "#announce" ->
<<?NS_ADMIN_s, "#announce">> ->
?ITEMS_RESULT(Allow, []);
?NS_ADMIN_s ++ "#announce-all" ->
<<?NS_ADMIN_s, "#announce-all">> ->
?ITEMS_RESULT(Allow, []);
?NS_ADMIN_s ++ "#set-motd" ->
<<?NS_ADMIN_s, "#set-motd">> ->
?ITEMS_RESULT(Allow, []);
?NS_ADMIN_s ++ "#edit-motd" ->
<<?NS_ADMIN_s, "#edit-motd">> ->
?ITEMS_RESULT(Allow, []);
?NS_ADMIN_s ++ "#delete-motd" ->
<<?NS_ADMIN_s, "#delete-motd">> ->
?ITEMS_RESULT(Allow, []);
?NS_ADMIN_s ++ "#announce-allhosts" ->
<<?NS_ADMIN_s, "#announce-allhosts">> ->
?ITEMS_RESULT(AllowGlobal, []);
?NS_ADMIN_s ++ "#announce-all-allhosts" ->
<<?NS_ADMIN_s, "#announce-all-allhosts">> ->
?ITEMS_RESULT(AllowGlobal, []);
?NS_ADMIN_s ++ "#set-motd-allhosts" ->
<<?NS_ADMIN_s, "#set-motd-allhosts">> ->
?ITEMS_RESULT(AllowGlobal, []);
?NS_ADMIN_s ++ "#edit-motd-allhosts" ->
<<?NS_ADMIN_s, "#edit-motd-allhosts">> ->
?ITEMS_RESULT(AllowGlobal, []);
?NS_ADMIN_s ++ "#delete-motd-allhosts" ->
<<?NS_ADMIN_s, "#delete-motd-allhosts">> ->
?ITEMS_RESULT(AllowGlobal, []);
_ ->
Acc
@ -362,26 +362,26 @@ disco_items(Acc, From, To, Node, _Lang) ->
announce_items(Acc, From, To, Lang) ->
LServer = exmpp_jid:ldomain_as_list(To),
Server = exmpp_jid:domain_as_list(To),
Server = exmpp_jid:domain(To),
Access1 = gen_mod:get_module_opt(LServer, ?MODULE, access, none),
Nodes1 = case acl:match_rule(LServer, Access1, From) of
allow ->
[?NODE_TO_ITEM(Lang, Server, ?NS_ADMIN_s ++ "#announce"),
?NODE_TO_ITEM(Lang, Server, ?NS_ADMIN_s ++ "#announce-all"),
?NODE_TO_ITEM(Lang, Server, ?NS_ADMIN_s ++ "#set-motd"),
?NODE_TO_ITEM(Lang, Server, ?NS_ADMIN_s ++ "#edit-motd"),
?NODE_TO_ITEM(Lang, Server, ?NS_ADMIN_s ++ "#delete-motd")];
[?NODE_TO_ITEM(Lang, Server, <<?NS_ADMIN_s, "#announce">>),
?NODE_TO_ITEM(Lang, Server, <<?NS_ADMIN_s, "#announce-all">>),
?NODE_TO_ITEM(Lang, Server, <<?NS_ADMIN_s, "#set-motd">>),
?NODE_TO_ITEM(Lang, Server, <<?NS_ADMIN_s, "#edit-motd">>),
?NODE_TO_ITEM(Lang, Server, <<?NS_ADMIN_s, "#delete-motd">>)];
deny ->
[]
end,
Access2 = gen_mod:get_module_opt(global, ?MODULE, access, none),
Nodes2 = case acl:match_rule(global, Access2, From) of
allow ->
[?NODE_TO_ITEM(Lang, Server, ?NS_ADMIN_s ++ "#announce-allhosts"),
?NODE_TO_ITEM(Lang, Server, ?NS_ADMIN_s ++ "#announce-all-allhosts"),
?NODE_TO_ITEM(Lang, Server, ?NS_ADMIN_s ++ "#set-motd-allhosts"),
?NODE_TO_ITEM(Lang, Server, ?NS_ADMIN_s ++ "#edit-motd-allhosts"),
?NODE_TO_ITEM(Lang, Server, ?NS_ADMIN_s ++ "#delete-motd-allhosts")];
[?NODE_TO_ITEM(Lang, Server, <<?NS_ADMIN_s, "#announce-allhosts">>),
?NODE_TO_ITEM(Lang, Server, <<?NS_ADMIN_s, "#announce-all-allhosts">>),
?NODE_TO_ITEM(Lang, Server, <<?NS_ADMIN_s, "#set-motd-allhosts">>),
?NODE_TO_ITEM(Lang, Server, <<?NS_ADMIN_s, "#edit-motd-allhosts">>),
?NODE_TO_ITEM(Lang, Server, <<?NS_ADMIN_s, "#delete-motd-allhosts">>)];
deny ->
[]
end,
@ -481,17 +481,17 @@ announce_commands(From, To,
end.
-define(VVALUE(Val),
#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(Val)}]}).
#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = Val}]}).
-define(VVALUEL(Val),
case Val of
"" -> [];
<<>> -> [];
_ -> [?VVALUE(Val)]
end).
-define(TVFIELD(Type, Var, Val),
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'type', value = Type},
#xmlattr{name = 'var', value = Var}], children =
?VVALUEL(Val)}).
-define(HFIELD(), ?TVFIELD("hidden", "FORM_TYPE", ?NS_ADMIN_s)).
-define(HFIELD(), ?TVFIELD(<<"hidden">>, <<"FORM_TYPE">>, list_to_binary(?NS_ADMIN_s))).
generate_adhoc_form(Lang, Node, ServerHost) ->
LNode = tokenize(Node),
@ -502,29 +502,29 @@ generate_adhoc_form(Lang, Node, ServerHost) ->
{[], []}
end,
#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs =
[#xmlattr{name = 'type', value = "form"}], children =
[#xmlattr{name = 'type', value = <<"form">>}], children =
[?HFIELD(),
#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children = [#xmlcdata{cdata = list_to_binary(get_title(Lang, Node))}]}]
++
if (LNode == ?NS_ADMINL("delete-motd"))
or (LNode == ?NS_ADMINL("delete-motd-allhosts")) ->
[#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[#xmlattr{name = 'var', value = "confirm"},
#xmlattr{name = 'type', value = "boolean"},
#xmlattr{name = 'label', value = translate:translate(Lang, "Really delete message of the day?")}], children =
[#xmlattr{name = 'var', value = <<"confirm">>},
#xmlattr{name = 'type', value = <<"boolean">>},
#xmlattr{name = 'label', value = list_to_binary(translate:translate(Lang, "Really delete message of the day?"))}], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children =
[#xmlcdata{cdata = <<"true">>}]}]}];
true ->
[#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[#xmlattr{name = 'var', value = "subject"},
#xmlattr{name = 'type', value = "text-single"},
#xmlattr{name = 'label', value = translate:translate(Lang, "Subject")}], children =
?VVALUEL(OldSubject)},
[#xmlattr{name = 'var', value = <<"subject">>},
#xmlattr{name = 'type', value = <<"text-single">>},
#xmlattr{name = 'label', value = list_to_binary(translate:translate(Lang, "Subject"))}], children =
?VVALUEL(list_to_binary(OldSubject))},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[#xmlattr{name = 'var', value = "body"},
#xmlattr{name = 'type', value = "text-multi"},
#xmlattr{name = 'label', value = translate:translate(Lang, "Message body")}], children =
?VVALUEL(OldBody)}]
[#xmlattr{name = 'var', value = <<"body">>},
#xmlattr{name = 'type', value = <<"text-multi">>},
#xmlattr{name = 'label', value = list_to_binary(translate:translate(Lang, "Message body"))}], children =
?VVALUEL(list_to_binary(OldBody))}]
end}.
join_lines([]) ->
@ -569,7 +569,7 @@ handle_adhoc_form(From, To,
node = Node,
sessionid = SessionID,
status = completed},
Packet = #xmlel{ns = ?NS_JABBER_CLIENT, name = 'message', attrs = [#xmlattr{name = 'type', value = "normal"}], children =
Packet = #xmlel{ns = ?NS_JABBER_CLIENT, name = 'message', attrs = [#xmlattr{name = 'type', value = <<"normal">>}], children =
if Subject /= [] ->
[#xmlel{ns = ?NS_JABBER_CLIENT, name = 'subject', children =
[#xmlcdata{cdata = list_to_binary(Subject)}]}];

View File

@ -51,7 +51,7 @@
-include("ejabberd.hrl").
-include("adhoc.hrl").
-define(T(Lang, Text), translate:translate(Lang, Text)).
-define(T(Lang, Text), list_to_binary(translate:translate(Lang, Text))).
%% Copied from ejabberd_sm.erl
-record(session, {sid, usr, us, priority, info}).
@ -96,11 +96,11 @@ stop(Host) ->
#xmlattr{name = 'name', value = ?T(Lang, Name)}]}]).
-define(INFO_COMMAND(Name, Lang),
?INFO_IDENTITY("automation", "command-node", Name, Lang)).
?INFO_IDENTITY(<<"automation">>, <<"command-node">>, Name, Lang)).
-define(NODEJID(To, Name, Node),
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
[#xmlattr{name = 'jid', value = exmpp_jid:jid_to_list(To)},
[#xmlattr{name = 'jid', value = exmpp_jid:jid_to_binary(To)},
#xmlattr{name = 'name', value = ?T(Lang, Name)},
#xmlattr{name = 'node', value = Node}]}).
@ -110,7 +110,7 @@ stop(Host) ->
#xmlattr{name = 'name', value = ?T(Lang, Name)},
#xmlattr{name = 'node', value = Node}]}).
-define(NS_ADMINX(Sub), ?NS_ADMIN_s++"#"++Sub).
-define(NS_ADMINX(Sub), <<?NS_ADMIN_s,"#", Sub/binary>>).
-define(NS_ADMINL(Sub), ["http:","jabber.org","protocol","admin", Sub]).
tokenize(Node) -> string:tokens(Node, "/#").
@ -123,10 +123,10 @@ get_sm_identity(Acc, _From, _To, Node, Lang) ->
end.
get_local_identity(Acc, _From, _To, Node, Lang) ->
LNode = tokenize(Node),
LNode = tokenize(binary_to_list(Node)),
case LNode of
["running nodes", ENode] ->
?INFO_IDENTITY("ejabberd", "node", ENode, Lang);
?INFO_IDENTITY(<<"ejabberd">>, <<"node">>, ENode, Lang);
["running nodes", _ENode, "DB"] ->
?INFO_COMMAND("Database", Lang);
["running nodes", _ENode, "modules", "start"] ->
@ -204,7 +204,7 @@ get_local_features(Acc, From, To, Node, _Lang) ->
false ->
Acc;
_ ->
LNode = tokenize(Node),
LNode = tokenize(binary_to_list(Node)),
Allow = acl:match_rule(LServer, configure, From),
case LNode of
["config"] ->
@ -263,9 +263,9 @@ adhoc_sm_items(Acc, From, To, Lang) ->
empty -> []
end,
Nodes = [#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
[#xmlattr{name = 'jid', value = exmpp_jid:jid_to_list(To)},
[#xmlattr{name = 'jid', value = exmpp_jid:jid_binary(To)},
#xmlattr{name = 'name', value = ?T(Lang, "Configuration")},
#xmlattr{name = 'node', value = "config"}]}],
#xmlattr{name = 'node', value = <<"config">>}]}],
{result, Items ++ Nodes};
_ ->
Acc
@ -283,10 +283,10 @@ get_sm_items(Acc, From, To, Node, Lang) ->
{result, Its} -> Its;
empty -> []
end,
case {acl:match_rule(LServer, configure, From), Node} of
case {acl:match_rule(LServer, configure, From), binary_to_list(Node)} of
{allow, ""} ->
Nodes = [?NODEJID(To, "Configuration", "config"),
?NODEJID(To, "User Management", "user")],
Nodes = [?NODEJID(To, "Configuration", <<"config">>),
?NODEJID(To, "User Management", <<"user">>)],
{result, Items ++ Nodes ++ get_user_resources(To)};
{allow, "config"} ->
{result, []};
@ -303,17 +303,16 @@ get_user_resources(BareJID) ->
lists:map(fun(R) ->
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
[#xmlattr{name = 'jid',
value = exmpp_jid:jid_to_list(
value = exmpp_jid:jid_to_binary(
exmpp_jid:bare_jid_to_jid(BareJID, R))},
#xmlattr{name = 'name',
value = exmpp_jid:lnode_as_list(BareJID)}]}
value = exmpp_jid:lnode(BareJID)}]}
end, lists:sort(Rs)).
%%%-----------------------------------------------------------------------
adhoc_local_items(Acc, From, To, Lang) ->
LServer = exmpp_jid:ldomain_as_list(To),
Server = exmpp_jid:domain_as_list(To),
case acl:match_rule(LServer, configure, From) of
allow ->
Items = case Acc of
@ -321,7 +320,7 @@ adhoc_local_items(Acc, From, To, Lang) ->
empty -> []
end,
%% Recursively get all configure commands
Nodes = recursively_get_local_items(LServer, "", Server, Lang),
Nodes = recursively_get_local_items(LServer, "", exmpp_jid:domain(To), Lang),
Nodes1 = lists:filter(
fun(N) ->
Nd = exmpp_xml:get_attribute(N, 'node', ""),
@ -374,7 +373,7 @@ recursively_get_local_items(LServer, Node, Server, Lang) ->
Fallback;
allow ->
case get_local_items(LServer, LNode,
exmpp_jid:jid_to_list(To), Lang) of
exmpp_jid:jid_to_binary(To), Lang) of
{result, Res} ->
{result, Res};
{error, Error} ->
@ -382,7 +381,7 @@ recursively_get_local_items(LServer, Node, Server, Lang) ->
end
end).
get_local_items(Acc, From, To, "", Lang) ->
get_local_items(Acc, From, To, <<>>, Lang) ->
LServer = exmpp_jid:ldomain_as_list(To),
case gen_mod:is_loaded(LServer, mod_adhoc) of
false ->
@ -398,7 +397,7 @@ get_local_items(Acc, From, To, "", Lang) ->
{result, Items};
allow ->
case get_local_items(LServer, [],
exmpp_jid:jid_to_list(To), Lang) of
exmpp_jid:jid_to_binary(To), Lang) of
{result, Res} ->
{result, Items ++ Res};
{error, _Error} ->
@ -413,7 +412,7 @@ get_local_items(Acc, From, To, Node, Lang) ->
false ->
Acc;
_ ->
LNode = tokenize(Node),
LNode = tokenize(binary_to_list(Node)),
Allow = acl:match_rule(LServer, configure, From),
case LNode of
["config"] ->
@ -465,19 +464,19 @@ get_local_items(Acc, From, To, Node, Lang) ->
get_local_items(_Host, [], Server, Lang) ->
{result,
[?NODE("Configuration", "config"),
?NODE("User Management", "user"),
?NODE("Online Users", "online users"),
?NODE("All Users", "all users"),
?NODE("Outgoing s2s Connections", "outgoing s2s"),
?NODE("Running Nodes", "running nodes"),
?NODE("Stopped Nodes", "stopped nodes")
[?NODE("Configuration", <<"config">>),
?NODE("User Management", <<"user">>),
?NODE("Online Users", <<"online users">>),
?NODE("All Users", <<"all users">>),
?NODE("Outgoing s2s Connections", <<"outgoing s2s">>),
?NODE("Running Nodes", <<"running nodes">>),
?NODE("Stopped Nodes", <<"stopped nodes">>)
]};
get_local_items(_Host, ["config"], Server, Lang) ->
{result,
[?NODE("Access Control Lists", "config/acls"),
?NODE("Access Rules", "config/access")
[?NODE("Access Control Lists", <<"config/acls">>),
?NODE("Access Rules", <<"config/access">>)
]};
get_local_items(_Host, ["config", _], _Server, _Lang) ->
@ -485,15 +484,15 @@ get_local_items(_Host, ["config", _], _Server, _Lang) ->
get_local_items(_Host, ["user"], Server, Lang) ->
{result,
[?NODE("Add User", ?NS_ADMINX("add-user")),
?NODE("Delete User", ?NS_ADMINX("delete-user")),
?NODE("End User Session", ?NS_ADMINX("end-user-session")),
?NODE("Get User Password", ?NS_ADMINX("get-user-password")),
?NODE("Change User Password",?NS_ADMINX("change-user-password")),
?NODE("Get User Last Login Time", ?NS_ADMINX("get-user-lastlogin")),
?NODE("Get User Statistics", ?NS_ADMINX("user-stats")),
?NODE("Get Number of Registered Users",?NS_ADMINX("get-registered-users-num")),
?NODE("Get Number of Online Users",?NS_ADMINX("get-online-users-num"))
[?NODE("Add User", ?NS_ADMINX(<<"add-user">>)),
?NODE("Delete User", ?NS_ADMINX(<<"delete-user">>)),
?NODE("End User Session", ?NS_ADMINX(<<"end-user-session">>)),
?NODE("Get User Password", ?NS_ADMINX(<<"get-user-password">>)),
?NODE("Change User Password",?NS_ADMINX(<<"change-user-password">>)),
?NODE("Get User Last Login Time", ?NS_ADMINX(<<"get-user-lastlogin">>)),
?NODE("Get User Statistics", ?NS_ADMINX(<<"user-stats">>)),
?NODE("Get Number of Registered Users",?NS_ADMINX(<<"get-registered-users-num">>)),
?NODE("Get Number of Online Users",?NS_ADMINX(<<"get-online-users-num">>))
]};
get_local_items(_Host, ["http:" | _], _Server, _Lang) ->
@ -518,8 +517,8 @@ get_local_items(Host, ["all users", [$@ | Diap]], _Server, _Lang) ->
Sub = lists:sublist(SUsers, N1, N2 - N1 + 1),
lists:map(fun({S, U}) ->
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
[#xmlattr{name = 'jid', value = exmpp_jid:jid_to_list(U, S)},
#xmlattr{name = 'name', value = exmpp_jid:jid_to_list(U, S)}]}
[#xmlattr{name = 'jid', value = exmpp_jid:jid_to_binary(U, S)},
#xmlattr{name = 'name', value = exmpp_jid:jid_to_binary(U, S)}]}
end, Sub)
end of
{'EXIT', _Reason} ->
@ -542,43 +541,47 @@ get_local_items(_Host, ["stopped nodes"], _Server, Lang) ->
{result, get_stopped_nodes(Lang)};
get_local_items(_Host, ["running nodes", ENode], Server, Lang) ->
ENodeB = list_to_binary(ENode),
{result,
[?NODE("Database", "running nodes/" ++ ENode ++ "/DB"),
?NODE("Modules", "running nodes/" ++ ENode ++ "/modules"),
?NODE("Backup Management", "running nodes/" ++ ENode ++ "/backup"),
[?NODE("Database", <<"running nodes/", ENodeB/binary, "/DB">>),
?NODE("Modules", <<"running nodes/", ENodeB/binary, "/modules">>),
?NODE("Backup Management", <<"running nodes/", ENodeB/binary, "/backup">>),
?NODE("Import Users From jabberd 1.4 Spool Files",
"running nodes/" ++ ENode ++ "/import"),
?NODE("Restart Service", "running nodes/" ++ ENode ++ "/restart"),
?NODE("Shut Down Service", "running nodes/" ++ ENode ++ "/shutdown")
<<"running nodes/", ENodeB/binary, "/import">>),
?NODE("Restart Service", <<"running nodes/", ENodeB/binary, "/restart">>),
?NODE("Shut Down Service", <<"running nodes/", ENodeB/binary, "/shutdown">>)
]};
get_local_items(_Host, ["running nodes", _ENode, "DB"], _Server, _Lang) ->
{result, []};
get_local_items(_Host, ["running nodes", ENode, "modules"], Server, Lang) ->
ENodeB = list_to_binary(ENode),
{result,
[?NODE("Start Modules", "running nodes/" ++ ENode ++ "/modules/start"),
?NODE("Stop Modules", "running nodes/" ++ ENode ++ "/modules/stop")
[?NODE("Start Modules", <<"running nodes/", ENodeB/binary, "/modules/start">>),
?NODE("Stop Modules", <<"running nodes/", ENodeB/binary, "/modules/stop">>)
]};
get_local_items(_Host, ["running nodes", _ENode, "modules", _], _Server, _Lang) ->
{result, []};
get_local_items(_Host, ["running nodes", ENode, "backup"], Server, Lang) ->
ENodeB = list_to_binary(ENode),
{result,
[?NODE("Backup", "running nodes/" ++ ENode ++ "/backup/backup"),
?NODE("Restore", "running nodes/" ++ ENode ++ "/backup/restore"),
[?NODE("Backup", <<"running nodes/", ENodeB/binary, "/backup/backup">>),
?NODE("Restore", <<"running nodes/", ENodeB/binary, "/backup/restore">>),
?NODE("Dump to Text File",
"running nodes/" ++ ENode ++ "/backup/textfile")
<<"running nodes/", ENodeB/binary, "/backup/textfile">>)
]};
get_local_items(_Host, ["running nodes", _ENode, "backup", _], _Server, _Lang) ->
{result, []};
get_local_items(_Host, ["running nodes", ENode, "import"], Server, Lang) ->
ENodeB = list_to_binary(ENode),
{result,
[?NODE("Import File", "running nodes/" ++ ENode ++ "/import/file"),
?NODE("Import Directory", "running nodes/" ++ ENode ++ "/import/dir")
[?NODE("Import File", <<"running nodes/", ENodeB/binary, "/import/file">>),
?NODE("Import Directory", <<"running nodes/", ENodeB/binary, "/import/dir">>)
]};
get_local_items(_Host, ["running nodes", _ENode, "import", _], _Server, _Lang) ->
@ -602,8 +605,8 @@ get_online_vh_users(Host) ->
SURs = lists:sort([{S, U, R} || {U, S, R} <- USRs]),
lists:map(fun({S, U, R}) ->
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
[#xmlattr{name = 'jid', value = exmpp_jid:jid_to_list(U, S, R)},
#xmlattr{name = 'name', value = exmpp_jid:jid_to_list(U, S)}]}
[#xmlattr{name = 'jid', value = exmpp_jid:jid_binary(U, S, R)},
#xmlattr{name = 'name', value = exmpp_jid:jid_to_binary(U, S)}]}
end, SURs)
end.
@ -617,8 +620,8 @@ get_all_vh_users(Host) ->
N when N =< 100 ->
lists:map(fun({S, U}) ->
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
[#xmlattr{name = 'jid', value = exmpp_jid:jid_to_list(U, S)},
#xmlattr{name = 'name', value = exmpp_jid:jid_to_list(U, S)}]}
[#xmlattr{name = 'jid', value = exmpp_jid:jid_to_binary(U, S)},
#xmlattr{name = 'name', value = exmpp_jid:jid_to_binary(U, S)}]}
end, SUsers);
N ->
NParts = trunc(math:sqrt(N * 0.618)) + 1,
@ -626,20 +629,19 @@ get_all_vh_users(Host) ->
lists:map(fun(K) ->
L = K + M - 1,
Node =
"@" ++ integer_to_list(K) ++
"-" ++ integer_to_list(L),
<<"@", (list_to_binary(integer_to_list(K)))/binary,
"-", (list_to_binary(integer_to_list(L)))/binary>>,
{FS, FU} = lists:nth(K, SUsers),
{LS, LU} =
if L < N -> lists:nth(L, SUsers);
true -> lists:last(SUsers)
end,
Name =
FU ++ "@" ++ FS ++
" -- " ++
LU ++ "@" ++ LS,
<<(list_to_binary(FU))/binary, "@", (list_to_binary(FS))/binary,
" -- ", (list_to_binary(LU))/binary, "@", (list_to_binary(LS))/binary>>,
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
[#xmlattr{name = 'jid', value = Host},
#xmlattr{name = 'node', value = "all users/" ++ Node},
[#xmlattr{name = 'jid', value = list_to_binary(Host)},
#xmlattr{name = 'node', value = <<"all users/", Node/binary>>},
#xmlattr{name = 'name', value = Name}]}
end, lists:seq(1, N, M))
end
@ -656,10 +658,10 @@ get_outgoing_s2s(Host, Lang) ->
lists:map(
fun(T) ->
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
[#xmlattr{name = 'jid', value = Host},
#xmlattr{name = 'node', value = "outgoing s2s/" ++ T},
[#xmlattr{name = 'jid', value = list_to_binary(Host)},
#xmlattr{name = 'node', value = <<"outgoing s2s/", (list_to_binary(T))/binary>>},
#xmlattr{name = 'name', value =
lists:flatten(
list_to_binary(
io_lib:format(
?T(Lang, "To ~s"), [T]))}]}
end, lists:usort(TConns))
@ -673,10 +675,10 @@ get_outgoing_s2s(Host, Lang, To) ->
lists:map(
fun({F, _T}) ->
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
[#xmlattr{name = 'jid', value = Host},
#xmlattr{name = 'node', value = "outgoing s2s/" ++ To ++ "/" ++ F},
[#xmlattr{name = 'jid', value = list_to_binary(Host)},
#xmlattr{name = 'node', value = <<"outgoing s2s/", (list_to_binary(To))/binary, "/", (list_to_binary(F))/binary>>},
#xmlattr{name = 'name', value =
lists:flatten(
list_to_binary(
io_lib:format(
?T(Lang, "From ~s"), [F]))}]}
end, lists:keysort(1, lists:filter(fun(E) ->
@ -692,10 +694,10 @@ get_running_nodes(Server, _Lang) ->
DBNodes ->
lists:map(
fun(N) ->
S = atom_to_list(N),
S = list_to_binary(atom_to_list(N)),
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
[#xmlattr{name = 'jid', value = Server},
#xmlattr{name = 'node', value = "running nodes/" ++ S},
[#xmlattr{name = 'jid', value = list_to_binary(Server)},
#xmlattr{name = 'node', value = <<"running nodes/", (list_to_binary(S))/binary>>},
#xmlattr{name = 'name', value = S}]}
end, lists:sort(DBNodes))
end.
@ -709,10 +711,10 @@ get_stopped_nodes(_Lang) ->
DBNodes ->
lists:map(
fun(N) ->
S = atom_to_list(N),
S = list_to_binary(atom_to_list(N)),
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
[#xmlattr{name = 'jid', value = ?MYNAME},
#xmlattr{name = 'node', value = "stopped nodes/" ++ S},
[#xmlattr{name = 'jid', value = list_to_binary(?MYNAME)},
#xmlattr{name = 'node', value = <<"stopped nodes/", S/binary>>},
#xmlattr{name = 'name', value = S}]}
end, lists:sort(DBNodes))
end.
@ -815,8 +817,8 @@ adhoc_local_commands(From, To,
-define(TVFIELD(Type, Var, Val),
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'type', value = Type},
#xmlattr{name = 'var', value = Var}],
children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(Val)}]}]}).
-define(HFIELD(), ?TVFIELD("hidden", "FORM_TYPE", ?NS_ADMIN_s)).
children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = Val}]}]}).
-define(HFIELD(), ?TVFIELD(<<"hidden">>, <<"FORM_TYPE">>, list_to_binary(?NS_ADMIN_s))).
-define(TLFIELD(Type, Label, Var),
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'type', value = Type},
@ -827,7 +829,7 @@ adhoc_local_commands(From, To,
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'type', value = Type},
#xmlattr{name = 'label', value = ?T(Lang, Label)},
#xmlattr{name = 'var', value = Var}],
children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(Val)}]}]}).
children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = Val}]}]}).
-define(XMFIELD(Type, Label, Var, Vals),
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'type', value = Type},
@ -836,9 +838,9 @@ adhoc_local_commands(From, To,
children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(Val)}]} || Val <- Vals]}).
-define(TABLEFIELD(Table, Val),
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'type', value = "list-single"},
#xmlattr{name = 'label', value = atom_to_list(Table)},
#xmlattr{name = 'var', value = atom_to_list(Table)}],
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'type', value = <<"list-single">>},
#xmlattr{name = 'label', value = list_to_binary(atom_to_list(Table))},
#xmlattr{name = 'var', value = list_to_binary(atom_to_list(Table))}],
children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(atom_to_list(Val))}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'option', attrs = [#xmlattr{name = 'label', value =
?T(Lang, "RAM copy")}],
@ -917,7 +919,7 @@ get_form(Host, ["running nodes", ENode, "modules", "stop"], Lang) ->
Lang, "Choose modules to stop"))}]} |
lists:map(fun(M) ->
S = atom_to_list(M),
?XFIELD("boolean", S, S, "0")
?XFIELD(<<"boolean">>, S, list_to_binary(S), <<"0">>)
end, SModules)
]}]}
end
@ -934,21 +936,22 @@ get_form(_Host, ["running nodes", ENode, "modules", "start"], Lang) ->
[#xmlcdata{cdata =
list_to_binary(?T(
Lang, "Enter list of {Module, [Options]}"))}]},
?XFIELD("text-multi", "List of modules to start", "modules", "[].")
?XFIELD(<<"text-multi">>, "List of modules to start", <<"modules">>, <<"[].">>)
]}]};
get_form(_Host, ["running nodes", ENode, "backup", "backup"], Lang) ->
{result, [#xmlel{ns = ?NS_DATA_FORMS, name = 'x', children =
[?HFIELD(),
[
?HFIELD(),
#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
[#xmlcdata{cdata =
list_to_binary(?T(
Lang, "Backup to File at ") ++ ENode)}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'instructions', children =
#xmlel{ns = ?NS_DATA_FORMS, name = 'instructions', children =
[#xmlcdata{cdata =
list_to_binary(?T(
Lang, "Enter path to backup file"))}]},
?XFIELD("text-single", "Path to File", "path", "")
Lang, "Enter path to backup file"))}]},
?XFIELD(<<"text-single">>, "Path to File", <<"path">>, <<"">>)
]}]};
get_form(_Host, ["running nodes", ENode, "backup", "restore"], Lang) ->
@ -962,7 +965,7 @@ get_form(_Host, ["running nodes", ENode, "backup", "restore"], Lang) ->
[#xmlcdata{cdata =
list_to_binary(?T(
Lang, "Enter path to backup file"))}]},
?XFIELD("text-single", "Path to File", "path", "")
?XFIELD(<<"text-single">>, "Path to File", <<"path">>, <<"">>)
]}]};
get_form(_Host, ["running nodes", ENode, "backup", "textfile"], Lang) ->
@ -976,7 +979,7 @@ get_form(_Host, ["running nodes", ENode, "backup", "textfile"], Lang) ->
[#xmlcdata{cdata =
list_to_binary(?T(
Lang, "Enter path to text file"))}]},
?XFIELD("text-single", "Path to File", "path", "")
?XFIELD(<<"text-single">>, "Path to File", <<"path">>, <<"">>)
]}]};
get_form(_Host, ["running nodes", ENode, "import", "file"], Lang) ->
@ -990,7 +993,7 @@ get_form(_Host, ["running nodes", ENode, "import", "file"], Lang) ->
[#xmlcdata{cdata =
list_to_binary(?T(
Lang, "Enter path to jabberd1.4 spool file"))}]},
?XFIELD("text-single", "Path to File", "path", "")
?XFIELD(<<"text-single">>, "Path to File", <<"path">>, <<"">>)
]}]};
get_form(_Host, ["running nodes", ENode, "import", "dir"], Lang) ->
@ -1004,14 +1007,14 @@ get_form(_Host, ["running nodes", ENode, "import", "dir"], Lang) ->
[#xmlcdata{cdata =
list_to_binary(?T(
Lang, "Enter path to jabberd1.4 spool dir"))}]},
?XFIELD("text-single", "Path to Dir", "path", "")
?XFIELD(<<"text-single">>, "Path to Dir", <<"path">>, <<"">>)
]}]};
get_form(_Host, ["running nodes", _ENode, "restart"], Lang) ->
Make_option =
fun(LabelNum, LabelUnit, Value)->
#xmlel{ns = ?NS_DATA_FORMS, name = 'option', attrs =
[#xmlattr{name = 'label', value = LabelNum ++ ?T(Lang, LabelUnit)}], children =
[#xmlattr{name = 'label', value = <<(list_to_binary(LabelNum))/binary, (?T(Lang, LabelUnit))/binary>>}], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(Value)}]}]}
end,
{result, [#xmlel{ns = ?NS_DATA_FORMS, name = 'x', children =
@ -1019,9 +1022,9 @@ get_form(_Host, ["running nodes", _ENode, "restart"], Lang) ->
#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
[#xmlcdata{cdata = list_to_binary(?T(Lang, "Restart Service"))}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[#xmlattr{name = 'type', value = "list-single"},
[#xmlattr{name = 'type', value = <<"list-single">>},
#xmlattr{name = 'label', value = ?T(Lang, "Time delay")},
#xmlattr{name = 'var', value = "delay"}], children =
#xmlattr{name = 'var', value = <<"delay">>}], children =
[Make_option("", "immediately", "1"),
Make_option("15 ", "seconds", "15"),
Make_option("30 ", "seconds", "30"),
@ -1037,15 +1040,15 @@ get_form(_Host, ["running nodes", _ENode, "restart"], Lang) ->
#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}
]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[#xmlattr{name = 'type', value = "fixed"},
[#xmlattr{name = 'type', value = <<"fixed">>},
#xmlattr{name = 'label', value = ?T(Lang, "Send announcement to all online users on all hosts")}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[#xmlattr{name = 'var', value = "subject"},
#xmlattr{name = 'type', value = "text-single"},
[#xmlattr{name = 'var', value = <<"subject">>},
#xmlattr{name = 'type', value = <<"text-single">>},
#xmlattr{name = 'label', value = ?T(Lang, "Subject")}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[#xmlattr{name = 'var', value = "announcement"},
#xmlattr{name = 'type', value = "text-multi"},
[#xmlattr{name = 'var', value = <<"announcement">>},
#xmlattr{name = 'type', value = <<"text-multi">>},
#xmlattr{name = 'label', value = ?T(Lang, "Message body")}]}
]}]};
@ -1053,7 +1056,7 @@ get_form(_Host, ["running nodes", _ENode, "shutdown"], Lang) ->
Make_option =
fun(LabelNum, LabelUnit, Value)->
#xmlel{ns = ?NS_DATA_FORMS, name = 'option', attrs =
[#xmlattr{name = 'label', value = LabelNum ++ ?T(Lang, LabelUnit)}], children =
[#xmlattr{name = 'label', value = <<(list_to_binary(LabelNum))/binary, (?T(Lang, LabelUnit))/binary>>}], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(Value)}]}]}
end,
{result, [#xmlel{ns = ?NS_DATA_FORMS, name = 'x', children =
@ -1061,9 +1064,9 @@ get_form(_Host, ["running nodes", _ENode, "shutdown"], Lang) ->
#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
[#xmlcdata{cdata = list_to_binary(?T(Lang, "Shut Down Service"))}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[#xmlattr{name = 'type', value = "list-single"},
[#xmlattr{name = 'type', value = <<"list-single">>},
#xmlattr{name = 'label', value = ?T(Lang, "Time delay")},
#xmlattr{name = 'var', value = "delay"}], children =
#xmlattr{name = 'var', value = <<"delay">>}], children =
[Make_option("", "immediately", "1"),
Make_option("15 ", "seconds", "15"),
Make_option("30 ", "seconds", "30"),
@ -1079,15 +1082,15 @@ get_form(_Host, ["running nodes", _ENode, "shutdown"], Lang) ->
#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}
]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[#xmlattr{name = 'type', value = "fixed"},
[#xmlattr{name = 'type', value = <<"fixed">>},
#xmlattr{name = 'label', value = ?T(Lang, "Send announcement to all online users on all hosts")}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[#xmlattr{name = 'var', value = "subject"},
#xmlattr{name = 'type', value = "text-single"},
[#xmlattr{name = 'var', value = <<"subject">>},
#xmlattr{name = 'type', value = <<"text-single">>},
#xmlattr{name = 'label', value = ?T(Lang, "Subject")}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[#xmlattr{name = 'var', value = "announcement"},
#xmlattr{name = 'type', value = "text-multi"},
[#xmlattr{name = 'var', value = <<"announcement">>},
#xmlattr{name = 'type', value = <<"text-multi">>},
#xmlattr{name = 'label', value = ?T(Lang, "Message body")}]}
]}]};
@ -1098,11 +1101,11 @@ get_form(Host, ["config", "acls"], Lang) ->
[#xmlcdata{cdata =
list_to_binary(?T(
Lang, "Access Control List Configuration"))}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'type', value = "text-multi"},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'type', value = <<"text-multi">>},
#xmlattr{name = 'label', value =
?T(
Lang, "Access control lists")},
#xmlattr{name = 'var', value = "acls"}],
#xmlattr{name = 'var', value = <<"acls">>}],
children = lists:map(fun(S) ->
#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(S)}]}
end,
@ -1126,11 +1129,11 @@ get_form(Host, ["config", "access"], Lang) ->
[#xmlcdata{cdata =
list_to_binary(?T(
Lang, "Access Configuration"))}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =[#xmlattr{name = 'type', value = "text-multi"},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =[#xmlattr{name = 'type', value = <<"text-multi">>},
#xmlattr{name = 'label', value =
?T(
Lang, "Access rules")},
#xmlattr{name = 'var', value = "access"}],
#xmlattr{name = 'var', value = <<"access">>}],
children = lists:map(fun(S) ->
#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children =[#xmlcdata{cdata = list_to_binary(S)}]}
end,
@ -1153,19 +1156,19 @@ get_form(_Host, ?NS_ADMINL("add-user"), Lang) ->
#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
[#xmlcdata{cdata = list_to_binary(?T(Lang, "Add User"))}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[#xmlattr{name = 'type', value = "jid-single"},
[#xmlattr{name = 'type', value = <<"jid-single">>},
#xmlattr{name = 'label', value = ?T(Lang, "Jabber ID")},
#xmlattr{name = 'var', value = "accountjid"}], children =
#xmlattr{name = 'var', value = <<"accountjid">>}], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[#xmlattr{name = 'type', value = "text-private"},
[#xmlattr{name = 'type', value = <<"text-private">>},
#xmlattr{name = 'label', value = ?T(Lang, "Password")},
#xmlattr{name = 'var', value = "password"}], children =
#xmlattr{name = 'var', value = <<"password">>}], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[#xmlattr{name = 'type', value = "text-private"},
[#xmlattr{name = 'type', value = <<"text-private">>},
#xmlattr{name = 'label', value = ?T(Lang, "Password Verification")},
#xmlattr{name = 'var', value = "password-verify"}], children =
#xmlattr{name = 'var', value = <<"password-verify">>}], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]}
]}]};
@ -1175,9 +1178,9 @@ get_form(_Host, ?NS_ADMINL("delete-user"), Lang) ->
#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
[#xmlcdata{cdata = list_to_binary(?T(Lang, "Delete User"))}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[#xmlattr{name = 'type', value = "jid-multi"},
[#xmlattr{name = 'type', value = <<"jid-multi">>},
#xmlattr{name = 'label', value = ?T(Lang, "Jabber ID")},
#xmlattr{name = 'var', value = "accountjids"}], children =
#xmlattr{name = 'var', value = <<"accountjids">>}], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]}
]}]};
@ -1187,9 +1190,9 @@ get_form(_Host, ?NS_ADMINL("end-user-session"), Lang) ->
#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
[#xmlcdata{cdata = list_to_binary(?T(Lang, "End User Session"))}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[#xmlattr{name = 'type', value = "jid-single"},
[#xmlattr{name = 'type', value = <<"jid-single">>},
#xmlattr{name = 'label', value = list_to_binary(?T(Lang, "Jabber ID"))},
#xmlattr{name = 'var', value = "accountjid"}], children =
#xmlattr{name = 'var', value = <<"accountjid">>}], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]}
]}]};
@ -1199,9 +1202,9 @@ get_form(_Host, ?NS_ADMINL("get-user-password"), Lang) ->
#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
[#xmlcdata{cdata = list_to_binary(?T(Lang, "Get User Password"))}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[#xmlattr{name = 'type', value = "jid-single"},
[#xmlattr{name = 'type', value = <<"jid-single">>},
#xmlattr{name = 'label', value = ?T(Lang, "Jabber ID")},
#xmlattr{name = 'var', value = "accountjid"}], children =
#xmlattr{name = 'var', value = <<"accountjid">>}], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]}
]}]};
@ -1211,14 +1214,14 @@ get_form(_Host, ?NS_ADMINL("change-user-password"), Lang) ->
#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
[#xmlcdata{cdata = list_to_binary(?T(Lang, "Get User Password"))}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[#xmlattr{name = 'type', value = "jid-single"},
[#xmlattr{name = 'type', value = <<"jid-single">>},
#xmlattr{name = 'label', value = ?T(Lang, "Jabber ID")},
#xmlattr{name = 'var', value = "accountjid"}], children =
#xmlattr{name = 'var', value = <<"accountjid">>}], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[#xmlattr{name = 'type', value = "text-private"},
[#xmlattr{name = 'type', value = <<"text-private">>},
#xmlattr{name = 'label', value = ?T(Lang, "Password")},
#xmlattr{name = 'var', value = "password"}], children =
#xmlattr{name = 'var', value = <<"password">>}], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]}
]}]};
@ -1228,9 +1231,9 @@ get_form(_Host, ?NS_ADMINL("get-user-lastlogin"), Lang) ->
#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
[#xmlcdata{cdata = list_to_binary(?T(Lang, "Get User Last Login Time"))}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[#xmlattr{name = 'type', value = "jid-single"},
[#xmlattr{name = 'type', value = <<"jid-single">>},
#xmlattr{name = 'label', value = ?T(Lang, "Jabber ID")},
#xmlattr{name = 'var', value = "accountjid"}], children =
#xmlattr{name = 'var', value = <<"accountjid">>}], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]}
]}]};
@ -1240,9 +1243,9 @@ get_form(_Host, ?NS_ADMINL("user-stats"), Lang) ->
#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
[#xmlcdata{cdata = list_to_binary(?T(Lang, "Get User Statistics"))}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[#xmlattr{name = 'type', value = "jid-single"},
[#xmlattr{name = 'type', value = <<"jid-single">>},
#xmlattr{name = 'label', value = ?T(Lang, "Jabber ID")},
#xmlattr{name = 'var', value = "accountjid"}], children =
#xmlattr{name = 'var', value = <<"accountjid">>}], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]}
]}]};
@ -1252,9 +1255,9 @@ get_form(Host, ?NS_ADMINL("get-registered-users-num"), Lang) ->
[#xmlel{ns = ?NS_DATA_FORMS, name = 'x', children =
[?HFIELD(),
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[#xmlattr{name = 'type', value = "text-single"},
[#xmlattr{name = 'type', value = <<"text-single">>},
#xmlattr{name = 'label', value = ?T(Lang, "Number of registered users")},
#xmlattr{name = 'var', value = "registeredusersnum"}], children =
#xmlattr{name = 'var', value = <<"registeredusersnum">>}], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(Num)}]}]
}]}]};
@ -1264,9 +1267,9 @@ get_form(Host, ?NS_ADMINL("get-online-users-num"), Lang) ->
[#xmlel{ns = ?NS_DATA_FORMS, name = 'x', children =
[?HFIELD(),
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[#xmlattr{name = 'type', value = "text-single"},
[#xmlattr{name = 'type', value = <<"text-single">>},
#xmlattr{name = 'label', value = ?T(Lang, "Number of online users")},
#xmlattr{name = 'var', value = "onlineusersnum"}], children =
#xmlattr{name = 'var', value = <<"onlineusersnum">>}], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(Num)}]}]
}]}]};
@ -1595,8 +1598,8 @@ set_form(_From, _Host, ?NS_ADMINL("get-user-password"), Lang, XData) ->
true = is_list(Password),
{result, [#xmlel{ns = ?NS_DATA_FORMS, name = 'x', children =
[?HFIELD(),
?XFIELD("jid-single", "Jabber ID", "accountjid", AccountString),
?XFIELD("text-single", "Password", "password", Password)
?XFIELD(<<"jid-single">>, "Jabber ID", <<"accountjid">>, list_to_binary(AccountString)),
?XFIELD(<<"text-single">>, "Password", <<"password">>, list_to_binary(Password))
]}]};
set_form(_From, _Host, ?NS_ADMINL("change-user-password"), _Lang, XData) ->
@ -1640,10 +1643,10 @@ set_form(_From, _Host, ?NS_ADMINL("get-user-lastlogin"), Lang, XData) ->
_ ->
?T(Lang, "Online")
end,
{result, [#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs = [#xmlattr{name = 'type', value = "result"}], children =
{result, [#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs = [#xmlattr{name = 'type', value = <<"result">>}], children =
[?HFIELD(),
?XFIELD("jid-single", "Jabber ID", "accountjid", AccountString),
?XFIELD("text-single", "Last login", "lastlogin", FLast)
?XFIELD(<<"jid-single">>, "Jabber ID", <<"accountjid">>, list_to_binary(AccountString)),
?XFIELD(<<"text-single">>, "Last login", <<"lastlogin">>, list_to_binary(FLast))
]}]};
set_form(_From, _Host, ?NS_ADMINL("user-stats"), Lang, XData) ->
@ -1666,10 +1669,10 @@ set_form(_From, _Host, ?NS_ADMINL("user-stats"), Lang, XData) ->
{result, [#xmlel{ns = ?NS_DATA_FORMS, name = 'x', children =
[?HFIELD(),
?XFIELD("jid-single", "Jabber ID", "accountjid", AccountString),
?XFIELD("text-single", "Roster size", "rostersize", Rostersize),
?XMFIELD("text-multi", "IP addresses", "ipaddresses", IPs),
?XMFIELD("text-multi", "Resources", "onlineresources", Resources)
?XFIELD(<<"jid-single">>, "Jabber ID", <<"accountjid">>, AccountString),
?XFIELD(<<"text-single">>, "Roster size", <<"rostersize">>, Rostersize),
?XMFIELD(<<"text-multi">>, "IP addresses", <<"ipaddresses">>, IPs),
?XMFIELD(<<"text-multi">>, "Resources", <<"onlineresources">>, Resources)
]}]};
set_form(_From, _Host, _, _Lang, _XData) ->
@ -1699,25 +1702,25 @@ stop_node(From, Host, ENode, Action, XData) ->
Delay = list_to_integer(get_value("delay", XData)),
Subject = case get_value("subject", XData) of
[] -> [];
S -> [#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'var', value = "subject"}], children =
S -> [#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'var', value = <<"subject">>}], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(S)}]}]}]
end,
Announcement = case get_values("announcement", XData) of
[] -> [];
As -> [#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'var', value = "body"}], children =
As -> [#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'var', value = <<"body">>}], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(Line)}]} || Line <- As] }]
end,
case Subject ++ Announcement of
[] -> ok;
SubEls ->
Request = #adhoc_request{
node = ?NS_ADMINX("announce-allhosts"),
node = binary_to_list(?NS_ADMINX(<<"announce-allhosts">>)),
action = "complete",
xdata = #xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs =
[#xmlattr{name = 'type', value = "submit"}], children =
[#xmlattr{name = 'type', value = <<"submit">>}], children =
SubEls},
others= [#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs =
[#xmlattr{name = 'type', value = "submit"}], children =
[#xmlattr{name = 'type', value = <<"submit">>}], children =
SubEls}]
},
To = exmpp_jid:make_jid(Host),
@ -1799,9 +1802,9 @@ get_sm_form(User, Server, "config", Lang) ->
list_to_binary(?T(
Lang, "Administration of ") ++ User)}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[#xmlattr{name = 'type', value = "list-single"},
[#xmlattr{name = 'type', value = <<"list-single">>},
#xmlattr{name = 'label', value = ?T(Lang, "Action on user")},
#xmlattr{name = 'var', value = "action"}], children =
#xmlattr{name = 'var', value = <<"action">>}], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = <<"edit">>}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'option', attrs =
[#xmlattr{name = 'label', value = ?T(Lang, "Edit Properties")}], children =
@ -1810,8 +1813,8 @@ get_sm_form(User, Server, "config", Lang) ->
[#xmlattr{name = 'label', value = ?T(Lang, "Remove User")}], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = <<"remove">>}]}]}
]},
?XFIELD("text-private", "Password", "password",
ejabberd_auth:get_password_s(User, Server))
?XFIELD(<<"text-private">>, "Password", <<"password">>,
list_to_binary(ejabberd_auth:get_password_s(User, Server)))
]}]};
get_sm_form(_User, _Server, _Node, _Lang) ->

View File

@ -125,18 +125,18 @@ process_get(#xmlel{ns = ?NS_ECONFIGURE, name = 'info'}) ->
S2SConns = ejabberd_s2s:dirty_get_connections(),
TConns = lists:usort([element(2, C) || C <- S2SConns]),
Attrs = [#xmlattr{name = 'registered-users', value =
integer_to_list(mnesia:table_info(passwd, size))},
list_to_binary(integer_to_list(mnesia:table_info(passwd, size)))},
#xmlattr{name = 'online-users', value =
integer_to_list(mnesia:table_info(presence, size))},
list_to_binary(integer_to_list(mnesia:table_info(presence, size)))},
#xmlattr{name = 'running-nodes', value =
integer_to_list(length(mnesia:system_info(running_db_nodes)))},
list_to_binary(integer_to_list(length(mnesia:system_info(running_db_nodes))))},
#xmlattr{name = 'stopped-nodes', value =
integer_to_list(
list_to_binary(integer_to_list(
length(lists:usort(mnesia:system_info(db_nodes) ++
mnesia:system_info(extra_db_nodes)) --
mnesia:system_info(running_db_nodes)))},
mnesia:system_info(running_db_nodes))))},
#xmlattr{name = 'outgoing-s2s-servers', value =
integer_to_list(length(TConns))}],
list_to_binary(integer_to_list(length(TConns)))}],
{result, #xmlel{ns = ?NS_ECONFIGURE, name = 'info', attrs = Attrs}};
process_get(#xmlel{ns = ?NS_ECONFIGURE, name = 'welcome-message', attrs = Attrs}) ->
{Subj, Body} = case ejabberd_config:get_local_option(welcome_message) of

View File

@ -130,7 +130,7 @@ unregister_extra_domain(Host, Domain) ->
process_local_iq_items(From, To, #iq{type = get, payload = SubEl,
lang = Lang} = IQ_Rec) ->
Node = exmpp_xml:get_attribute(SubEl, 'node', ""),
Node = exmpp_xml:get_attribute_as_binary(SubEl, 'node', <<>>),
case ejabberd_hooks:run_fold(disco_local_items,
exmpp_jid:ldomain(To),
@ -138,7 +138,7 @@ process_local_iq_items(From, To, #iq{type = get, payload = SubEl,
[From, To, Node, Lang]) of
{result, Items} ->
ANode = case Node of
"" -> [];
<<>> -> [];
_ -> [#xmlattr{name = 'node', value = Node}]
end,
Result = #xmlel{ns = ?NS_DISCO_ITEMS, name = 'query',
@ -153,7 +153,7 @@ process_local_iq_items(_From, _To, #iq{type = set} = IQ_Rec) ->
process_local_iq_info(From, To, #iq{type = get, payload = SubEl,
lang = Lang} = IQ_Rec) ->
Node = exmpp_xml:get_attribute(SubEl, 'node', ""),
Node = exmpp_xml:get_attribute_as_binary(SubEl, 'node', <<>>),
Identity = ejabberd_hooks:run_fold(disco_local_identity,
exmpp_jid:ldomain(To),
[],
@ -164,7 +164,7 @@ process_local_iq_info(From, To, #iq{type = get, payload = SubEl,
[From, To, Node, Lang]) of
{result, Features} ->
ANode = case Node of
"" -> [];
<<>> -> [];
_ -> [#xmlattr{name = 'node', value = Node}]
end,
Result = #xmlel{ns = ?NS_DISCO_INFO, name = 'query',
@ -178,11 +178,11 @@ process_local_iq_info(From, To, #iq{type = get, payload = SubEl,
process_local_iq_info(_From, _To, #iq{type = set} = IQ_Rec) ->
exmpp_iq:error(IQ_Rec, 'not-allowed').
get_local_identity(Acc, _From, _To, [], _Lang) ->
get_local_identity(Acc, _From, _To, <<>>, _Lang) ->
Acc ++ [#xmlel{ns = ?NS_DISCO_INFO, name = 'identity', attrs = [
#xmlattr{name = 'category', value = "server"},
#xmlattr{name = 'type', value = "im"},
#xmlattr{name = 'name', value = "ejabberd"}
#xmlattr{name = 'category', value = <<"server">>},
#xmlattr{name = 'type', value = <<"im">>},
#xmlattr{name = 'name', value = <<"ejabberd">>}
]}];
get_local_identity(Acc, _From, _To, _Node, _Lang) ->
@ -191,7 +191,7 @@ get_local_identity(Acc, _From, _To, _Node, _Lang) ->
get_local_features({error, _Error} = Acc, _From, _To, _Node, _Lang) ->
Acc;
get_local_features(Acc, _From, To, [], _Lang) ->
get_local_features(Acc, _From, To, <<>>, _Lang) ->
Feats = case Acc of
{result, Features} -> Features;
empty -> []
@ -211,28 +211,30 @@ get_local_features(Acc, _From, _To, _Node, _Lang) ->
feature_to_xml({{Feature, _Host}}) ->
feature_to_xml(Feature);
feature_to_xml(Feature) when is_list(Feature) ->
feature_to_xml(Feature) when is_binary(Feature) ->
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [
#xmlattr{name = 'var', value = Feature}
]};
feature_to_xml(Feature) when is_list(Feature) ->
feature_to_xml(list_to_binary(Feature));
feature_to_xml(Feature) when is_atom(Feature) ->
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [
#xmlattr{name = 'var', value = atom_to_list(Feature)}
]}.
feature_to_xml(atom_to_list(Feature)).
domain_to_xml({Domain}) ->
domain_to_xml(Domain);
domain_to_xml(Domain) when is_binary(Domain)->
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs = [
#xmlattr{name = 'jid', value = Domain}
]};
domain_to_xml(Domain) ->
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs = [
#xmlattr{name = 'jid', value = Domain}
]}.
domain_to_xml(Domain) when is_list(Domain) ->
domain_to_xml(list_to_binary(Domain)).
get_local_services({error, _Error} = Acc, _From, _To, _Node, _Lang) ->
Acc;
get_local_services(Acc, _From, To, [], _Lang) ->
get_local_services(Acc, _From, To, <<>>, _Lang) ->
Items = case Acc of
{result, Its} -> Its;
empty -> []
@ -270,14 +272,14 @@ get_vh_services(Host) ->
process_sm_iq_items(From, To, #iq{type = get, payload = SubEl,
lang = Lang} = IQ_Rec) ->
Node = exmpp_xml:get_attribute(SubEl, 'node', ""),
Node = exmpp_xml:get_attribute_as_binary(SubEl, 'node', <<>>),
case ejabberd_hooks:run_fold(disco_sm_items,
exmpp_jid:ldomain(To),
empty,
[From, To, Node, Lang]) of
{result, Items} ->
ANode = case Node of
"" -> [];
<<>> -> [];
_ -> [#xmlattr{name = 'node', value = Node}]
end,
Result = #xmlel{ns = ?NS_DISCO_ITEMS, name = 'query',
@ -311,7 +313,7 @@ process_sm_iq_items(From, To, #iq{type = set, payload = SubEl} = IQ_Rec) ->
get_sm_items({error, _Error} = Acc, _From, _To, _Node, _Lang) ->
Acc;
get_sm_items(Acc, From, To, [], _Lang) ->
get_sm_items(Acc, From, To, <<>>, _Lang) ->
LFrom = exmpp_jid:lnode_as_list(From),
LSFrom = exmpp_jid:ldomain_as_list(From),
LTo = exmpp_jid:lnode_as_list(To),
@ -344,7 +346,7 @@ get_sm_items(empty, From, To, _Node, _Lang) ->
process_sm_iq_info(From, To, #iq{type = get, payload = SubEl,
lang = Lang} = IQ_Rec) ->
Node = exmpp_xml:get_attribute(SubEl, 'node', ""),
Node = exmpp_xml:get_attribute_as_binary(SubEl, 'node', <<>>),
Identity = ejabberd_hooks:run_fold(disco_sm_identity,
exmpp_jid:ldomain(To),
[],
@ -355,7 +357,7 @@ process_sm_iq_info(From, To, #iq{type = get, payload = SubEl,
[From, To, Node, Lang]) of
{result, Features} ->
ANode = case Node of
"" -> [];
<<>> -> [];
_ -> [#xmlattr{name = 'node', value = Node}]
end,
Result = #xmlel{ns = ?NS_DISCO_INFO, name = 'query',
@ -395,8 +397,8 @@ get_user_resources(JID) ->
lists:map(fun(R) ->
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs = [
#xmlattr{name = 'jid', value =
exmpp_jid:jid_to_list(exmpp_jid:bare_jid_to_jid(JID, R))},
#xmlattr{name = 'name', value = exmpp_jid:lnode_as_list(JID)}
exmpp_jid:jid_to_binary(exmpp_jid:bare_jid_to_jid(JID, R))},
#xmlattr{name = 'name', value = exmpp_jid:lnode(JID)}
]}
end, lists:sort(Rs)).
@ -408,7 +410,7 @@ get_publish_items(empty, From, To, Node, _Lang) ->
LSTo = exmpp_jid:ldomain_as_list(To),
if
(LFrom == LTo) and (LSFrom == LSTo) ->
retrieve_disco_publish({LTo, LSTo}, Node);
retrieve_disco_publish({LTo, LSTo}, binary_to_list(Node));
true ->
empty
end;
@ -486,18 +488,18 @@ retrieve_disco_publish(User, Node) ->
name = Name,
node = PNode}) ->
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
lists:append([[#xmlattr{name = 'jid', value = Jid}],
lists:append([[#xmlattr{name = 'jid', value = list_to_binary(Jid)}],
case Name of
"" ->
[];
_ ->
[#xmlattr{name = 'name', value = Name}]
[#xmlattr{name = 'name', value = list_to_binary(Name)}]
end,
case PNode of
"" ->
[];
_ ->
[#xmlattr{name = 'node', value = PNode}]
[#xmlattr{name = 'node', value = list_to_binary(PNode)}]
end])}
end, Items)}
end.

View File

@ -303,17 +303,17 @@ closed_connection(Host, From, Server) ->
iq_disco(Lang) ->
[#xmlel{ns = ?NS_DISCO_INFO, name = 'identity', attrs =
[#xmlattr{name = 'category', value = "conference"},
#xmlattr{name = 'type', value = "irc"},
#xmlattr{name = 'name', value = translate:translate(Lang, "IRC Transport")}]},
[#xmlattr{name = 'category', value = <<"conference">>},
#xmlattr{name = 'type', value = <<"irc">>},
#xmlattr{name = 'name', value = list_to_binary(translate:translate(Lang, "IRC Transport"))}]},
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs =
[#xmlattr{name = 'var', value = ?NS_DISCO_INFO_s}]},
[#xmlattr{name = 'var', value = list_to_binary(?NS_DISCO_INFO_s)}]},
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs =
[#xmlattr{name = 'var', value = ?NS_MUC_s}]},
[#xmlattr{name = 'var', value = list_to_binary(?NS_MUC_s)}]},
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs =
[#xmlattr{name = 'var', value = ?NS_INBAND_REGISTER_s}]},
[#xmlattr{name = 'var', value = list_to_binary(?NS_INBAND_REGISTER_s)}]},
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs =
[#xmlattr{name = 'var', value = ?NS_VCARD_s}]}].
[#xmlattr{name = 'var', value = list_to_binary(?NS_VCARD_s)}]}].
iq_get_vcard(Lang) ->
[#xmlel{ns = ?NS_VCARD, name = 'FN', children =
@ -439,13 +439,13 @@ get_form(Host, From, [], Lang, DefEnc) ->
Lang,
"Enter username and encodings you wish to use for "
"connecting to IRC servers"))}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'type', value = "text-single"},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'type', value = <<"text-single">>},
#xmlattr{name = 'label', value =
translate:translate(
Lang, "IRC Username")},
#xmlattr{name = 'var', value = "username"}], children =
list_to_binary(translate:translate(
Lang, "IRC Username"))},
#xmlattr{name = 'var', value = <<"username">>}], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(Username)}]}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'type', value = "fixed"}], children =
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'type', value = <<"fixed">>}], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children =
[#xmlcdata{cdata = list_to_binary(
lists:flatten(
@ -457,7 +457,7 @@ get_form(Host, From, [], Lang, DefEnc) ->
"in format '{\"irc server\", \"encoding\"}'. "
"By default this service use \"~s\" encoding."),
[DefEnc])))}]}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'type', value = "fixed"}], children =
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'type', value = <<"fixed">>}], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children =
[#xmlcdata{cdata = list_to_binary(
translate:translate(
@ -465,10 +465,10 @@ get_form(Host, From, [], Lang, DefEnc) ->
"Example: [{\"irc.lucky.net\", \"koi8-r\"}, "
"{\"vendetta.fef.net\", \"iso8859-1\"}]."
))}]}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'type', value = "text-multi"},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'type', value = <<"text-multi">>},
#xmlattr{name = 'label', value =
translate:translate(Lang, "Encodings")},
#xmlattr{name = 'var', value = "encodings"}], children =
list_to_binary(translate:translate(Lang, "Encodings"))},
#xmlattr{name = 'var', value = <<"encodings">>}], children =
lists:map(
fun(S) ->
#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(S)}]}

View File

@ -590,8 +590,8 @@ terminate(_Reason, _StateName, StateData) ->
lists:concat([Chan, "%", StateData#state.server]),
StateData#state.host, StateData#state.nick),
StateData#state.user,
#xmlel{ns = ?NS_JABBER_CLIENT, name = 'presence', attrs = [#xmlattr{name = 'type', value = "error"}], children =
[#xmlel{ns = ?NS_JABBER_CLIENT, name = 'error', attrs = [#xmlattr{name = 'code', value = "502"}], children =
#xmlel{ns = ?NS_JABBER_CLIENT, name = 'presence', attrs = [#xmlattr{name = 'type', value = <<"error">>}], children =
[#xmlel{ns = ?NS_JABBER_CLIENT, name = 'error', attrs = [#xmlattr{name = 'code', value = <<"502">>}], children =
[#xmlcdata{cdata = <<"Server Connect Failed">>}]}]})
end, dict:fetch_keys(StateData#state.channels)),
case StateData#state.socket of
@ -629,11 +629,11 @@ bounce_messages(Reason) ->
ok;
_ ->
Error = #xmlel{ns = ?NS_JABBER_CLIENT, name = 'error',
attrs = [#xmlattr{name = 'code', value = "502"}],
attrs = [#xmlattr{name = 'code', value = <<"502">>}],
children = [#xmlcdata{cdata = Reason}]},
Err = exmpp_stanza:reply_with_error(El, Error),
From = exmpp_jid:list_to_jid(exmpp_stanza:get_sender(El)),
To = exmpp_jid:list_to_jid(exmpp_stanza:get_recipient(El)),
From = exmpp_jid:binary_to_jid(exmpp_stanza:get_sender(El)),
To = exmpp_jid:binary_to_jid(exmpp_stanza:get_recipient(El)),
ejabberd_router:route(To, From, Err)
end,
bounce_messages(Reason)
@ -678,12 +678,12 @@ process_channel_list_user(StateData, Chan, User) ->
end,
{User2, Affiliation, Role} =
case User1 of
[$@ | U2] -> {U2, "admin", "moderator"};
[$+ | U2] -> {U2, "member", "participant"};
[$\% | U2] -> {U2, "admin", "moderator"};
[$& | U2] -> {U2, "admin", "moderator"};
[$~ | U2] -> {U2, "admin", "moderator"};
_ -> {User1, "member", "participant"}
[$@ | U2] -> {U2, <<"admin">>, <<"moderator">>};
[$+ | U2] -> {U2, <<"member">>, <<"participant">>};
[$\% | U2] -> {U2, <<"admin">>, <<"moderator">>};
[$& | U2] -> {U2, <<"admin">>, <<"moderator">>};
[$~ | U2] -> {U2, <<"admin">>, <<"moderator">>};
_ -> {User1, <<"member">>, <<"participant">>}
end,
ejabberd_router:route(
exmpp_jid:make_jid(lists:concat([Chan, "%", StateData#state.server]),
@ -893,11 +893,11 @@ process_part(StateData, Chan, From, String) ->
exmpp_jid:make_jid(lists:concat([Chan, "%", StateData#state.server]),
StateData#state.host, FromUser),
StateData#state.user,
#xmlel{ns = ?NS_JABBER_CLIENT, name = 'presence', attrs = [#xmlattr{name = 'type', value = "unavailable"}], children =
#xmlel{ns = ?NS_JABBER_CLIENT, name = 'presence', attrs = [#xmlattr{name = 'type', value = <<"unavailable">>}], children =
[#xmlel{ns = ?NS_MUC_USER, name = 'x', children =
[#xmlel{ns = ?NS_MUC_USER, name = 'item', attrs =
[#xmlattr{name = 'affiliation', value = "member"},
#xmlattr{name = 'role', value = "none"}]}]},
[#xmlattr{name = 'affiliation', value = <<"member">>},
#xmlattr{name = 'role', value = <<"none">>}]}]},
#xmlel{ns = ?NS_MUC_USER, name = 'status', children =
[#xmlcdata{cdata = list_to_binary(Msg1 ++ " (" ++ FromIdent ++ ")")}]}]
}),
@ -927,11 +927,11 @@ process_quit(StateData, From, String) ->
lists:concat([Chan, "%", StateData#state.server]),
StateData#state.host, FromUser),
StateData#state.user,
#xmlel{ns = ?NS_JABBER_CLIENT, name = 'presence', attrs = [#xmlattr{name = 'type', value = "unavailable"}], children =
#xmlel{ns = ?NS_JABBER_CLIENT, name = 'presence', attrs = [#xmlattr{name = 'type', value = <<"unavailable">>}], children =
[#xmlel{ns = ?NS_MUC_USER, name = 'x', children =
[#xmlel{ns = ?NS_MUC_USER, name = 'item', attrs =
[#xmlattr{name = 'affiliation', value = "member"},
#xmlattr{name = 'role', value = "none"}]}]},
[#xmlattr{name = 'affiliation', value = <<"member">>},
#xmlattr{name = 'role', value = <<"none">>}]}]},
#xmlel{ns = ?NS_MUC_USER, name = 'status', children =
[#xmlcdata{cdata = list_to_binary(Msg1 ++ " (" ++ FromIdent ++ ")")}]}
]}),
@ -953,8 +953,8 @@ process_join(StateData, Channel, From, _String) ->
#xmlel{ns = ?NS_JABBER_CLIENT, name = 'presence', children =
[#xmlel{ns = ?NS_MUC_USER, name = 'x', children =
[#xmlel{ns = ?NS_MUC_USER, name = 'item', attrs =
[#xmlattr{name = 'affiliation', value = "member"},
#xmlattr{name = 'role', value = "participant"}]}]},
[#xmlattr{name = 'affiliation', value = <<"member">>},
#xmlattr{name = 'role', value = <<"participant">>}]}]},
#xmlel{ns = ?NS_MUC_USER, name = 'status', children =
[#xmlcdata{cdata = list_to_binary(FromIdent)}]}]}),
@ -979,8 +979,8 @@ process_mode_o(StateData, Chan, _From, Nick, Affiliation, Role) ->
#xmlel{ns = ?NS_JABBER_CLIENT, name = 'presence', children =
[#xmlel{ns = ?NS_MUC_USER, name = 'x', children =
[#xmlel{ns = ?NS_MUC_USER, name = 'item', attrs =
[#xmlattr{name = 'affiliation', value = Affiliation},
#xmlattr{name = 'role', value = Role}]}]}]}).
[#xmlattr{name = 'affiliation', value = list_to_binary(Affiliation)},
#xmlattr{name = 'role', value = list_to_binary(Role)}]}]}]}).
process_kick(StateData, Chan, From, Nick, String) ->
Msg = lists:last(string:tokens(String, ":")),
@ -994,12 +994,12 @@ process_kick(StateData, Chan, From, Nick, String) ->
exmpp_jid:make_jid(lists:concat([Chan, "%", StateData#state.server]),
StateData#state.host, Nick),
StateData#state.user,
#xmlel{ns = ?NS_JABBER_CLIENT, name = 'presence', attrs = [#xmlattr{name = 'type', value = "unavailable"}], children =
#xmlel{ns = ?NS_JABBER_CLIENT, name = 'presence', attrs = [#xmlattr{name = 'type', value = <<"unavailable">>}], children =
[#xmlel{ns = ?NS_MUC_USER, name = 'x', children =
[#xmlel{ns = ?NS_MUC_USER, name = 'item', attrs =
[#xmlattr{name = 'affiliation', value = "none"},
#xmlattr{name = 'role', value = "none"}]},
#xmlel{ns = ?NS_MUC_USER, name = 'status', attrs = [#xmlattr{name = 'code', value = "307"}]}
[#xmlattr{name = 'affiliation', value = <<"none">>},
#xmlattr{name = 'role', value = <<"none">>}]},
#xmlel{ns = ?NS_MUC_USER, name = 'status', attrs = [#xmlattr{name = 'code', value = <<"307">>}]}
]}]}).
process_nick(StateData, From, NewNick) ->
@ -1015,13 +1015,13 @@ process_nick(StateData, From, NewNick) ->
lists:concat([Chan, "%", StateData#state.server]),
StateData#state.host, FromUser),
StateData#state.user,
#xmlel{ns = ?NS_JABBER_CLIENT, name = 'presence', attrs = [#xmlattr{name = 'type', value = "unavailable"}], children =
#xmlel{ns = ?NS_JABBER_CLIENT, name = 'presence', attrs = [#xmlattr{name = 'type', value = <<"unavailable">>}], children =
[#xmlel{ns = ?NS_MUC_USER, name = 'x', children =
[#xmlel{ns = ?NS_MUC_USER, name = 'item', attrs =
[#xmlattr{name = 'affiliation', value = "member"},
#xmlattr{name = 'role', value = "participant"},
#xmlattr{name = 'nick', value = Nick}]},
#xmlel{ns = ?NS_MUC_USER, name = 'status', attrs = [#xmlattr{name = 'code', value = "303"}]}
[#xmlattr{name = 'affiliation', value = <<"member">>},
#xmlattr{name = 'role', value = <<"participant">>},
#xmlattr{name = 'nick', value = list_to_binary(Nick)}]},
#xmlel{ns = ?NS_MUC_USER, name = 'status', attrs = [#xmlattr{name = 'code', value = <<"303">>}]}
]}]}),
ejabberd_router:route(
exmpp_jid:make_jid(
@ -1031,8 +1031,8 @@ process_nick(StateData, From, NewNick) ->
#xmlel{ns = ?NS_JABBER_CLIENT, name = 'presence', children =
[#xmlel{ns = ?NS_MUC_USER, name = 'x', children =
[#xmlel{ns = ?NS_MUC_USER, name = 'item', attrs =
[#xmlattr{name = 'affiliation', value = "member"},
#xmlattr{name = 'role', value = "participant"}]}
[#xmlattr{name = 'affiliation', value = <<"member">>},
#xmlattr{name = 'role', value = <<"participant">>}]}
]}]}),
?SETS:add_element(Nick,
remove_element(FromUser, Ps));
@ -1051,8 +1051,8 @@ process_error(StateData, String) ->
lists:concat([Chan, "%", StateData#state.server]),
StateData#state.host, StateData#state.nick),
StateData#state.user,
#xmlel{ns = ?NS_JABBER_CLIENT, name = 'presence', attrs = [#xmlattr{name = 'type', value = "error"}], children =
[#xmlel{ns = ?NS_JABBER_CLIENT, name = 'error', attrs = [#xmlattr{name = 'code', value = "502"}], children =
#xmlel{ns = ?NS_JABBER_CLIENT, name = 'presence', attrs = [#xmlattr{name = 'type', value = <<"error">>}], children =
[#xmlel{ns = ?NS_JABBER_CLIENT, name = 'error', attrs = [#xmlattr{name = 'code', value = <<"502">>}], children =
[#xmlcdata{cdata = list_to_binary(String)}]}]})
end, dict:fetch_keys(StateData#state.channels)).

View File

@ -74,7 +74,7 @@ stop(Host) ->
process_local_iq(_From, _To, #iq{type = get} = IQ_Rec) ->
Sec = trunc(element(1, erlang:statistics(wall_clock))/1000),
Response = #xmlel{ns = ?NS_LAST_ACTIVITY, name = 'query', attrs =
[#xmlattr{name = 'seconds', value = integer_to_list(Sec)}]},
[#xmlattr{name = 'seconds', value = list_to_binary(integer_to_list(Sec))}]},
exmpp_iq:result(IQ_Rec, Response);
process_local_iq(_From, _To, #iq{type = set} = IQ_Rec) ->
exmpp_iq:error(IQ_Rec, 'not-allowed').
@ -121,7 +121,7 @@ get_last(IQ_Rec, LUser, LServer) ->
TimeStamp2 = MegaSecs * 1000000 + Secs,
Sec = TimeStamp2 - TimeStamp,
Response = #xmlel{ns = ?NS_LAST_ACTIVITY, name = 'query',
attrs = [#xmlattr{name = 'seconds', value = integer_to_list(Sec)}],
attrs = [#xmlattr{name = 'seconds', value = list_to_binary(integer_to_list(Sec))}],
children = [#xmlcdata{cdata = Status}]},
exmpp_iq:result(IQ_Rec, Response)
end.

View File

@ -67,7 +67,7 @@ stop(Host) ->
process_local_iq(_From, _To, #iq{type = get} = IQ_Rec) ->
Sec = trunc(element(1, erlang:statistics(wall_clock))/1000),
Response = #xmlel{ns = ?NS_LAST_ACTIVITY, name = 'query', attrs =
[#xmlattr{name = 'seconds', value = integer_to_list(Sec)}]},
[#xmlattr{name = 'seconds', value = list_to_binary(integer_to_list(Sec))}]},
exmpp_iq:result(IQ_Rec, Response);
process_local_iq(_From, _To, #iq{type = set} = IQ_Rec) ->
exmpp_iq:error(IQ_Rec, 'not-allowed').
@ -116,7 +116,7 @@ get_last(IQ_Rec, LUser, LServer) ->
TimeStamp2 = MegaSecs * 1000000 + Secs,
Sec = TimeStamp2 - TimeStamp,
Response = #xmlel{ns = ?NS_LAST_ACTIVITY, name = 'query',
attrs = [#xmlattr{name = 'seconds', value = integer_to_list(Sec)}],
attrs = [#xmlattr{name = 'seconds', value = list_to_binary(integer_to_list(Sec))}],
children = [#xmlcdata{cdata = list_to_binary(Status)}]},
exmpp_iq:result(IQ_Rec, Response);
_ ->

View File

@ -98,19 +98,20 @@ stop(Host) ->
%% C) mod_muc:stop was called, and each room is being terminated
%% In this case, the mod_muc process died before the room processes
%% So the message sending must be catched
room_destroyed(Host, Room, Pid, ServerHost) ->
room_destroyed(Host, Room, Pid, ServerHost) when is_binary(Host),
is_binary(Room) ->
catch gen_mod:get_module_proc(ServerHost, ?PROCNAME) !
{room_destroyed, {Room, Host}, Pid},
ok.
store_room(Host, Name, Opts) ->
store_room(Host, Name, Opts) when is_binary(Host), is_binary(Name) ->
F = fun() ->
mnesia:write(#muc_room{name_host = {Name, Host},
opts = Opts})
end,
mnesia:transaction(F).
restore_room(Host, Name) ->
restore_room(Host, Name) when is_binary(Host), is_binary(Name) ->
case catch mnesia:dirty_read(muc_room, {Name, Host}) of
[#muc_room{opts = Opts}] ->
Opts;
@ -118,7 +119,7 @@ restore_room(Host, Name) ->
error
end.
forget_room(Host, Name) ->
forget_room(Host, Name) when is_binary(Host), is_binary(Name) ->
F = fun() ->
mnesia:delete({muc_room, {Name, Host}})
end,

View File

@ -257,9 +257,9 @@ pop_offline_messages(Ls, User, Server)
[El] = exmpp_xml:parse_document(XML,
[names_as_atom, {check_elems, xmpp},
{check_nss,xmpp}, {check_attrs,xmpp}]),
To = exmpp_jid:list_to_jid(
To = exmpp_jid:binary_to_jid(
exmpp_stanza:get_recipient(El)),
From = exmpp_jid:list_to_jid(
From = exmpp_jid:binary_to_jid(
exmpp_stanza:get_sender(El)),
[{route, From, To, El}]
catch

View File

@ -156,14 +156,14 @@ process_list_get(LUser, LServer, Name) ->
item_to_xml(Item) ->
Attrs1 = [#xmlattr{name = 'action', value = action_to_list(Item#listitem.action)},
#xmlattr{name = 'order', value = order_to_list(Item#listitem.order)}],
Attrs1 = [#xmlattr{name = 'action', value = action_to_binary(Item#listitem.action)},
#xmlattr{name = 'order', value = order_to_binary(Item#listitem.order)}],
Attrs2 = case Item#listitem.type of
none ->
Attrs1;
Type ->
[#xmlattr{name = 'type', value = type_to_list(Item#listitem.type)},
#xmlattr{name = 'value', value = value_to_list(Type, Item#listitem.value)} |
[#xmlattr{name = 'type', value = type_to_binary(Item#listitem.type)},
#xmlattr{name = 'value', value = value_to_binary(Type, Item#listitem.value)} |
Attrs1]
end,
SubEls = case Item#listitem.match_all of
@ -199,34 +199,34 @@ item_to_xml(Item) ->
exmpp_xml:set_attributes(#xmlel{ns = ?NS_PRIVACY, name = item, children = SubEls}, Attrs2).
action_to_list(Action) ->
action_to_binary(Action) ->
case Action of
allow -> "allow";
deny -> "deny"
allow -> <<"allow">>;
deny -> <<"deny">>
end.
order_to_list(Order) ->
integer_to_list(Order).
order_to_binary(Order) ->
list_to_binary(integer_to_list(Order)).
type_to_list(Type) ->
type_to_binary(Type) ->
case Type of
jid -> "jid";
group -> "group";
subscription -> "subscription"
jid -> <<"jid">>;
group -> <<"group">>;
subscription -> <<"subscription">>
end.
value_to_list(Type, Val) ->
value_to_binary(Type, Val) ->
case Type of
jid ->
{N, D, R} = Val,
exmpp_jid:jid_to_list(N, D, R);
exmpp_jid:jid_to_binary(N, D, R);
group -> Val;
subscription ->
case Val of
both -> "both";
to -> "to";
from -> "from";
none -> "none"
both -> <<"both">>;
to -> <<"to">>;
from -> <<"from">>;
none -> <<"none">>
end
end.

View File

@ -162,14 +162,14 @@ process_list_get(LUser, LServer, Name) ->
item_to_xml(Item) ->
Attrs1 = [#xmlattr{name = 'action', value = action_to_list(Item#listitem.action)},
#xmlattr{name = 'order', value = order_to_list(Item#listitem.order)}],
Attrs1 = [#xmlattr{name = 'action', value = action_to_binary(Item#listitem.action)},
#xmlattr{name = 'order', value = order_to_binary(Item#listitem.order)}],
Attrs2 = case Item#listitem.type of
none ->
Attrs1;
Type ->
[#xmlattr{name = 'type', value = type_to_list(Item#listitem.type)},
#xmlattr{name = 'value', value = value_to_list(Type, Item#listitem.value)} |
[#xmlattr{name = 'type', value = type_to_binary(Item#listitem.type)},
#xmlattr{name = 'value', value = value_to_binary(Type, Item#listitem.value)} |
Attrs1]
end,
SubEls = case Item#listitem.match_all of
@ -205,34 +205,34 @@ item_to_xml(Item) ->
exmpp_xml:set_attributes(#xmlel{ns = ?NS_PRIVACY, name = item, children = SubEls}, Attrs2).
action_to_list(Action) ->
action_to_binary(Action) ->
case Action of
allow -> "allow";
deny -> "deny"
allow -> <<"allow">>;
deny -> <<"deny">>
end.
order_to_list(Order) ->
integer_to_list(Order).
order_to_binary(Order) ->
list_to_binary(integer_to_list(Order)).
type_to_list(Type) ->
type_to_binary(Type) ->
case Type of
jid -> "jid";
group -> "group";
subscription -> "subscription"
jid -> <<"jid">>;
group -> <<"group">>;
subscription -> <<"subscription">>
end.
value_to_list(Type, Val) ->
value_to_binary(Type, Val) ->
case Type of
jid ->
{N, D, R} = Val,
exmpp_jid:jid_to_list(N, D, R);
exmpp_jid:jid_to_binary(N, D, R);
group -> Val;
subscription ->
case Val of
both -> "both";
to -> "to";
from -> "from";
none -> "none"
both -> <<"both">>;
to -> <<"to">>;
from -> <<"from">>;
none -> <<"none">>
end
end.

View File

@ -315,12 +315,12 @@ identity(Host) ->
end,
#xmlel{ns = ?NS_DISCO_INFO, name = 'identity', attrs = Identity}.
disco_local_identity(Acc, _From, To, [], _Lang) ->
disco_local_identity(Acc, _From, To, <<>>, _Lang) ->
Acc ++ [identity(To#jid.ldomain)];
disco_local_identity(Acc, _From, _To, _Node, _Lang) ->
Acc.
disco_local_features(Acc, _From, To, [], _Lang) ->
disco_local_features(Acc, _From, To, <<>>, _Lang) ->
Host = To#jid.ldomain,
Feats = case Acc of
{result, I} -> I;
@ -332,12 +332,12 @@ disco_local_features(Acc, _From, To, [], _Lang) ->
disco_local_features(Acc, _From, _To, _Node, _Lang) ->
Acc.
disco_local_items(Acc, _From, _To, [], _Lang) ->
disco_local_items(Acc, _From, _To, <<>>, _Lang) ->
Acc;
disco_local_items(Acc, _From, _To, _Node, _Lang) ->
Acc.
disco_sm_identity(Acc, _From, To, [], _Lang) ->
disco_sm_identity(Acc, _From, To, <<>>, _Lang) ->
Acc ++ [identity(To#jid.ldomain)];
disco_sm_identity(Acc, From, To, Node, _Lang) ->
LOwner = jlib:short_prepd_bare_jid(To),
@ -360,7 +360,7 @@ disco_sm_features(Acc, From, To, Node, _Lang) ->
Acc
end.
disco_sm_items(Acc, From, To, [], _Lang) ->
disco_sm_items(Acc, From, To, <<>>, _Lang) ->
%% TODO, use iq_disco_items(Host, [], From)
Host = To#jid.ldomain,
LJID = jlib:short_prepd_bare_jid(To),
@ -381,7 +381,8 @@ disco_sm_items(Acc, From, To, [], _Lang) ->
{result, NodeItems ++ Items}
end;
disco_sm_items(Acc, From, To, Node, _Lang) ->
disco_sm_items(Acc, From, To, NodeB, _Lang) ->
Node = binary_to_list(NodeB),
%% TODO, use iq_disco_items(Host, Node, From)
Host = To#jid.ldomain,
LJID = jlib:short_prepd_bare_jid(To),

View File

@ -154,7 +154,7 @@ item_to_xml(Item) ->
Attrs1 = exmpp_xml:set_attribute_in_list([],
'jid', exmpp_jid:jid_to_list(U, S, R)),
Attrs2 = case Item#roster.name of
"" ->
<<>> ->
Attrs1;
Name ->
exmpp_xml:set_attribute_in_list(Attrs1, 'name', Name)
@ -205,7 +205,7 @@ process_item_set(From, To, #xmlel{} = El) ->
jid = JID};
[I] ->
I#roster{jid = JID,
name = "",
name = <<>>,
groups = [],
xs = []}
end,
@ -274,7 +274,7 @@ process_item_attrs(Item, [#xmlattr{name = Attr, value = Val} | Attrs]) ->
process_item_attrs(Item#roster{name = Val}, Attrs);
'subscription' ->
case Val of
"remove" ->
<<"remove">> ->
process_item_attrs(Item#roster{subscription = remove},
Attrs);
_ ->
@ -623,19 +623,19 @@ process_item_attrs_ws(Item, [#xmlattr{name = Attr, value = Val} | Attrs]) ->
process_item_attrs_ws(Item#roster{name = Val}, Attrs);
'subscription' ->
case Val of
"remove" ->
<<"remove">> ->
process_item_attrs_ws(Item#roster{subscription = remove},
Attrs);
"none" ->
<<"none">> ->
process_item_attrs_ws(Item#roster{subscription = none},
Attrs);
"both" ->
<<"both">> ->
process_item_attrs_ws(Item#roster{subscription = both},
Attrs);
"from" ->
<<"from">> ->
process_item_attrs_ws(Item#roster{subscription = from},
Attrs);
"to" ->
<<"to">> ->
process_item_attrs_ws(Item#roster{subscription = to},
Attrs);
_ ->
@ -888,7 +888,7 @@ user_roster(User, Server, Query, Lang) ->
[?XAC("td", [{"class", "valign"}],
catch exmpp_jid:jid_to_list(U, S, R)),
?XAC("td", [{"class", "valign"}],
R#roster.name),
binary_to_list(R#roster.name)),
?XAC("td", [{"class", "valign"}],
atom_to_list(R#roster.subscription)),
?XAC("td", [{"class", "valign"}],

View File

@ -22,7 +22,7 @@
-record(roster, {usj,
us,
jid,
name = "",
name = <<>>,
subscription = none,
ask = none,
groups = [],

View File

@ -181,7 +181,7 @@ item_to_xml(Item) ->
Attrs1 = exmpp_xml:set_attribute_in_list([],
'jid', exmpp_jid:jid_to_list(U, S, R)),
Attrs2 = case Item#roster.name of
"" ->
<<>> ->
Attrs1;
Name ->
exmpp_xml:set_attribute_in_list(Attrs1, 'name', Name)
@ -245,7 +245,7 @@ process_item_set(From, To, #xmlel{} = El) ->
usj = {LUser, LServer, LJID},
us = {LUser, LServer},
jid = LJID,
name = ""}
name = <<>>}
end
end,
Item1 = process_item_attrs(Item, El#xmlel.attrs),
@ -315,7 +315,7 @@ process_item_attrs(Item, [#xmlattr{name = Attr, value = Val} | Attrs]) ->
process_item_attrs(Item#roster{name = Val}, Attrs);
'subscription' ->
case Val of
"remove" ->
<<"remove">> ->
process_item_attrs(Item#roster{subscription = remove},
Attrs);
_ ->
@ -685,19 +685,19 @@ process_item_attrs_ws(Item, [#xmlattr{name = Attr, value = Val} | Attrs]) ->
process_item_attrs_ws(Item#roster{name = Val}, Attrs);
'subscription' ->
case Val of
"remove" ->
<<"remove">> ->
process_item_attrs_ws(Item#roster{subscription = remove},
Attrs);
"none" ->
<<"none">> ->
process_item_attrs_ws(Item#roster{subscription = none},
Attrs);
"both" ->
<<"both">> ->
process_item_attrs_ws(Item#roster{subscription = both},
Attrs);
"from" ->
<<"from">> ->
process_item_attrs_ws(Item#roster{subscription = from},
Attrs);
"to" ->
<<"to">> ->
process_item_attrs_ws(Item#roster{subscription = to},
Attrs);
_ ->
@ -834,7 +834,7 @@ raw_to_record(LServer, {User, SJID, Nick, SSubscription, SAsk, SAskMessage,
#roster{usj = {UserB, LServer, LJID},
us = {UserB, LServer},
jid = LJID,
name = Nick,
name = list_to_binary(Nick),
subscription = Subscription,
ask = Ask,
askmessage = list_to_binary(SAskMessage)}
@ -852,7 +852,7 @@ record_to_string(#roster{us = {User, _Server},
Username = ejabberd_odbc:escape(binary_to_list(User)),
{U, S, R} = JID,
SJID = ejabberd_odbc:escape(exmpp_jid:jid_to_list(U, S, R)),
Nick = ejabberd_odbc:escape(Name),
Nick = ejabberd_odbc:escape(binary_to_list(Name)),
SSubscription = case Subscription of
both -> "B";
to -> "T";
@ -939,7 +939,7 @@ user_roster(User, Server, Query, Lang) ->
[?XAC("td", [{"class", "valign"}],
catch exmpp_jid:jid_to_list(U, S, R)),
?XAC("td", [{"class", "valign"}],
R#roster.name),
binary_to_list(R#roster.name)),
?XAC("td", [{"class", "valign"}],
atom_to_list(R#roster.subscription)),
?XAC("td", [{"class", "valign"}],

View File

@ -63,9 +63,9 @@ process_local_iq(_From, _To, #iq{type = set} = IQ_Rec) ->
get_names([], Res) ->
Res;
get_names([#xmlel{name = 'stat', attrs = Attrs} | Els], Res) ->
Name = exmpp_xml:get_attribute_from_list(Attrs, 'name', ""),
Name = exmpp_xml:get_attribute_from_list_as_binary(Attrs, 'name', <<>>),
case Name of
"" ->
<<>> ->
get_names(Els, Res);
_ ->
get_names(Els, [Name | Res])
@ -78,10 +78,10 @@ get_names([_ | Els], Res) ->
get_local_stats(_Server, [], []) ->
{result,
[?STAT("users/online"),
?STAT("users/total"),
?STAT("users/all-hosts/online"),
?STAT("users/all-hosts/total")
[?STAT(<<"users/online">>),
?STAT(<<"users/total">>),
?STAT(<<"users/all-hosts/online">>),
?STAT(<<"users/all-hosts/total">>)
]};
get_local_stats(Server, [], Names) ->
@ -91,13 +91,13 @@ get_local_stats(Server, [], Names) ->
get_local_stats(_Server, ["running nodes", _], []) ->
{result,
[?STAT("time/uptime"),
?STAT("time/cputime"),
?STAT("users/online"),
?STAT("transactions/commited"),
?STAT("transactions/aborted"),
?STAT("transactions/restarted"),
?STAT("transactions/logged")
[?STAT(<<"time/uptime">>),
?STAT(<<"time/cputime">>),
?STAT(<<"users/online">>),
?STAT(<<"transactions/commited">>),
?STAT(<<"transactions/aborted">>),
?STAT(<<"transactions/restarted">>),
?STAT(<<"transactions/logged">>)
]};
get_local_stats(_Server, ["running nodes", ENode], Names) ->
@ -126,107 +126,107 @@ get_local_stats(_Server, _, _) ->
[#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)}]}]}).
[#xmlcdata{cdata = Desc}]}]}).
get_local_stat(Server, [], Name) when Name == "users/online" ->
get_local_stat(Server, [], Name) when Name == <<"users/online">> ->
case catch ejabberd_sm:get_vh_session_list(list_to_binary(Server)) of
{'EXIT', _Reason} ->
?STATERR("500", "Internal Server Error");
?STATERR(<<"500">>, <<"Internal Server Error">>);
Users ->
?STATVAL(integer_to_list(length(Users)), "users")
?STATVAL(list_to_binary(integer_to_list(length(Users))), <<"users">>)
end;
get_local_stat(Server, [], Name) when Name == "users/total" ->
get_local_stat(Server, [], Name) when Name == <<"users/total">> ->
%%LServer = jlib:nameprep(Server),
case catch ejabberd_auth:get_vh_registered_users_number(Server) of
{'EXIT', _Reason} ->
?STATERR("500", "Internal Server Error");
?STATERR(<<"500">>, <<"Internal Server Error">>);
NUsers ->
?STATVAL(integer_to_list(NUsers), "users")
?STATVAL(list_to_binary(integer_to_list(NUsers)), <<"users">>)
end;
get_local_stat(_Server, [], Name) when Name == "users/all-hosts/online" ->
get_local_stat(_Server, [], Name) when Name == <<"users/all-hosts/online">> ->
case catch mnesia:table_info(session, size) of
{'EXIT', _Reason} ->
?STATERR("500", "Internal Server Error");
?STATERR(<<"500">>, <<"Internal Server Error">>);
Users ->
?STATVAL(integer_to_list(Users), "users")
?STATVAL(list_to_binary(integer_to_list(Users)), <<"users">>)
end;
get_local_stat(_Server, [], Name) when Name == "users/all-hosts/total" ->
get_local_stat(_Server, [], Name) when Name == <<"users/all-hosts/total">> ->
case catch mnesia:table_info(passwd, size) of
{'EXIT', _Reason} ->
?STATERR("500", "Internal Server Error");
?STATERR(<<"500">>, <<"Internal Server Error">>);
Users ->
?STATVAL(integer_to_list(Users), "users")
?STATVAL(list_to_binary(integer_to_list(Users)), <<"users">>)
end;
get_local_stat(_Server, _, Name) ->
?STATERR("404", "Not Found").
?STATERR(<<"404">>, <<"Not Found">>).
get_node_stat(Node, Name) when Name == "time/uptime" ->
get_node_stat(Node, Name) when Name == <<"time/uptime">> ->
case catch rpc:call(Node, erlang, statistics, [wall_clock]) of
{badrpc, _Reason} ->
?STATERR("500", "Internal Server Error");
?STATERR(<<"500">>, <<"Internal Server Error">>);
CPUTime ->
?STATVAL(
io_lib:format("~.3f", [element(1, CPUTime)/1000]), "seconds")
?STATVAL(list_to_binary(
io_lib:format("~.3f", [element(1, CPUTime)/1000])), "seconds")
end;
get_node_stat(Node, Name) when Name == "time/cputime" ->
get_node_stat(Node, Name) when Name == <<"time/cputime">> ->
case catch rpc:call(Node, erlang, statistics, [runtime]) of
{badrpc, _Reason} ->
?STATERR("500", "Internal Server Error");
?STATERR(<<"500">>, <<"Internal Server Error">>);
RunTime ->
?STATVAL(
io_lib:format("~.3f", [element(1, RunTime)/1000]), "seconds")
?STATVAL(list_to_binary(
io_lib:format("~.3f", [element(1, RunTime)/1000])), "seconds")
end;
get_node_stat(Node, Name) when Name == "users/online" ->
get_node_stat(Node, Name) when Name == <<"users/online">> ->
case catch rpc:call(Node, ejabberd_sm, dirty_get_my_sessions_list, []) of
{badrpc, _Reason} ->
?STATERR("500", "Internal Server Error");
?STATERR(<<"500">>, <<"Internal Server Error">>);
Users ->
?STATVAL(integer_to_list(length(Users)), "users")
?STATVAL(list_to_binary(integer_to_list(length(Users))), <<"users">>)
end;
get_node_stat(Node, Name) when Name == "transactions/commited" ->
get_node_stat(Node, Name) when Name == <<"transactions/commited">> ->
case catch rpc:call(Node, mnesia, system_info, [transaction_commits]) of
{badrpc, _Reason} ->
?STATERR("500", "Internal Server Error");
?STATERR(<<"500">>, <<"Internal Server Error">>);
Transactions ->
?STATVAL(integer_to_list(Transactions), "transactions")
?STATVAL(list_to_binary(integer_to_list(Transactions)), <<"transactions">>)
end;
get_node_stat(Node, Name) when Name == "transactions/aborted" ->
get_node_stat(Node, Name) when Name == <<"transactions/aborted">> ->
case catch rpc:call(Node, mnesia, system_info, [transaction_failures]) of
{badrpc, _Reason} ->
?STATERR("500", "Internal Server Error");
?STATERR(<<"500">>, <<"Internal Server Error">>);
Transactions ->
?STATVAL(integer_to_list(Transactions), "transactions")
?STATVAL(list_to_binary(integer_to_list(Transactions)), <<"transactions">>)
end;
get_node_stat(Node, Name) when Name == "transactions/restarted" ->
get_node_stat(Node, Name) when Name == <<"transactions/restarted">> ->
case catch rpc:call(Node, mnesia, system_info, [transaction_restarts]) of
{badrpc, _Reason} ->
?STATERR("500", "Internal Server Error");
?STATERR(<<"500">>, <<"Internal Server Error">>);
Transactions ->
?STATVAL(integer_to_list(Transactions), "transactions")
?STATVAL(list_to_binary(integer_to_list(Transactions)), <<"transactions">>)
end;
get_node_stat(Node, Name) when Name == "transactions/logged" ->
get_node_stat(Node, Name) when Name == <<"transactions/logged">> ->
case catch rpc:call(Node, mnesia, system_info, [transaction_log_writes]) of
{badrpc, _Reason} ->
?STATERR("500", "Internal Server Error");
?STATERR(<<"500">>, <<"Internal Server Error">>);
Transactions ->
?STATVAL(integer_to_list(Transactions), "transactions")
?STATVAL(list_to_binary(integer_to_list(Transactions)), <<"transactions">>)
end;
get_node_stat(_, Name) ->
?STATERR("404", "Not Found").
?STATERR(<<"404">>, <<"Not Found">>).
search_running_node(SNode) ->

View File

@ -284,7 +284,7 @@ set_vcard(User, LServer, VCARD) ->
[#xmlel{ns = ?NS_SEARCH, name = 'instructions', children =
[#xmlcdata{cdata = list_to_binary(translate:translate(Lang, "You need an x:data capable client to search"))}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs =
[#xmlattr{name = 'type', value = "form"}], children =
[#xmlattr{name = 'type', value = <<"form">>}], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
[#xmlcdata{cdata = list_to_binary(translate:translate(Lang, "Search users in ") ++ exmpp_jid:jid_to_list(JID))}]},
#xmlel{ns = ?NS_SEARCH, name = 'instructions', children =
@ -293,18 +293,18 @@ set_vcard(User, LServer, VCARD) ->
"for any matching Jabber User "
"(Add * to the end of field to "
"match substring)"))}]},
?TLFIELD("text-single", "User", "user"),
?TLFIELD("text-single", "Full Name", "fn"),
?TLFIELD("text-single", "Name", "first"),
?TLFIELD("text-single", "Middle Name", "middle"),
?TLFIELD("text-single", "Family Name", "last"),
?TLFIELD("text-single", "Nickname", "nick"),
?TLFIELD("text-single", "Birthday", "bday"),
?TLFIELD("text-single", "Country", "ctry"),
?TLFIELD("text-single", "City", "locality"),
?TLFIELD("text-single", "Email", "email"),
?TLFIELD("text-single", "Organization Name", "orgname"),
?TLFIELD("text-single", "Organization Unit", "orgunit")
?TLFIELD(<<"text-single">>, "User", <<"user">>),
?TLFIELD(<<"text-single">>, "Full Name", <<"fn">>),
?TLFIELD(<<"text-single">>, "Name", <<"first">>),
?TLFIELD(<<"text-single">>, "Middle Name", <<"middle">>),
?TLFIELD(<<"text-single">>, "Family Name", <<"last">>),
?TLFIELD(<<"text-single">>, "Nickname", <<"nick">>),
?TLFIELD(<<"text-single">>, "Birthday", <<"bday">>),
?TLFIELD(<<"text-single">>, "Country", <<"ctry">>),
?TLFIELD(<<"text-single">>, "City", <<"locality">>),
?TLFIELD(<<"text-single">>, "Email", <<"email">>),
?TLFIELD(<<"text-single">>, "Organization Name", <<"orgname">>),
?TLFIELD(<<"text-single">>, "Organization Unit", <<"orgunit">>)
]}]).
@ -346,7 +346,7 @@ do_route(ServerHost, From, To, Packet) ->
ns = ?NS_DATA_FORMS,
name = 'x',
attrs = [#xmlattr{name = 'type',
value = "result"}],
value = <<"result">>}],
children = search_result(Lang,
To, ServerHost, XData)}]},
ResIQ = exmpp_iq:result(Packet,
@ -371,24 +371,24 @@ do_route(ServerHost, From, To, Packet) ->
#xmlel{ns = ?NS_DISCO_INFO, name = 'identity',
attrs = [
#xmlattr{name = 'category',
value = "directory"},
value = <<"directory">>},
#xmlattr{name = 'type',
value = "user"},
value = <<"user">>},
#xmlattr{name = 'name',
value = translate:translate(Lang,
"vCard User Search")}]},
value = list_to_binary(translate:translate(Lang,
"vCard User Search"))}]},
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature',
attrs = [
#xmlattr{name = 'var',
value = ?NS_DISCO_INFO_s}]},
value = list_to_binary(?NS_DISCO_INFO_s)}]},
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature',
attrs = [
#xmlattr{name = 'var',
value = ?NS_SEARCH_s}]},
value = list_to_binary(?NS_SEARCH_s)}]},
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature',
attrs = [
#xmlattr{name = 'var',
value = ?NS_VCARD_s}]}
value = list_to_binary(?NS_VCARD_s)}]}
]},
ResIQ = exmpp_iq:result(Packet, Result),
ejabberd_router:route(To,
@ -449,42 +449,42 @@ search_result(Lang, JID, ServerHost, Data) ->
translate:translate(Lang, "Search Results for ") ++
exmpp_jid:jid_to_list(JID))}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'reported', children =
[?TLFIELD("text-single", "Jabber ID", "jid"),
?TLFIELD("text-single", "Full Name", "fn"),
?TLFIELD("text-single", "Name", "first"),
?TLFIELD("text-single", "Middle Name", "middle"),
?TLFIELD("text-single", "Family Name", "last"),
?TLFIELD("text-single", "Nickname", "nick"),
?TLFIELD("text-single", "Birthday", "bday"),
?TLFIELD("text-single", "Country", "ctry"),
?TLFIELD("text-single", "City", "locality"),
?TLFIELD("text-single", "Email", "email"),
?TLFIELD("text-single", "Organization Name", "orgname"),
?TLFIELD("text-single", "Organization Unit", "orgunit")
[?TLFIELD(<<"text-single">>, "Jabber ID", <<"jid">>),
?TLFIELD(<<"text-single">>, "Full Name", <<"fn">>),
?TLFIELD(<<"text-single">>, "Name", <<"first">>),
?TLFIELD(<<"text-single">>, "Middle Name", <<"middle">>),
?TLFIELD(<<"text-single">>, "Family Name", <<"last">>),
?TLFIELD(<<"text-single">>, "Nickname", <<"nick">>),
?TLFIELD(<<"text-single">>, "Birthday", <<"bday">>),
?TLFIELD(<<"text-single">>, "Country", <<"ctry">>),
?TLFIELD(<<"text-single">>, "City", <<"locality">>),
?TLFIELD(<<"text-single">>, "Email", <<"email">>),
?TLFIELD(<<"text-single">>, "Organization Name", <<"orgname">>),
?TLFIELD(<<"text-single">>, "Organization Unit", <<"orgunit">>)
]}] ++ lists:map(fun record_to_item/1, search(ServerHost, Data)).
-define(FIELD(Var, Val),
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[#xmlattr{name = 'var', value = Var}], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children =
[#xmlcdata{cdata = list_to_binary(Val)}]}]}).
[#xmlcdata{cdata = Val}]}]}).
record_to_item(R) ->
{User, Server} = R#vcard_search.user,
#xmlel{ns = ?NS_DATA_FORMS, name = 'item', children =
[
?FIELD("jid", User ++ "@" ++ Server),
?FIELD("fn", R#vcard_search.fn),
?FIELD("last", R#vcard_search.family),
?FIELD("first", R#vcard_search.given),
?FIELD("middle", R#vcard_search.middle),
?FIELD("nick", R#vcard_search.nickname),
?FIELD("bday", R#vcard_search.bday),
?FIELD("ctry", R#vcard_search.ctry),
?FIELD("locality", R#vcard_search.locality),
?FIELD("email", R#vcard_search.email),
?FIELD("orgname", R#vcard_search.orgname),
?FIELD("orgunit", R#vcard_search.orgunit)
?FIELD(<<"jid">>, list_to_binary(User ++ "@" ++ Server)),
?FIELD(<<"fn">>, list_to_binary(R#vcard_search.fn)),
?FIELD(<<"last">>, list_to_binary(R#vcard_search.family)),
?FIELD(<<"first">>, list_to_binary(R#vcard_search.given)),
?FIELD(<<"middle">>, list_to_binary(R#vcard_search.middle)),
?FIELD(<<"nick">>, list_to_binary(R#vcard_search.nickname)),
?FIELD(<<"bday">>, list_to_binary(R#vcard_search.bday)),
?FIELD(<<"ctry">>, list_to_binary(R#vcard_search.ctry)),
?FIELD(<<"locality">>, list_to_binary(R#vcard_search.locality)),
?FIELD(<<"email">>, list_to_binary(R#vcard_search.email)),
?FIELD(<<"orgname">>, list_to_binary(R#vcard_search.orgname)),
?FIELD(<<"orgunit">>, list_to_binary(R#vcard_search.orgunit))
]
}.

View File

@ -391,14 +391,14 @@ ldap_attribute_to_vcard(_, _) ->
[#xmlel{ns = ?NS_SEARCH, name = 'instructions', children =
[#xmlcdata{cdata = list_to_binary(translate:translate(Lang, "You need an x:data capable client to search"))}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs =
[#xmlattr{name = 'type', value = "form"}], children =
[#xmlattr{name = 'type', value = <<"form">>}], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
[#xmlcdata{cdata = list_to_binary(translate:translate(Lang, "Search users in ") ++
exmpp_jid:jid_to_list(JID))}]},
#xmlel{ns = ?NS_SEARCH, name = 'instructions', children =
[#xmlcdata{cdata = list_to_binary(translate:translate(Lang, "Fill in fields to search "
"for any matching Jabber User"))}]}
] ++ lists:map(fun({X,Y}) -> ?TLFIELD("text-single", X, Y) end, SearchFields)}]).
] ++ lists:map(fun({X,Y}) -> ?TLFIELD(<<"text-single">>, X, list_to_binary(Y)) end, SearchFields)}]).
do_route(State, From, To, Packet) ->
spawn(?MODULE, route, [State, From, To, Packet]).
@ -439,7 +439,7 @@ route(State, From, To, Packet) ->
ns = ?NS_DATA_FORMS,
name = 'x',
attrs = [#xmlattr{name = 'type',
value = "result"}],
value = <<"result">>}],
children = search_result(Lang, To, State, XData)}]},
ResIQ = exmpp_iq:result(Packet,
Result),
@ -464,20 +464,20 @@ route(State, From, To, Packet) ->
#xmlel{ns = ?NS_DISCO_INFO, name = 'identity',
attrs = [
#xmlattr{name = 'category',
value = "directory"},
value = <<"directory">>},
#xmlattr{name = 'type',
value = "user"},
value = <<"user">>},
#xmlattr{name = 'name',
value = translate:translate(Lang,
"vCard User Search")}]},
value = list_to_binary(translate:translate(Lang,
"vCard User Search"))}]},
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature',
attrs = [
#xmlattr{name = 'var',
value = ?NS_SEARCH_s}]},
value = list_to_binary(?NS_SEARCH_s)}]},
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature',
attrs = [
#xmlattr{name = 'var',
value = ?NS_VCARD_s}]}
value = list_to_binary(?NS_VCARD_s)}]}
]},
ResIQ = exmpp_iq:result(Packet, Result),
ejabberd_router:route(To,
@ -528,9 +528,9 @@ search_result(Lang, JID, State, Data) ->
[#xmlcdata{cdata = list_to_binary(translate:translate(Lang, "Search Results for ") ++
exmpp_jid:jid_to_list(JID))}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'reported', children =
[?TLFIELD("text-single", "Jabber ID", "jid")] ++
[?TLFIELD(<<"text-single">>, "Jabber ID", <<"jid">>)] ++
lists:map(
fun({Name, Value}) -> ?TLFIELD("text-single", Name, Value) end,
fun({Name, Value}) -> ?TLFIELD(<<"text-single">>, Name, list_to_binary(Value)) end,
SearchReported)
}],
case search(State, Data) of
@ -544,7 +544,7 @@ search_result(Lang, JID, State, Data) ->
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[#xmlattr{name = 'var', value = Var}], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children =
[#xmlcdata{cdata = list_to_binary(Val)}]}]}).
[#xmlcdata{cdata = Val}]}]}).
search(State, Data) ->
Base = State#state.base,
@ -591,8 +591,8 @@ search_items(Entries, State) ->
VCardMap,
{Username, ?MYNAME})}
end, SearchReported),
Result = [?FIELD("jid", Username ++ "@" ++ LServer)] ++
[?FIELD(Name, Value) || {Name, Value} <- RFields],
Result = [?FIELD(<<"jid">>, list_to_binary(Username ++ "@" ++ LServer))] ++
[?FIELD(list_to_binary(Name), list_to_binary(Value)) || {Name, Value} <- RFields],
[#xmlel{ns = ?NS_DATA_FORMS, name = 'item', children = Result}];
_ ->
[]

View File

@ -250,7 +250,7 @@ set_vcard(User, LServer, VCARD) ->
-define(TLFIELD(Type, Label, Var),
#xmlel{ns = ?NS_VCARD, name = 'field', attrs = [
#xmlattr{name = 'type', value = Type},
#xmlattr{name = 'label', value = translate:translate(Lang, Label)},
#xmlattr{name = 'label', value = list_to_binary(translate:translate(Lang, Label))},
#xmlattr{name = 'var', value = Var}]}).
@ -258,7 +258,7 @@ set_vcard(User, LServer, VCARD) ->
[#xmlel{ns = ?NS_SEARCH, name = 'instructions', children =
[#xmlcdata{cdata = list_to_binary(translate:translate(Lang, "You need an x:data capable client to search"))}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs =
[#xmlattr{name = 'type', value = "form"}], children =
[#xmlattr{name = 'type', value = <<"form">>}], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
[#xmlcdata{cdata = list_to_binary(translate:translate(Lang, "Search users in ") ++ exmpp_jid:jid_to_list(JID))}]},
#xmlel{ns = ?NS_SEARCH, name = 'instructions', children =
@ -267,18 +267,18 @@ set_vcard(User, LServer, VCARD) ->
"for any matching Jabber User "
"(Add * to the end of field to "
"match substring)"))}]},
?TLFIELD("text-single", "User", "user"),
?TLFIELD("text-single", "Full Name", "fn"),
?TLFIELD("text-single", "Name", "first"),
?TLFIELD("text-single", "Middle Name", "middle"),
?TLFIELD("text-single", "Family Name", "last"),
?TLFIELD("text-single", "Nickname", "nick"),
?TLFIELD("text-single", "Birthday", "bday"),
?TLFIELD("text-single", "Country", "ctry"),
?TLFIELD("text-single", "City", "locality"),
?TLFIELD("text-single", "Email", "email"),
?TLFIELD("text-single", "Organization Name", "orgname"),
?TLFIELD("text-single", "Organization Unit", "orgunit")
?TLFIELD(<<"text-single">>, "User", <<"user">>),
?TLFIELD(<<"text-single">>, "Full Name", <<"fn">>),
?TLFIELD(<<"text-single">>, "Name", <<"first">>),
?TLFIELD(<<"text-single">>, "Middle Name", <<"middle">>),
?TLFIELD(<<"text-single">>, "Family Name", <<"last">>),
?TLFIELD(<<"text-single">>, "Nickname", <<"nick">>),
?TLFIELD(<<"text-single">>, "Birthday", <<"bday">>),
?TLFIELD(<<"text-single">>, "Country", <<"ctry">>),
?TLFIELD(<<"text-single">>, "City", <<"locality">>),
?TLFIELD(<<"text-single">>, "Email", <<"email">>),
?TLFIELD(<<"text-single">>, "Organization Name", <<"orgname">>),
?TLFIELD(<<"text-single">>, "Organization Unit", <<"orgunit">>)
]}]).
do_route(ServerHost, From, To, Packet) ->
@ -317,7 +317,7 @@ do_route(ServerHost, From, To, Packet) ->
ns = ?NS_DATA_FORMS,
name = 'x',
attrs = [#xmlattr{name = 'type',
value = "result"}],
value = <<"result">>}],
children = search_result(Lang,
To, ServerHost, XData)}]},
ResIQ = exmpp_iq:result(Packet,
@ -342,20 +342,20 @@ do_route(ServerHost, From, To, Packet) ->
#xmlel{ns = ?NS_DISCO_INFO, name = 'identity',
attrs = [
#xmlattr{name = 'category',
value = "directory"},
value = <<"directory">>},
#xmlattr{name = 'type',
value = "user"},
value = <<"user">>},
#xmlattr{name = 'name',
value = translate:translate(Lang,
"vCard User Search")}]},
value = list_to_binary(translate:translate(Lang,
"vCard User Search"))}]},
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature',
attrs = [
#xmlattr{name = 'var',
value = ?NS_SEARCH_s}]},
value = list_to_binary(?NS_SEARCH_s)}]},
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature',
attrs = [
#xmlattr{name = 'var',
value = ?NS_VCARD_s}]}
value = list_to_binary(?NS_VCARD_s)}]}
]},
ResIQ = exmpp_iq:result(Packet, Result),
ejabberd_router:route(To,
@ -416,18 +416,18 @@ search_result(Lang, JID, ServerHost, Data) ->
translate:translate(Lang, "Search Results for ") ++
exmpp_jid:jid_to_list(JID))}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'reported', children =
[?TLFIELD("text-single", "Jabber ID", "jid"),
?TLFIELD("text-single", "Full Name", "fn"),
?TLFIELD("text-single", "Name", "first"),
?TLFIELD("text-single", "Middle Name", "middle"),
?TLFIELD("text-single", "Family Name", "last"),
?TLFIELD("text-single", "Nickname", "nick"),
?TLFIELD("text-single", "Birthday", "bday"),
?TLFIELD("text-single", "Country", "ctry"),
?TLFIELD("text-single", "City", "locality"),
?TLFIELD("text-single", "Email", "email"),
?TLFIELD("text-single", "Organization Name", "orgname"),
?TLFIELD("text-single", "Organization Unit", "orgunit")
[?TLFIELD(<<"text-single">>, "Jabber ID", <<"jid">>),
?TLFIELD(<<"text-single">>, "Full Name", <<"fn">>),
?TLFIELD(<<"text-single">>, "Name", <<"first">>),
?TLFIELD(<<"text-single">>, "Middle Name", <<"middle">>),
?TLFIELD(<<"text-single">>, "Family Name", <<"last">>),
?TLFIELD(<<"text-single">>, "Nickname", <<"nick">>),
?TLFIELD(<<"text-single">>, "Birthday", <<"bday">>),
?TLFIELD(<<"text-single">>, "Country", <<"ctry">>),
?TLFIELD(<<"text-single">>, "City", <<"locality">>),
?TLFIELD(<<"text-single">>, "Email", <<"email">>),
?TLFIELD(<<"text-single">>, "Organization Name", <<"orgname">>),
?TLFIELD(<<"text-single">>, "Organization Unit", <<"orgunit">>)
]}] ++ lists:map(fun(R) -> record_to_item(ServerHost, R) end,
search(ServerHost, Data)).
@ -435,7 +435,7 @@ search_result(Lang, JID, ServerHost, Data) ->
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[#xmlattr{name = 'var', value = Var}], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children =
[#xmlcdata{cdata = list_to_binary(Val)}]}]}).
[#xmlcdata{cdata = Val}]}]}).
record_to_item(LServer, {Username, FN, Family, Given, Middle,
@ -443,18 +443,18 @@ record_to_item(LServer, {Username, FN, Family, Given, Middle,
EMail, OrgName, OrgUnit}) ->
#xmlel{ns = ?NS_DATA_FORMS, name = 'item', children =
[
?FIELD("jid", Username ++ "@" ++ LServer),
?FIELD("fn", FN),
?FIELD("last", Family),
?FIELD("first", Given),
?FIELD("middle", Middle),
?FIELD("nick", Nickname),
?FIELD("bday", BDay),
?FIELD("ctry", CTRY),
?FIELD("locality", Locality),
?FIELD("email", EMail),
?FIELD("orgname", OrgName),
?FIELD("orgunit", OrgUnit)
?FIELD(<<"jid">>, list_to_binary(Username ++ "@" ++ LServer)),
?FIELD(<<"fn">>, list_to_binary(FN)),
?FIELD(<<"last">>, list_to_binary(Family)),
?FIELD(<<"first">>, list_to_binary(Given)),
?FIELD(<<"middle">>, list_to_binary(Middle)),
?FIELD(<<"nick">>, list_to_binary(Nickname)),
?FIELD(<<"bday">>, list_to_binary(BDay)),
?FIELD(<<"ctry">>, list_to_binary(CTRY)),
?FIELD(<<"locality">>, list_to_binary(Locality)),
?FIELD(<<"email">>, list_to_binary(EMail)),
?FIELD(<<"orgname">>, list_to_binary(OrgName)),
?FIELD(<<"orgunit">>, list_to_binary(OrgUnit))
]
}.

View File

@ -416,12 +416,12 @@ get_jid("from", ParsedPacket) ->
undefined ->
#jid{};
From ->
exmpp_jid:list_to_jid(From)
exmpp_jid:binary_to_jid(From)
end;
get_jid("to", ParsedPacket) ->
case exmpp_stanza:get_recipient(ParsedPacket) of
undefined ->
#jid{};
From ->
exmpp_jid:list_to_jid(From)
exmpp_jid:binary_to_jid(From)
end.