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

Port to latest exmpp changes (attribute names as binary()).

All atributes are now binary() instead of atoms.
This commit is contained in:
Pablo Polvorin 2010-11-29 16:44:31 -03:00
parent f9e2466867
commit ef572c815f
46 changed files with 1041 additions and 1041 deletions

View File

@ -43,9 +43,9 @@ parse_request(#iq{type = Type, ns = NS, payload = SubEl, lang = Lang}) ->
case {Type, NS} of case {Type, NS} of
{set, ?NS_ADHOC} -> {set, ?NS_ADHOC} ->
?DEBUG("entering parse_request...", []), ?DEBUG("entering parse_request...", []),
Node = exmpp_xml:get_attribute_as_list(SubEl, 'node', ""), Node = exmpp_xml:get_attribute_as_list(SubEl, <<"node">>, ""),
SessionID = exmpp_xml:get_attribute_as_list(SubEl, 'sessionid', ""), SessionID = exmpp_xml:get_attribute_as_list(SubEl, <<"sessionid">>, ""),
Action = exmpp_xml:get_attribute_as_list(SubEl, 'action', ""), Action = exmpp_xml:get_attribute_as_list(SubEl, <<"action">>, ""),
XData = find_xdata_el(SubEl), XData = find_xdata_el(SubEl),
AllEls = exmpp_xml:get_child_elements(SubEl), AllEls = exmpp_xml:get_child_elements(SubEl),
Others = case XData of Others = case XData of
@ -114,7 +114,7 @@ produce_response(#adhoc_response{lang = _Lang,
"" -> "" ->
ActionsElAttrs = []; ActionsElAttrs = [];
_ -> _ ->
ActionsElAttrs = [?XMLATTR('execute', DefaultAction)] ActionsElAttrs = [?XMLATTR(<<"execute">>, DefaultAction)]
end, end,
ActionsEls = [#xmlel{ns = ?NS_ADHOC, name = 'actions', attrs = ActionsEls = [#xmlel{ns = ?NS_ADHOC, name = 'actions', attrs =
ActionsElAttrs, children = ActionsElAttrs, children =
@ -122,11 +122,11 @@ produce_response(#adhoc_response{lang = _Lang,
end, end,
NotesEls = lists:map(fun({Type, Text}) -> NotesEls = lists:map(fun({Type, Text}) ->
#xmlel{ns = ?NS_ADHOC, name = 'note', attrs = #xmlel{ns = ?NS_ADHOC, name = 'note', attrs =
[?XMLATTR('type', Type)], [?XMLATTR(<<"type">>, Type)],
children = [#xmlcdata{cdata = list_to_binary(Text)}]} children = [#xmlcdata{cdata = list_to_binary(Text)}]}
end, Notes), end, Notes),
#xmlel{ns = ?NS_ADHOC, name = 'command', attrs = #xmlel{ns = ?NS_ADHOC, name = 'command', attrs =
[?XMLATTR('sessionid', SessionID), [?XMLATTR(<<"sessionid">>, SessionID),
?XMLATTR('node', Node), ?XMLATTR(<<"node">>, Node),
?XMLATTR('status', Status)], children = ?XMLATTR(<<"status">>, Status)], children =
ActionsEls ++ NotesEls ++ Elements}. ActionsEls ++ NotesEls ++ Elements}.

View File

@ -1256,17 +1256,17 @@ handle_info({route, From, To, Packet}, StateName, StateData) ->
?DEBUG("broadcast~n~p~n", [Packet#xmlel.children]), ?DEBUG("broadcast~n~p~n", [Packet#xmlel.children]),
case Packet#xmlel.ns of case Packet#xmlel.ns of
roster_item -> roster_item ->
IJID = exmpp_jid:make(exmpp_xml:get_attribute(Packet, u, <<"">>), IJID = exmpp_jid:make(exmpp_xml:get_attribute(Packet, <<"u">>, <<"">>),
exmpp_xml:get_attribute(Packet, s, <<"">>), exmpp_xml:get_attribute(Packet, <<"s">>, <<"">>),
exmpp_xml:get_attribute(Packet, r, <<"">>)), exmpp_xml:get_attribute(Packet, <<"r">>, <<"">>)),
ISubscription = exmpp_xml:get_attribute(Packet, subs, <<"none">>), ISubscription = exmpp_xml:get_attribute(Packet, <<"subs">>, <<"none">>),
{false, Attrs, {false, Attrs,
roster_change(IJID, ISubscription, StateData)}; roster_change(IJID, ISubscription, StateData)};
exit -> exit ->
Reason = exmpp_xml:get_attribute_as_list(Packet, reason, "Unknown reason"), Reason = exmpp_xml:get_attribute_as_list(Packet, <<"reason">>, "Unknown reason"),
{exit, Attrs, Reason}; {exit, Attrs, Reason};
privacy_list -> privacy_list ->
PrivListName = exmpp_xml:get_attribute_as_list(Packet, list_name, "Unknown list name"), PrivListName = exmpp_xml:get_attribute_as_list(Packet, <<"list_name">>, "Unknown list name"),
CDataString = exmpp_xml:get_cdata_as_list(Packet), CDataString = exmpp_xml:get_cdata_as_list(Packet),
{ok, A2, _} = erl_scan:string(CDataString), {ok, A2, _} = erl_scan:string(CDataString),
{_, W} = erl_parse:parse_exprs(A2), {_, W} = erl_parse:parse_exprs(A2),
@ -1516,22 +1516,22 @@ send_header(StateData, Server, Version, Lang)
VersionAttr = VersionAttr =
case Version of case Version of
"" -> []; "" -> [];
_ -> [{"version", Version}] _ -> [?XMLATTR(<<"version">>, Version)]
end, end,
LangAttr = LangAttr =
case Lang of case Lang of
"" -> []; "" -> [];
_ -> [{"xml:lang", Lang}] _ -> [?XMLATTR(<<"xml:lang">>, Lang)]
end, end,
Header = Header =
{xmlstreamstart, {xmlstreamstart,
"stream:stream", "stream:stream",
VersionAttr ++ VersionAttr ++
LangAttr ++ LangAttr ++
[{"xmlns", "jabber:client"}, [?XMLATTR(<<"xmlns">>, "jabber:client"),
{"xmlns:stream", "http://etherx.jabber.org/streams"}, ?XMLATTR(<<"xmlns:stream">>, "http://etherx.jabber.org/streams"),
{"id", StateData#state.streamid}, ?XMLATTR(<<"id">>, StateData#state.streamid),
{"from", Server}]}, ?XMLATTR(<<"from">>, Server)]},
(StateData#state.sockmod):send_xml( (StateData#state.sockmod):send_xml(
StateData#state.socket, Header); StateData#state.socket, Header);
send_header(StateData, Server, Version, Lang) -> send_header(StateData, Server, Version, Lang) ->

View File

@ -64,10 +64,10 @@
-define(VFIELD(Type, Var, Value), -define(VFIELD(Type, Var, Value),
#xmlel{name = 'field', #xmlel{name = 'field',
attrs = [ attrs = [
#xmlattr{name = 'type', #xmlattr{name = <<"type">>,
value = Type value = Type
}, },
#xmlattr{name = 'var', #xmlattr{name = <<"var">>,
value = Var value = Var
} }
], ],
@ -111,13 +111,13 @@ create_captcha(SID, From, To, Lang, Args)
name = 'data', name = 'data',
ns = ?NS_BOB, ns = ?NS_BOB,
attrs = [ attrs = [
#xmlattr{name = 'cid', #xmlattr{name = <<"cid">>,
value = CID value = CID
}, },
#xmlattr{name = 'max-age', #xmlattr{name = <<"max-age">>,
value = <<"0">> value = <<"0">>
}, },
#xmlattr{name = 'type', #xmlattr{name = <<"type">>,
value = Type value = Type
} }
], ],
@ -142,7 +142,7 @@ create_captcha(SID, From, To, Lang, Args)
#xmlel{name = 'x', #xmlel{name = 'x',
ns = ?NS_DATA_FORMS_s, ns = ?NS_DATA_FORMS_s,
attrs = [ attrs = [
#xmlattr{name = 'type', #xmlattr{name = <<"type">>,
value = <<"form">> value = <<"form">>
} }
], ],
@ -153,10 +153,10 @@ create_captcha(SID, From, To, Lang, Args)
?VFIELD(<<"hidden">>, <<"sid">>, #xmlcdata{cdata = SID}), ?VFIELD(<<"hidden">>, <<"sid">>, #xmlcdata{cdata = SID}),
#xmlel{name = 'field', #xmlel{name = 'field',
attrs = [ attrs = [
#xmlattr{name = 'var', #xmlattr{name = <<"var">>,
value = <<"ocr">> value = <<"ocr">>
}, },
#xmlattr{name = 'label', #xmlattr{name = <<"label">>,
value = ?CAPTCHA_TEXT(Lang) value = ?CAPTCHA_TEXT(Lang)
} }
], ],
@ -167,7 +167,7 @@ create_captcha(SID, From, To, Lang, Args)
children = [ children = [
#xmlel{name = 'uri', #xmlel{name = 'uri',
attrs = [ attrs = [
#xmlattr{name = 'type', #xmlattr{name = <<"type">>,
value = Type value = Type
} }
], ],
@ -229,13 +229,13 @@ create_captcha_x(SID, To, Lang, HeadEls, TailEls) ->
name = 'data', name = 'data',
ns = ?NS_BOB, ns = ?NS_BOB,
attrs = [ attrs = [
#xmlattr{name = 'cid', #xmlattr{name = <<"cid">>,
value = CID value = CID
}, },
#xmlattr{name = 'max-age', #xmlattr{name = <<"max-age">>,
value = <<"0">> value = <<"0">>
}, },
#xmlattr{name = 'type', #xmlattr{name = <<"type">>,
value = Type value = Type
} }
], ],
@ -249,25 +249,25 @@ create_captcha_x(SID, To, Lang, HeadEls, TailEls) ->
#xmlel{name = 'x', #xmlel{name = 'x',
ns = ?NS_DATA_FORMS_s, ns = ?NS_DATA_FORMS_s,
attrs = [ attrs = [
#xmlattr{name = 'type', #xmlattr{name = <<"type">>,
value = <<"form">> value = <<"form">>
} }
], ],
children = [ children = [
?VFIELD(<<"hidden">>, <<"FORM_TYPE">>, #xmlcdata{cdata = ?NS_CAPTCHA_b}) | HeadEls] ++ [ ?VFIELD(<<"hidden">>, <<"FORM_TYPE">>, #xmlcdata{cdata = ?NS_CAPTCHA_b}) | HeadEls] ++ [
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[?XMLATTR('type', <<"fixed">>), ?XMLATTR('label', HelpTxt)]}, [?XMLATTR(<<"type">>, <<"fixed">>), ?XMLATTR(<<"label">>, HelpTxt)]},
?VFIELD(<<"hidden">>, <<"captchahidden">>, #xmlcdata{cdata = <<"workaround-for-psi">>}), ?VFIELD(<<"hidden">>, <<"captchahidden">>, #xmlcdata{cdata = <<"workaround-for-psi">>}),
#xmlel{name = 'field', #xmlel{name = 'field',
attrs = [ attrs = [
#xmlattr{name = 'type', #xmlattr{name = <<"type">>,
value = <<"text-single">> value = <<"text-single">>
}, },
#xmlattr{name = 'label', #xmlattr{name = <<"label">>,
value = list_to_binary(translate:translate(Lang, "CAPTCHA web page")) value = list_to_binary(translate:translate(Lang, "CAPTCHA web page"))
}, },
#xmlattr{name = 'var', #xmlattr{name = <<"var">>,
value = <<"url">> value = <<"url">>
} }
], ],
@ -281,10 +281,10 @@ create_captcha_x(SID, To, Lang, HeadEls, TailEls) ->
?VFIELD(<<"hidden">>, <<"sid">>, #xmlcdata{cdata = SID}), ?VFIELD(<<"hidden">>, <<"sid">>, #xmlcdata{cdata = SID}),
#xmlel{name = 'field', #xmlel{name = 'field',
attrs = [ attrs = [
#xmlattr{name = 'var', #xmlattr{name = <<"var">>,
value = <<"ocr">> value = <<"ocr">>
}, },
#xmlattr{name = 'label', #xmlattr{name = <<"label">>,
value = ?CAPTCHA_TEXT(Lang) value = ?CAPTCHA_TEXT(Lang)
} }
], ],
@ -295,7 +295,7 @@ create_captcha_x(SID, To, Lang, HeadEls, TailEls) ->
children = [ children = [
#xmlel{name = 'uri', #xmlel{name = 'uri',
attrs = [ attrs = [
#xmlattr{name = 'type', #xmlattr{name = <<"type">>,
value = Type value = Type
} }
], ],
@ -329,7 +329,7 @@ build_captcha_html(Id, Lang) ->
ImgEl = ImgEl =
#xmlel{name = 'img', #xmlel{name = 'img',
attrs = [ attrs = [
#xmlattr{name = 'src', #xmlattr{name = <<"src">>,
value = list_to_binary(get_url(Id ++ "/image")) value = list_to_binary(get_url(Id ++ "/image"))
} }
] ]
@ -342,13 +342,13 @@ build_captcha_html(Id, Lang) ->
IdEl = IdEl =
#xmlel{name = 'input', #xmlel{name = 'input',
attrs = [ attrs = [
#xmlattr{name = 'type', #xmlattr{name = <<"type">>,
value = <<"hidden">> value = <<"hidden">>
}, },
#xmlattr{name = 'name', #xmlattr{name = <<"name">>,
value = <<"id">> value = <<"id">>
}, },
#xmlattr{name = 'value', #xmlattr{name = <<"value">>,
value = list_to_binary(Id) value = list_to_binary(Id)
} }
] ]
@ -359,13 +359,13 @@ build_captcha_html(Id, Lang) ->
KeyEl = KeyEl =
#xmlel{name = 'input', #xmlel{name = 'input',
attrs = [ attrs = [
#xmlattr{name = 'type', #xmlattr{name = <<"type">>,
value = <<"text">> value = <<"text">>
}, },
#xmlattr{name = 'name', #xmlattr{name = <<"name">>,
value = <<"key">> value = <<"key">>
}, },
#xmlattr{name = 'size', #xmlattr{name = <<"size">>,
value = <<"10">> value = <<"10">>
} }
] ]
@ -387,13 +387,13 @@ build_captcha_html(Id, Lang) ->
FormEl = FormEl =
#xmlel{name = 'form', #xmlel{name = 'form',
attrs = [ attrs = [
#xmlattr{name = 'action', #xmlattr{name = <<"action">>,
value = list_to_binary(get_url(Id)) value = list_to_binary(get_url(Id))
}, },
#xmlattr{name = 'name', #xmlattr{name = <<"name">>,
value = <<"captcha">> value = <<"captcha">>
}, },
#xmlattr{name = 'method', #xmlattr{name = <<"method">>,
value = <<"POST">> value = <<"POST">>
} }
], ],
@ -410,13 +410,13 @@ build_captcha_html(Id, Lang) ->
}, },
#xmlel{name = 'input', #xmlel{name = 'input',
attrs = [ attrs = [
#xmlattr{name = 'type', #xmlattr{name = <<"type">>,
value = <<"submit">> value = <<"submit">>
}, },
#xmlattr{name = 'name', #xmlattr{name = <<"name">>,
value = <<"enter">> value = <<"enter">>
}, },
#xmlattr{name = 'value', #xmlattr{name = <<"value">>,
value = <<"OK">> value = <<"OK">>
} }
] ]
@ -481,7 +481,7 @@ process(_Handlers, #request{method='GET', lang=Lang, path=[_, Id]}) ->
%[FormEl]}, %[FormEl]},
#xmlel{name = 'div', #xmlel{name = 'div',
attrs = [ attrs = [
#xmlattr{name = 'align', #xmlattr{name = <<"align">>,
value = <<"center">> value = <<"center">>
} }
], ],

View File

@ -123,13 +123,13 @@ process_element(El=#xmlel{name=user, ns=_XMLNS},
State; State;
process_element(H=#xmlel{name=host},State) -> process_element(H=#xmlel{name=host},State) ->
State#parsing_state{host=exmpp_xml:get_attribute(H,"jid",none)}; State#parsing_state{host=exmpp_xml:get_attribute(H,<<"jid">>,none)};
process_element(#xmlel{name='server-data'},State) -> process_element(#xmlel{name='server-data'},State) ->
State; State;
process_element(El=#xmlel{name=include, ns=?NS_XINCLUDE}, State=#parsing_state{dir=Dir}) -> process_element(El=#xmlel{name=include, ns=?NS_XINCLUDE}, State=#parsing_state{dir=Dir}) ->
case exmpp_xml:get_attribute(El, href, none) of case exmpp_xml:get_attribute(El, <<"href">>, none) of
none -> none ->
ok; ok;
HrefB -> HrefB ->
@ -158,8 +158,8 @@ process_element(El,State) ->
%%%% Add user %%%% Add user
add_user(El, Domain) -> add_user(El, Domain) ->
User = exmpp_xml:get_attribute(El,name,none), User = exmpp_xml:get_attribute(El,<<"name">>,none),
Password = exmpp_xml:get_attribute(El,password,none), Password = exmpp_xml:get_attribute(El,<<"password">>,none),
add_user(El, Domain, User, Password). add_user(El, Domain, User, Password).
%% @spec (El::xmlel(), Domain::string(), User::string(), Password::string()) %% @spec (El::xmlel(), Domain::string(), User::string(), Password::string())
@ -301,7 +301,7 @@ populate_user(User,Domain,El=#xmlel{name='offline-messages'}) ->
fun (_Element, {xmlcdata, _}) -> fun (_Element, {xmlcdata, _}) ->
ok; ok;
(_Element, Child) -> (_Element, Child) ->
From = exmpp_xml:get_attribute(Child,from,none), From = exmpp_xml:get_attribute(Child,<<"from">>,none),
FullFrom = exmpp_jid:parse(From), FullFrom = exmpp_jid:parse(From),
FullUser = exmpp_jid:make(User, Domain), FullUser = exmpp_jid:make(User, Domain),
_R = M:store_packet(FullFrom, FullUser, Child) _R = M:store_packet(FullFrom, FullUser, Child)
@ -558,7 +558,7 @@ mnesia_pop_offline_messages(Ls, User, Server) ->
fun(R) -> fun(R) ->
[Packet] = exmpp_xml:parse_document(R#offline_msg.packet, [names_as_atom]), [Packet] = exmpp_xml:parse_document(R#offline_msg.packet, [names_as_atom]),
FromString = exmpp_jid:prep_to_list(R#offline_msg.from), FromString = exmpp_jid:prep_to_list(R#offline_msg.from),
Packet2 = exmpp_xml:set_attribute(Packet, "from", FromString), Packet2 = exmpp_xml:set_attribute(Packet, <<"from">>, FromString),
Packet3 = Packet2#xmlel{ns = ?NS_JABBER_CLIENT}, Packet3 = Packet2#xmlel{ns = ?NS_JABBER_CLIENT},
exmpp_xml:append_children( exmpp_xml:append_children(
Packet3, Packet3,

View File

@ -443,7 +443,6 @@ new_xmlstream(C2SPid, MaxStanzaSize) ->
Parser = exmpp_xml:start_parser([{names_as_atom, true}, Parser = exmpp_xml:start_parser([{names_as_atom, true},
{check_nss, xmpp}, {check_nss, xmpp},
{check_elems, xmpp}, {check_elems, xmpp},
{check_attrs, xmpp},
{max_size, MaxStanzaSize} {max_size, MaxStanzaSize}
]), ]),
exmpp_xmlstream:start({gen_fsm, C2SPid}, Parser, exmpp_xmlstream:start({gen_fsm, C2SPid}, Parser,

View File

@ -370,9 +370,9 @@ code_change(_OldVsn, State, _Extra) ->
%%% Internal functions %%% Internal functions
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
route_check_id(From, To, #xmlel{name = iq} = Packet) -> route_check_id(From, To, #xmlel{name = iq} = Packet) ->
case exmpp_xml:get_attribute_as_list(Packet, 'id', "") of case exmpp_xml:get_attribute_as_list(Packet, <<"id">>, "") of
?ROUTE_PREFIX ++ Rest -> ?ROUTE_PREFIX ++ Rest ->
Type = exmpp_xml:get_attribute_as_list(Packet, 'type', ""), Type = exmpp_xml:get_attribute_as_list(Packet, <<"type">>, ""),
if Type == "error"; Type == "result" -> if Type == "error"; Type == "result" ->
case string:tokens(Rest, "-") of case string:tokens(Rest, "-") of
[_, NodeID] -> [_, NodeID] ->

View File

@ -155,7 +155,7 @@ disconnect_removed_user(User, Server) ->
exmpp_jid:make(User, exmpp_jid:make(User,
Server), Server),
#xmlel{name = 'broadcast', ns = exit, #xmlel{name = 'broadcast', ns = exit,
attrs = [exmpp_xml:attribute(reason, "User removed")]}). attrs = [?XMLATTR(<<"reason">>, <<"User removed">>)]}).
get_user_resources(User, Server) get_user_resources(User, Server)
when is_binary(User), is_binary(Server) -> when is_binary(User), is_binary(Server) ->

View File

@ -127,7 +127,7 @@ xdb_data(User, Server, #xmlel{ns = NS} = El) ->
catch mod_roster:set_items(UserB, ServerB, El), catch mod_roster:set_items(UserB, ServerB, El),
ok; ok;
?NS_LAST_ACTIVITY -> ?NS_LAST_ACTIVITY ->
TimeStamp = exmpp_xml:get_attribute_as_list(El, 'last', ""), TimeStamp = exmpp_xml:get_attribute_as_list(El, <<"last">>, ""),
Status = exmpp_xml:get_cdata(El), Status = exmpp_xml:get_cdata(El),
catch mod_last:store_last_info( catch mod_last:store_last_info(
UserB, UserB,
@ -145,7 +145,7 @@ xdb_data(User, Server, #xmlel{ns = NS} = El) ->
process_offline(Server, From, El), process_offline(Server, From, El),
ok; ok;
XMLNS -> XMLNS ->
case exmpp_xml:get_attribute_as_list(El, "j_private_flag", "") of case exmpp_xml:get_attribute_as_list(El, <<"j_private_flag">>, "") of
"1" -> "1" ->
catch mod_private:process_sm_iq( catch mod_private:process_sm_iq(
From, From,

View File

@ -57,7 +57,7 @@
%% R = binary(). %% R = binary().
parse_xdata_submit(#xmlel{attrs = Attrs, children = Els}) -> parse_xdata_submit(#xmlel{attrs = Attrs, children = Els}) ->
case exmpp_xml:get_attribute_from_list_as_list(Attrs, 'type', "") of case exmpp_xml:get_attribute_from_list_as_list(Attrs, <<"type">>, "") of
"submit" -> "submit" ->
lists:reverse(parse_xdata_fields(Els, [])); lists:reverse(parse_xdata_fields(Els, []));
"form" -> %% This is a workaround to accept Psi's wrong forms "form" -> %% This is a workaround to accept Psi's wrong forms
@ -70,7 +70,7 @@ parse_xdata_fields([], Res) ->
Res; Res;
parse_xdata_fields([#xmlel{name = 'field', attrs = Attrs, children = SubEls} | parse_xdata_fields([#xmlel{name = 'field', attrs = Attrs, children = SubEls} |
Els], Res) -> Els], Res) ->
case exmpp_xml:get_attribute_from_list_as_list(Attrs, 'var', "") of case exmpp_xml:get_attribute_from_list_as_list(Attrs, <<"var">>, "") of
"" -> "" ->
parse_xdata_fields(Els, Res); parse_xdata_fields(Els, Res);
Var -> Var ->
@ -140,7 +140,7 @@ rsm_encode_first(undefined, undefined, Arr) ->
rsm_encode_first(First, undefined, Arr) -> rsm_encode_first(First, undefined, Arr) ->
[#xmlel{ns = ?NS_RSM, name = 'first', children = [#xmlcdata{cdata = list_to_binary(First)}]}|Arr]; [#xmlel{ns = ?NS_RSM, name = 'first', children = [#xmlcdata{cdata = list_to_binary(First)}]}|Arr];
rsm_encode_first(First, Index, Arr) -> rsm_encode_first(First, Index, Arr) ->
[#xmlel{ns = ?NS_RSM, name = 'first', attrs = [?XMLATTR('index', Index)], children = [#xmlcdata{cdata = list_to_binary(First)}]}|Arr]. [#xmlel{ns = ?NS_RSM, name = 'first', attrs = [?XMLATTR(<<"index">>, Index)], children = [#xmlcdata{cdata = list_to_binary(First)}]}|Arr].
rsm_encode_last(undefined, Arr) -> Arr; rsm_encode_last(undefined, Arr) -> Arr;
rsm_encode_last(Last, Arr) -> rsm_encode_last(Last, Arr) ->
@ -182,8 +182,8 @@ timestamp_to_xml(DateTime, Timezone, FromJID, Desc) ->
{T_string, Tz_string} = timestamp_to_iso(DateTime, Timezone), {T_string, Tz_string} = timestamp_to_iso(DateTime, Timezone),
From = exmpp_jid:to_list(FromJID), From = exmpp_jid:to_list(FromJID),
P1 = exmpp_xml:set_attributes(#xmlel{ns = ?NS_DELAY, name = 'delay'}, P1 = exmpp_xml:set_attributes(#xmlel{ns = ?NS_DELAY, name = 'delay'},
[{'from', From}, [{<<"from">>, From},
{'stamp', T_string ++ Tz_string}]), {<<"stamp">>, T_string ++ Tz_string}]),
exmpp_xml:set_cdata(P1, Desc). exmpp_xml:set_cdata(P1, Desc).
%% TODO: Remove this function once XEP-0091 is Obsolete %% TODO: Remove this function once XEP-0091 is Obsolete
@ -192,7 +192,7 @@ timestamp_to_xml({{Year, Month, Day}, {Hour, Minute, Second}}) ->
io_lib:format("~4..0w~2..0w~2..0wT~2..0w:~2..0w:~2..0w", io_lib:format("~4..0w~2..0w~2..0wT~2..0w:~2..0w:~2..0w",
[Year, Month, Day, Hour, Minute, Second])), [Year, Month, Day, Hour, Minute, Second])),
exmpp_xml:set_attribute(#xmlel{ns = ?NS_DELAY_OLD, name = 'x'}, exmpp_xml:set_attribute(#xmlel{ns = ?NS_DELAY_OLD, name = 'x'},
'stamp', Timestamp). <<"stamp">>, Timestamp).
now_to_utc_string({MegaSecs, Secs, MicroSecs}) -> now_to_utc_string({MegaSecs, Secs, MicroSecs}) ->
{{Year, Month, Day}, {Hour, Minute, Second}} = {{Year, Month, Day}, {Hour, Minute, Second}} =

View File

@ -95,9 +95,9 @@ get_local_commands(Acc, _From, To, <<>>, Lang) ->
end, end,
Nodes = [#xmlel{ns = ?NS_DISCO_ITEMS, Nodes = [#xmlel{ns = ?NS_DISCO_ITEMS,
name = 'item', attrs = name = 'item', attrs =
[?XMLATTR('jid', Server), [?XMLATTR(<<"jid">>, Server),
?XMLATTR('node', ?NS_ADHOC_s), ?XMLATTR(<<"node">>, ?NS_ADHOC_s),
?XMLATTR('name', translate:translate(Lang, "Commands"))] ?XMLATTR(<<"name">>, translate:translate(Lang, "Commands"))]
}], }],
{result, Items ++ Nodes} {result, Items ++ Nodes}
end; end;
@ -126,9 +126,9 @@ get_sm_commands(Acc, _From, To, <<>>, Lang) ->
end, end,
Nodes = [#xmlel{ns = ?NS_DISCO_ITEMS, Nodes = [#xmlel{ns = ?NS_DISCO_ITEMS,
name = 'item', attrs = name = 'item', attrs =
[?XMLATTR('jid', exmpp_jid:to_binary(To)), [?XMLATTR(<<"jid">>, exmpp_jid:to_binary(To)),
?XMLATTR('node', ?NS_ADHOC_s), ?XMLATTR(<<"node">>, ?NS_ADHOC_s),
?XMLATTR('name', translate:translate(Lang, "Commands"))] ?XMLATTR(<<"name">>, translate:translate(Lang, "Commands"))]
}], }],
{result, Items ++ Nodes} {result, Items ++ Nodes}
end; end;
@ -144,15 +144,15 @@ get_sm_commands(Acc, _From, _To, _Node, _Lang) ->
%% On disco info request to the ad-hoc node, return automation/command-list. %% On disco info request to the ad-hoc node, return automation/command-list.
get_local_identity(Acc, _From, _To, ?NS_ADHOC_b, Lang) -> get_local_identity(Acc, _From, _To, ?NS_ADHOC_b, Lang) ->
[#xmlel{ns = ?NS_DISCO_INFO, name = 'identity', attrs = [#xmlel{ns = ?NS_DISCO_INFO, name = 'identity', attrs =
[?XMLATTR('category', <<"automation">>), [?XMLATTR(<<"category">>, <<"automation">>),
?XMLATTR('type', <<"command-list">>), ?XMLATTR(<<"type">>, <<"command-list">>),
?XMLATTR('name', translate:translate(Lang, "Commands"))]} | Acc]; ?XMLATTR(<<"name">>, 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 = [#xmlel{ns = ?NS_DISCO_INFO, name = 'identity', attrs =
[?XMLATTR('category', <<"automation">>), [?XMLATTR(<<"category">>, <<"automation">>),
?XMLATTR('type', <<"command-node">>), ?XMLATTR(<<"type">>, <<"command-node">>),
?XMLATTR('name', translate:translate(Lang, "Ping"))]} | Acc]; ?XMLATTR(<<"name">>, translate:translate(Lang, "Ping"))]} | Acc];
get_local_identity(Acc, _From, _To, _Node, _Lang) -> get_local_identity(Acc, _From, _To, _Node, _Lang) ->
Acc. Acc.
@ -162,9 +162,9 @@ get_local_identity(Acc, _From, _To, _Node, _Lang) ->
%% On disco info request to the ad-hoc node, return automation/command-list. %% On disco info request to the ad-hoc node, return automation/command-list.
get_sm_identity(Acc, _From, _To, ?NS_ADHOC_s, Lang) -> get_sm_identity(Acc, _From, _To, ?NS_ADHOC_s, Lang) ->
[#xmlel{ns = ?NS_DISCO_INFO, name = 'identity', attrs = [#xmlel{ns = ?NS_DISCO_INFO, name = 'identity', attrs =
[?XMLATTR('category', <<"automation">>), [?XMLATTR(<<"category">>, <<"automation">>),
?XMLATTR('type', <<"command-list">>), ?XMLATTR(<<"type">>, <<"command-list">>),
?XMLATTR('name', translate:translate(Lang, "Commands"))]} | Acc]; ?XMLATTR(<<"name">>, translate:translate(Lang, "Commands"))]} | Acc];
get_sm_identity(Acc, _From, _To, _Node, _Lang) -> get_sm_identity(Acc, _From, _To, _Node, _Lang) ->
Acc. Acc.
@ -244,9 +244,9 @@ ping_item(Acc, _From, To, Lang) ->
[] []
end, end,
Nodes = [#xmlel{ns = ?NS_DISCO_INFO, name = 'item', attrs = Nodes = [#xmlel{ns = ?NS_DISCO_INFO, name = 'item', attrs =
[?XMLATTR('jid', Server), [?XMLATTR(<<"jid">>, Server),
?XMLATTR('node', <<"ping">>), ?XMLATTR(<<"node">>, <<"ping">>),
?XMLATTR('name', translate:translate(Lang, "Ping"))]}], ?XMLATTR(<<"name">>, translate:translate(Lang, "Ping"))]}],
{result, Items ++ Nodes}. {result, Items ++ Nodes}.

View File

@ -178,9 +178,9 @@ announce(From, To, Packet) ->
%% Announcing via ad-hoc commands %% Announcing via ad-hoc commands
-define(INFO_COMMAND(Lang, Node), -define(INFO_COMMAND(Lang, Node),
[#xmlel{ns = ?NS_DISCO_INFO, name = 'identity', attrs = [#xmlel{ns = ?NS_DISCO_INFO, name = 'identity', attrs =
[?XMLATTR('category', <<"automation">>), [?XMLATTR(<<"category">>, <<"automation">>),
?XMLATTR('type', <<"command-node">>), ?XMLATTR(<<"type">>, <<"command-node">>),
?XMLATTR('name', get_title(Lang, Node))]}]). ?XMLATTR(<<"name">>, get_title(Lang, Node))]}]).
disco_identity(Acc, _From, _To, Node, Lang) -> disco_identity(Acc, _From, _To, Node, Lang) ->
LNode = tokenize(binary_to_list(Node)), LNode = tokenize(binary_to_list(Node)),
@ -276,9 +276,9 @@ disco_features(Acc, From, To, Node, _Lang) ->
-define(NODE_TO_ITEM(Lang, Server, Node), -define(NODE_TO_ITEM(Lang, Server, Node),
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs = #xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
[?XMLATTR('jid', Server), [?XMLATTR(<<"jid">>, Server),
?XMLATTR('node', Node), ?XMLATTR(<<"node">>, Node),
?XMLATTR('name', get_title(Lang, Node))]}). ?XMLATTR(<<"name">>, get_title(Lang, Node))]}).
-define(ITEMS_RESULT(Allow, Items), -define(ITEMS_RESULT(Allow, Items),
case Allow of case Allow of
@ -487,8 +487,8 @@ announce_commands(From, To,
_ -> [?VVALUE(Val)] _ -> [?VVALUE(Val)]
end). end).
-define(TVFIELD(Type, Var, Val), -define(TVFIELD(Type, Var, Val),
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [?XMLATTR('type', Type), #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [?XMLATTR(<<"type">>, Type),
?XMLATTR('var', Var)], children = ?XMLATTR(<<"var">>, Var)], children =
?VVALUEL(Val)}). ?VVALUEL(Val)}).
-define(HFIELD(), ?TVFIELD(<<"hidden">>, <<"FORM_TYPE">>, list_to_binary(?NS_ADMIN_s))). -define(HFIELD(), ?TVFIELD(<<"hidden">>, <<"FORM_TYPE">>, list_to_binary(?NS_ADMIN_s))).
@ -501,28 +501,28 @@ generate_adhoc_form(Lang, Node, ServerHost) ->
{[], []} {[], []}
end, end,
#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs =
[?XMLATTR('type', <<"form">>)], children = [?XMLATTR(<<"type">>, <<"form">>)], children =
[?HFIELD(), [?HFIELD(),
#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children = [#xmlcdata{cdata = list_to_binary(get_title(Lang, Node))}]}] #xmlel{ns = ?NS_DATA_FORMS, name = 'title', children = [#xmlcdata{cdata = list_to_binary(get_title(Lang, Node))}]}]
++ ++
if (LNode == ?NS_ADMINL("delete-motd")) if (LNode == ?NS_ADMINL("delete-motd"))
or (LNode == ?NS_ADMINL("delete-motd-allhosts")) -> or (LNode == ?NS_ADMINL("delete-motd-allhosts")) ->
[#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[?XMLATTR('var', <<"confirm">>), [?XMLATTR(<<"var">>, <<"confirm">>),
?XMLATTR('type', <<"boolean">>), ?XMLATTR(<<"type">>, <<"boolean">>),
?XMLATTR('label', translate:translate(Lang, "Really delete message of the day?"))], children = ?XMLATTR(<<"label">>, translate:translate(Lang, "Really delete message of the day?"))], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children =
[#xmlcdata{cdata = <<"true">>}]}]}]; [#xmlcdata{cdata = <<"true">>}]}]}];
true -> true ->
[#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[?XMLATTR('var', <<"subject">>), [?XMLATTR(<<"var">>, <<"subject">>),
?XMLATTR('type', <<"text-single">>), ?XMLATTR(<<"type">>, <<"text-single">>),
?XMLATTR('label', translate:translate(Lang, "Subject"))], children = ?XMLATTR(<<"label">>, translate:translate(Lang, "Subject"))], children =
?VVALUEL(list_to_binary(OldSubject))}, ?VVALUEL(list_to_binary(OldSubject))},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[?XMLATTR('var', <<"body">>), [?XMLATTR(<<"var">>, <<"body">>),
?XMLATTR('type', <<"text-multi">>), ?XMLATTR(<<"type">>, <<"text-multi">>),
?XMLATTR('label', translate:translate(Lang, "Message body"))], children = ?XMLATTR(<<"label">>, translate:translate(Lang, "Message body"))], children =
?VVALUEL(list_to_binary(OldBody))}] ?VVALUEL(list_to_binary(OldBody))}]
end}. end}.
@ -568,7 +568,7 @@ handle_adhoc_form(From, To,
node = Node, node = Node,
sessionid = SessionID, sessionid = SessionID,
status = completed}, status = completed},
Packet = #xmlel{ns = ?NS_JABBER_CLIENT, name = 'message', attrs = [?XMLATTR('type', <<"normal">>)], children = Packet = #xmlel{ns = ?NS_JABBER_CLIENT, name = 'message', attrs = [?XMLATTR(<<"type">>, <<"normal">>)], children =
if Subject /= [] -> if Subject /= [] ->
[#xmlel{ns = ?NS_JABBER_CLIENT, name = 'subject', children = [#xmlel{ns = ?NS_JABBER_CLIENT, name = 'subject', children =
[#xmlcdata{cdata = list_to_binary(Subject)}]}]; [#xmlcdata{cdata = list_to_binary(Subject)}]}];
@ -870,7 +870,7 @@ send_announcement_to_all(Host, SubjectS, BodyS) ->
true -> true ->
[] []
end, end,
Packet = #xmlel{ns = ?NS_JABBER_CLIENT, name = 'message', attrs = [?XMLATTR('type', <<"normal">>)], children = SubjectEls ++ BodyEls}, Packet = #xmlel{ns = ?NS_JABBER_CLIENT, name = 'message', attrs = [?XMLATTR(<<"type">>, <<"normal">>)], children = SubjectEls ++ BodyEls},
Sessions = ejabberd_sm:dirty_get_sessions_list(), Sessions = ejabberd_sm:dirty_get_sessions_list(),
Local = exmpp_jid:make(Host), Local = exmpp_jid:make(Host),
lists:foreach( lists:foreach(

View File

@ -116,9 +116,9 @@ get_features(#caps{node = Node, version = Version, exts = Exts}) ->
read_caps(Els) -> read_caps(Els) ->
read_caps(Els, nothing). read_caps(Els, nothing).
read_caps([#xmlel{ns = ?NS_CAPS, name = 'c'} = El | Tail], _Result) -> read_caps([#xmlel{ns = ?NS_CAPS, name = 'c'} = El | Tail], _Result) ->
Node = exmpp_xml:get_attribute_as_list(El, 'node', ""), Node = exmpp_xml:get_attribute_as_list(El, <<"node">>, ""),
Version = exmpp_xml:get_attribute_as_list(El, 'ver', ""), Version = exmpp_xml:get_attribute_as_list(El, <<"ver">>, ""),
Exts = string:tokens(exmpp_xml:get_attribute_as_list(El, 'ext', ""), " "), Exts = string:tokens(exmpp_xml:get_attribute_as_list(El, <<"ext">>, ""), " "),
read_caps(Tail, #caps{node = Node, version = Version, exts = Exts}); read_caps(Tail, #caps{node = Node, version = Version, exts = Exts});
read_caps([#xmlel{ns = ?NS_MUC_USER, name = 'x'} | _Tail], _Result) -> read_caps([#xmlel{ns = ?NS_MUC_USER, name = 'x'} | _Tail], _Result) ->
nothing; nothing;
@ -133,7 +133,7 @@ read_caps([], Result) ->
user_send_packet(From, To, #xmlel{name = 'presence', attrs = Attrs, children = Els}) -> user_send_packet(From, To, #xmlel{name = 'presence', attrs = Attrs, children = Els}) ->
case exmpp_jid:bare_compare(From, To) of case exmpp_jid:bare_compare(From, To) of
true -> true ->
Type = exmpp_xml:get_attribute_from_list_as_list(Attrs, 'type', ""), Type = exmpp_xml:get_attribute_from_list_as_list(Attrs, <<"type">>, ""),
if Type == ""; Type == "available" -> if Type == ""; Type == "available" ->
case read_caps(Els) of case read_caps(Els) of
nothing -> nothing ->
@ -158,9 +158,9 @@ caps_stream_features(Acc, MyHost) ->
Hash -> Hash ->
[#xmlel{name = c, [#xmlel{name = c,
ns = ?NS_CAPS, ns = ?NS_CAPS,
attrs = [?XMLATTR(hash, "sha-1"), attrs = [?XMLATTR(<<"hash">>, "sha-1"),
?XMLATTR(node, ?EJABBERD_URI), ?XMLATTR(<<"node">>, ?EJABBERD_URI),
?XMLATTR(ver, Hash)]} | Acc] ?XMLATTR(<<"ver">>, Hash)]} | Acc]
end. end.
disco_features(_Acc, From, To, <<?EJABBERD_URI, $#, _/binary>>, Lang) -> disco_features(_Acc, From, To, <<?EJABBERD_URI, $#, _/binary>>, Lang) ->
@ -262,7 +262,7 @@ feature_request(Host, From, Caps, [SubNode | Tail] = SubNodes) ->
IQ = #iq{type = get, IQ = #iq{type = get,
iq_ns = ?NS_JABBER_CLIENT, iq_ns = ?NS_JABBER_CLIENT,
payload = #xmlel{ns = ?NS_DISCO_INFO, name = 'query', payload = #xmlel{ns = ?NS_DISCO_INFO, name = 'query',
attrs = [?XMLATTR('node', Node ++ "#" ++ SubNode)]}}, attrs = [?XMLATTR(<<"node">>, Node ++ "#" ++ SubNode)]}},
F = fun(IQReply) -> F = fun(IQReply) ->
feature_response( feature_response(
IQReply, Host, From, Caps, SubNodes) IQReply, Host, From, Caps, SubNodes)
@ -279,7 +279,7 @@ feature_response(#iq{type = result, payload = El},
Host, From, Caps, [SubNode | SubNodes]) -> Host, From, Caps, [SubNode | SubNodes]) ->
Features = lists:flatmap( Features = lists:flatmap(
fun(#xmlel{name = 'feature', attrs = FAttrs}) -> fun(#xmlel{name = 'feature', attrs = FAttrs}) ->
[exmpp_xml:get_attribute_from_list_as_list(FAttrs, 'var', "")]; [exmpp_xml:get_attribute_from_list_as_list(FAttrs, <<"var">>, "")];
(_) -> (_) ->
[] []
end, El#xmlel.children), end, El#xmlel.children),
@ -340,10 +340,10 @@ make_my_disco_hash(Host) ->
Feats = lists:map( Feats = lists:map(
fun({{Feat, _Host}}) -> fun({{Feat, _Host}}) ->
#xmlel{name = feature, #xmlel{name = feature,
attrs = [?XMLATTR(var, Feat)]}; attrs = [?XMLATTR(<<"var">>, Feat)]};
(Feat) -> (Feat) ->
#xmlel{name = feature, #xmlel{name = feature,
attrs = [?XMLATTR(var, Feat)]} attrs = [?XMLATTR(<<"var">>, Feat)]}
end, Features), end, Features),
make_disco_hash(Identities ++ Info ++ Feats, sha1); make_disco_hash(Identities ++ Info ++ Feats, sha1);
_Err -> _Err ->
@ -360,7 +360,7 @@ concat_features(Els) ->
lists:usort( lists:usort(
lists:flatmap( lists:flatmap(
fun(#xmlel{name = feature} = El) -> fun(#xmlel{name = feature} = El) ->
[[exmpp_xml:get_attribute(El, var, <<>>), $<]]; [[exmpp_xml:get_attribute(El, <<"var">>, <<>>), $<]];
(_) -> (_) ->
[] []
end, Els)). end, Els)).
@ -369,10 +369,10 @@ concat_identities(Els) ->
lists:sort( lists:sort(
lists:flatmap( lists:flatmap(
fun(#xmlel{name = identity} = El) -> fun(#xmlel{name = identity} = El) ->
[[exmpp_xml:get_attribute_as_binary(El, category, <<>>), $/, [[exmpp_xml:get_attribute_as_binary(El, <<"category">>, <<>>), $/,
exmpp_xml:get_attribute_as_binary(El, type, <<>>), $/, exmpp_xml:get_attribute_as_binary(El, <<"type">>, <<>>), $/,
exmpp_xml:get_attribute_as_binary(El, lang, <<>>), $/, exmpp_xml:get_attribute_as_binary(El, <<"lang">>, <<>>), $/,
exmpp_xml:get_attribute_as_binary(El, name, <<>>), $<]]; exmpp_xml:get_attribute_as_binary(El, <<"name">>, <<>>), $<]];
(_) -> (_) ->
[] []
end, Els)). end, Els)).
@ -381,7 +381,7 @@ concat_info(Els) ->
lists:sort( lists:sort(
lists:flatmap( lists:flatmap(
fun(#xmlel{name = x, ns = ?NS_DATA_FORMS, children = Fields} = El) -> fun(#xmlel{name = x, ns = ?NS_DATA_FORMS, children = Fields} = El) ->
case exmpp_xml:get_attribute_as_list(El, 'type', "") of case exmpp_xml:get_attribute_as_list(El, <<"type">>, "") of
"result" -> "result" ->
[concat_xdata_fields(Fields)]; [concat_xdata_fields(Fields)];
_ -> _ ->
@ -396,7 +396,7 @@ concat_xdata_fields(Fields) ->
lists:foldl( lists:foldl(
fun(#xmlel{name = field, children = Els} = El, fun(#xmlel{name = field, children = Els} = El,
[FormType, VarFields] = Acc) -> [FormType, VarFields] = Acc) ->
case exmpp_xml:get_attribute_as_binary(El, var, <<>>) of case exmpp_xml:get_attribute_as_binary(El, <<"var">>, <<>>) of
<<>> -> <<>> ->
Acc; Acc;
<<"FORM_TYPE">> -> <<"FORM_TYPE">> ->

View File

@ -89,24 +89,24 @@ stop(Host) ->
-define(INFO_IDENTITY(Category, Type, Name, Lang), -define(INFO_IDENTITY(Category, Type, Name, Lang),
[#xmlel{ns = ?NS_DISCO_INFO, name = 'identity', attrs = [#xmlel{ns = ?NS_DISCO_INFO, name = 'identity', attrs =
[?XMLATTR('category', Category), [?XMLATTR(<<"category">>, Category),
?XMLATTR('type', Type), ?XMLATTR(<<"type">>, Type),
?XMLATTR('name', ?T(Lang, Name))]}]). ?XMLATTR(<<"name">>, ?T(Lang, Name))]}]).
-define(INFO_COMMAND(Name, Lang), -define(INFO_COMMAND(Name, Lang),
?INFO_IDENTITY(<<"automation">>, <<"command-node">>, Name, Lang)). ?INFO_IDENTITY(<<"automation">>, <<"command-node">>, Name, Lang)).
-define(NODEJID(To, Name, Node), -define(NODEJID(To, Name, Node),
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs = #xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
[?XMLATTR('jid', exmpp_jid:to_binary(To)), [?XMLATTR(<<"jid">>, exmpp_jid:to_binary(To)),
?XMLATTR('name', ?T(Lang, Name)), ?XMLATTR(<<"name">>, ?T(Lang, Name)),
?XMLATTR('node', Node)]}). ?XMLATTR(<<"node">>, Node)]}).
-define(NODE(Name, Node), -define(NODE(Name, Node),
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs = #xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
[?XMLATTR('jid', Server), [?XMLATTR(<<"jid">>, Server),
?XMLATTR('name', ?T(Lang, Name)), ?XMLATTR(<<"name">>, ?T(Lang, Name)),
?XMLATTR('node', Node)]}). ?XMLATTR(<<"node">>, Node)]}).
-define(NS_ADMINX(Sub), <<?NS_ADMIN_s,"#", Sub/binary>>). -define(NS_ADMINX(Sub), <<?NS_ADMIN_s,"#", Sub/binary>>).
-define(NS_ADMINL(Sub), ["http:","jabber.org","protocol","admin", Sub]). -define(NS_ADMINL(Sub), ["http:","jabber.org","protocol","admin", Sub]).
@ -277,9 +277,9 @@ adhoc_sm_items(Acc, From, To, Lang) ->
empty -> [] empty -> []
end, end,
Nodes = [#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs = Nodes = [#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
[?XMLATTR('jid', exmpp_jid:to_binary(To)), [?XMLATTR(<<"jid">>, exmpp_jid:to_binary(To)),
?XMLATTR('name', ?T(Lang, "Configuration")), ?XMLATTR(<<"name">>, ?T(Lang, "Configuration")),
?XMLATTR('node', <<"config">>)]}], ?XMLATTR(<<"node">>, <<"config">>)]}],
{result, Items ++ Nodes}; {result, Items ++ Nodes};
_ -> _ ->
Acc Acc
@ -316,10 +316,10 @@ get_user_resources(BareJID) ->
exmpp_jid:prep_domain(BareJID)), exmpp_jid:prep_domain(BareJID)),
lists:map(fun(R) -> lists:map(fun(R) ->
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs = #xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
[?XMLATTR('jid', [?XMLATTR(<<"jid">>,
exmpp_jid:to_binary( exmpp_jid:to_binary(
exmpp_jid:full(BareJID, R))), exmpp_jid:full(BareJID, R))),
?XMLATTR('name', ?XMLATTR(<<"name">>,
exmpp_jid:prep_node(BareJID))]} exmpp_jid:prep_node(BareJID))]}
end, lists:sort(Rs)). end, lists:sort(Rs)).
@ -339,7 +339,7 @@ adhoc_local_items(Acc, From, To, Lang) ->
Lang), Lang),
Nodes1 = lists:filter( Nodes1 = lists:filter(
fun(N) -> fun(N) ->
Nd = exmpp_xml:get_attribute_as_binary(N, 'node', ""), Nd = exmpp_xml:get_attribute_as_binary(N, <<"node">>, ""),
F = get_local_features([], From, To, Nd, Lang), F = get_local_features([], From, To, Nd, Lang),
case F of case F of
{result, [?NS_ADHOC_s]} -> {result, [?NS_ADHOC_s]} ->
@ -370,8 +370,8 @@ recursively_get_local_items(PermLev, LServer, Node, Server, Lang) ->
Nodes = lists:flatten( Nodes = lists:flatten(
lists:map( lists:map(
fun(N) -> fun(N) ->
S = exmpp_xml:get_attribute_as_list(N, 'jid', ""), S = exmpp_xml:get_attribute_as_list(N, <<"jid">>, ""),
Nd = exmpp_xml:get_attribute_as_list(N, 'node', ""), Nd = exmpp_xml:get_attribute_as_list(N, <<"node">>, ""),
if (S /= Server) or (Nd == "") -> if (S /= Server) or (Nd == "") ->
[]; [];
true -> true ->
@ -560,8 +560,8 @@ get_local_items({_, Host}, ["all users", [$@ | Diap]], _Server, _Lang) ->
Sub = lists:sublist(SUsers, N1, N2 - N1 + 1), Sub = lists:sublist(SUsers, N1, N2 - N1 + 1),
lists:map(fun({S, U}) -> lists:map(fun({S, U}) ->
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs = #xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
[?XMLATTR('jid', exmpp_jid:to_binary(U, S)), [?XMLATTR(<<"jid">>, exmpp_jid:to_binary(U, S)),
?XMLATTR('name', exmpp_jid:to_binary(U, S))]} ?XMLATTR(<<"name">>, exmpp_jid:to_binary(U, S))]}
end, Sub) end, Sub)
end of end of
{'EXIT', _Reason} -> {'EXIT', _Reason} ->
@ -653,8 +653,8 @@ get_online_vh_users(Host) ->
SURs = lists:sort([{S, U, R} || {U, S, R} <- USRs]), SURs = lists:sort([{S, U, R} || {U, S, R} <- USRs]),
lists:map(fun({S, U, R}) -> lists:map(fun({S, U, R}) ->
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs = #xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
[?XMLATTR('jid', exmpp_jid:to_binary(U, S, R)), [?XMLATTR(<<"jid">>, exmpp_jid:to_binary(U, S, R)),
?XMLATTR('name', exmpp_jid:to_binary(U, S))]} ?XMLATTR(<<"name">>, exmpp_jid:to_binary(U, S))]}
end, SURs) end, SURs)
end. end.
@ -668,8 +668,8 @@ get_all_vh_users(Host) ->
N when N =< 100 -> N when N =< 100 ->
lists:map(fun({S, U}) -> lists:map(fun({S, U}) ->
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs = #xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
[?XMLATTR('jid', exmpp_jid:to_binary(U, S)), [?XMLATTR(<<"jid">>, exmpp_jid:to_binary(U, S)),
?XMLATTR('name', exmpp_jid:to_binary(U, S))]} ?XMLATTR(<<"name">>, exmpp_jid:to_binary(U, S))]}
end, SUsers); end, SUsers);
N -> N ->
NParts = trunc(math:sqrt(N * 0.618)) + 1, NParts = trunc(math:sqrt(N * 0.618)) + 1,
@ -688,9 +688,9 @@ get_all_vh_users(Host) ->
<<(list_to_binary(FU))/binary, "@", (list_to_binary(FS))/binary, <<(list_to_binary(FU))/binary, "@", (list_to_binary(FS))/binary,
" -- ", (list_to_binary(LU))/binary, "@", (list_to_binary(LS))/binary>>, " -- ", (list_to_binary(LU))/binary, "@", (list_to_binary(LS))/binary>>,
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs = #xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
[?XMLATTR('jid', Host), [?XMLATTR(<<"jid">>, Host),
?XMLATTR('node', <<"all users/", Node/binary>>), ?XMLATTR(<<"node">>, <<"all users/", Node/binary>>),
?XMLATTR('name', Name)]} ?XMLATTR(<<"name">>, Name)]}
end, lists:seq(1, N, M)) end, lists:seq(1, N, M))
end end
end. end.
@ -706,9 +706,9 @@ get_outgoing_s2s(Host, Lang) ->
lists:map( lists:map(
fun(T) -> fun(T) ->
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs = #xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
[?XMLATTR('jid', Host), [?XMLATTR(<<"jid">>, Host),
?XMLATTR('node', <<"outgoing s2s/", (list_to_binary(T))/binary>>), ?XMLATTR(<<"node">>, <<"outgoing s2s/", (list_to_binary(T))/binary>>),
?XMLATTR('name', ?XMLATTR(<<"name">>,
io_lib:format(?T(Lang, "To ~s"), [T]))]} io_lib:format(?T(Lang, "To ~s"), [T]))]}
end, lists:usort(TConns)) end, lists:usort(TConns))
end. end.
@ -721,9 +721,9 @@ get_outgoing_s2s(Host, Lang, To) ->
lists:map( lists:map(
fun({F, _T}) -> fun({F, _T}) ->
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs = #xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
[?XMLATTR('jid', Host), [?XMLATTR(<<"jid">>, Host),
?XMLATTR('node', <<"outgoing s2s/", (list_to_binary(To))/binary, "/", (list_to_binary(F))/binary>>), ?XMLATTR(<<"node">>, <<"outgoing s2s/", (list_to_binary(To))/binary, "/", (list_to_binary(F))/binary>>),
?XMLATTR('name', ?XMLATTR(<<"name">>,
io_lib:format(?T(Lang, "From ~s"), [F]))]} io_lib:format(?T(Lang, "From ~s"), [F]))]}
end, lists:keysort(1, lists:filter(fun(E) -> end, lists:keysort(1, lists:filter(fun(E) ->
element(2, E) == To element(2, E) == To
@ -740,9 +740,9 @@ get_running_nodes(Server, _Lang) ->
fun(N) -> fun(N) ->
S = list_to_binary(atom_to_list(N)), S = list_to_binary(atom_to_list(N)),
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs = #xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
[?XMLATTR('jid', Server), [?XMLATTR(<<"jid">>, Server),
?XMLATTR('node', <<"running nodes/", S/binary>>), ?XMLATTR(<<"node">>, <<"running nodes/", S/binary>>),
?XMLATTR('name', S)]} ?XMLATTR(<<"name">>, S)]}
end, lists:sort(DBNodes)) end, lists:sort(DBNodes))
end. end.
@ -757,9 +757,9 @@ get_stopped_nodes(_Lang) ->
fun(N) -> fun(N) ->
S = list_to_binary(atom_to_list(N)), S = list_to_binary(atom_to_list(N)),
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs = #xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
[?XMLATTR('jid', ?MYNAME), [?XMLATTR(<<"jid">>, ?MYNAME),
?XMLATTR('node', <<"stopped nodes/", S/binary>>), ?XMLATTR(<<"node">>, <<"stopped nodes/", S/binary>>),
?XMLATTR('name', S)]} ?XMLATTR(<<"name">>, S)]}
end, lists:sort(DBNodes)) end, lists:sort(DBNodes))
end. end.
@ -858,45 +858,45 @@ adhoc_local_commands(From, To,
-define(TVFIELD(Type, Var, Val), -define(TVFIELD(Type, Var, Val),
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [?XMLATTR('type', Type), #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [?XMLATTR(<<"type">>, Type),
?XMLATTR('var', Var)], ?XMLATTR(<<"var">>, Var)],
children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = Val}]}]}). 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(HFIELD(), ?TVFIELD(<<"hidden">>, <<"FORM_TYPE">>, list_to_binary(?NS_ADMIN_s))).
-define(TLFIELD(Type, Label, Var), -define(TLFIELD(Type, Label, Var),
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [?XMLATTR('type', Type), #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [?XMLATTR(<<"type">>, Type),
?XMLATTR('label', ?T(Lang, Label)), ?XMLATTR(<<"label">>, ?T(Lang, Label)),
?XMLATTR('var', Var)]}). ?XMLATTR(<<"var">>, Var)]}).
-define(XFIELD(Type, Label, Var, Val), -define(XFIELD(Type, Label, Var, Val),
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [?XMLATTR('type', Type), #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [?XMLATTR(<<"type">>, Type),
?XMLATTR('label', ?T(Lang, Label)), ?XMLATTR(<<"label">>, ?T(Lang, Label)),
?XMLATTR('var', Var)], ?XMLATTR(<<"var">>, Var)],
children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = Val}]}]}). children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = Val}]}]}).
-define(XMFIELD(Type, Label, Var, Vals), -define(XMFIELD(Type, Label, Var, Vals),
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [?XMLATTR('type', Type), #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [?XMLATTR(<<"type">>, Type),
?XMLATTR('label', ?T(Lang, Label)), ?XMLATTR(<<"label">>, ?T(Lang, Label)),
?XMLATTR('var', Var)], ?XMLATTR(<<"var">>, Var)],
children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(Val)}]} || Val <- Vals]}). children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(Val)}]} || Val <- Vals]}).
-define(TABLEFIELD(Table, Val), -define(TABLEFIELD(Table, Val),
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [?XMLATTR('type', <<"list-single">>), #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [?XMLATTR(<<"type">>, <<"list-single">>),
?XMLATTR('label', Table), ?XMLATTR(<<"label">>, Table),
?XMLATTR('var', Table)], ?XMLATTR(<<"var">>, Table)],
children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(atom_to_list(Val))}]}, 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('label', #xmlel{ns = ?NS_DATA_FORMS, name = 'option', attrs = [?XMLATTR(<<"label">>,
?T(Lang, "RAM copy"))], ?T(Lang, "RAM copy"))],
children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = <<"ram_copies">>}]}]}, children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = <<"ram_copies">>}]}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'option', attrs = [?XMLATTR('label', #xmlel{ns = ?NS_DATA_FORMS, name = 'option', attrs = [?XMLATTR(<<"label">>,
?T(Lang, ?T(Lang,
"RAM and disc copy"))], "RAM and disc copy"))],
children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = <<"disc_copies">>}]}]}, children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = <<"disc_copies">>}]}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'option', attrs = [?XMLATTR('label', #xmlel{ns = ?NS_DATA_FORMS, name = 'option', attrs = [?XMLATTR(<<"label">>,
?T(Lang, ?T(Lang,
"Disc only copy"))], "Disc only copy"))],
children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = <<"disc_only_copies">>}]}]}, children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = <<"disc_only_copies">>}]}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'option', attrs = [?XMLATTR('label', #xmlel{ns = ?NS_DATA_FORMS, name = 'option', attrs = [?XMLATTR(<<"label">>,
?T(Lang, "Remote copy"))], ?T(Lang, "Remote copy"))],
children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = <<"unknown">>}]}]} children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = <<"unknown">>}]}]}
]}). ]}).
@ -1057,7 +1057,7 @@ get_form(_Host, ["running nodes", _ENode, "restart"], Lang) ->
Make_option = Make_option =
fun(LabelNum, LabelUnit, Value)-> fun(LabelNum, LabelUnit, Value)->
#xmlel{ns = ?NS_DATA_FORMS, name = 'option', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'option', attrs =
[?XMLATTR('label', LabelNum ++ ?T(Lang, LabelUnit))], children = [?XMLATTR(<<"label">>, LabelNum ++ ?T(Lang, LabelUnit))], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(Value)}]}]} [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(Value)}]}]}
end, end,
{result, [#xmlel{ns = ?NS_DATA_FORMS, name = 'x', children = {result, [#xmlel{ns = ?NS_DATA_FORMS, name = 'x', children =
@ -1065,9 +1065,9 @@ get_form(_Host, ["running nodes", _ENode, "restart"], Lang) ->
#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children = #xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
[#xmlcdata{cdata = list_to_binary(?T(Lang, "Restart Service"))}]}, [#xmlcdata{cdata = list_to_binary(?T(Lang, "Restart Service"))}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[?XMLATTR('type', <<"list-single">>), [?XMLATTR(<<"type">>, <<"list-single">>),
?XMLATTR('label', ?T(Lang, "Time delay")), ?XMLATTR(<<"label">>, ?T(Lang, "Time delay")),
?XMLATTR('var', <<"delay">>)], children = ?XMLATTR(<<"var">>, <<"delay">>)], children =
[Make_option("", "immediately", "1"), [Make_option("", "immediately", "1"),
Make_option("15 ", "seconds", "15"), Make_option("15 ", "seconds", "15"),
Make_option("30 ", "seconds", "30"), Make_option("30 ", "seconds", "30"),
@ -1083,23 +1083,23 @@ get_form(_Host, ["running nodes", _ENode, "restart"], Lang) ->
#xmlel{ns = ?NS_DATA_FORMS, name = 'required'} #xmlel{ns = ?NS_DATA_FORMS, name = 'required'}
]}, ]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[?XMLATTR('type', <<"fixed">>), [?XMLATTR(<<"type">>, <<"fixed">>),
?XMLATTR('label', ?T(Lang, "Send announcement to all online users on all hosts"))]}, ?XMLATTR(<<"label">>, ?T(Lang, "Send announcement to all online users on all hosts"))]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[?XMLATTR('var', <<"subject">>), [?XMLATTR(<<"var">>, <<"subject">>),
?XMLATTR('type', <<"text-single">>), ?XMLATTR(<<"type">>, <<"text-single">>),
?XMLATTR('label', ?T(Lang, "Subject"))]}, ?XMLATTR(<<"label">>, ?T(Lang, "Subject"))]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[?XMLATTR('var', <<"announcement">>), [?XMLATTR(<<"var">>, <<"announcement">>),
?XMLATTR('type', <<"text-multi">>), ?XMLATTR(<<"type">>, <<"text-multi">>),
?XMLATTR('label', ?T(Lang, "Message body"))]} ?XMLATTR(<<"label">>, ?T(Lang, "Message body"))]}
]}]}; ]}]};
get_form(_Host, ["running nodes", _ENode, "shutdown"], Lang) -> get_form(_Host, ["running nodes", _ENode, "shutdown"], Lang) ->
Make_option = Make_option =
fun(LabelNum, LabelUnit, Value)-> fun(LabelNum, LabelUnit, Value)->
#xmlel{ns = ?NS_DATA_FORMS, name = 'option', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'option', attrs =
[?XMLATTR('label', LabelNum ++ ?T(Lang, LabelUnit))], children = [?XMLATTR(<<"label">>, LabelNum ++ ?T(Lang, LabelUnit))], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(Value)}]}]} [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(Value)}]}]}
end, end,
{result, [#xmlel{ns = ?NS_DATA_FORMS, name = 'x', children = {result, [#xmlel{ns = ?NS_DATA_FORMS, name = 'x', children =
@ -1107,9 +1107,9 @@ get_form(_Host, ["running nodes", _ENode, "shutdown"], Lang) ->
#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children = #xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
[#xmlcdata{cdata = list_to_binary(?T(Lang, "Shut Down Service"))}]}, [#xmlcdata{cdata = list_to_binary(?T(Lang, "Shut Down Service"))}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[?XMLATTR('type', <<"list-single">>), [?XMLATTR(<<"type">>, <<"list-single">>),
?XMLATTR('label', ?T(Lang, "Time delay")), ?XMLATTR(<<"label">>, ?T(Lang, "Time delay")),
?XMLATTR('var', <<"delay">>)], children = ?XMLATTR(<<"var">>, <<"delay">>)], children =
[Make_option("", "immediately", "1"), [Make_option("", "immediately", "1"),
Make_option("15 ", "seconds", "15"), Make_option("15 ", "seconds", "15"),
Make_option("30 ", "seconds", "30"), Make_option("30 ", "seconds", "30"),
@ -1125,16 +1125,16 @@ get_form(_Host, ["running nodes", _ENode, "shutdown"], Lang) ->
#xmlel{ns = ?NS_DATA_FORMS, name = 'required'} #xmlel{ns = ?NS_DATA_FORMS, name = 'required'}
]}, ]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[?XMLATTR('type', <<"fixed">>), [?XMLATTR(<<"type">>, <<"fixed">>),
?XMLATTR('label', ?T(Lang, "Send announcement to all online users on all hosts"))]}, ?XMLATTR(<<"label">>, ?T(Lang, "Send announcement to all online users on all hosts"))]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[?XMLATTR('var', <<"subject">>), [?XMLATTR(<<"var">>, <<"subject">>),
?XMLATTR('type', <<"text-single">>), ?XMLATTR(<<"type">>, <<"text-single">>),
?XMLATTR('label', ?T(Lang, "Subject"))]}, ?XMLATTR(<<"label">>, ?T(Lang, "Subject"))]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[?XMLATTR('var', <<"announcement">>), [?XMLATTR(<<"var">>, <<"announcement">>),
?XMLATTR('type', <<"text-multi">>), ?XMLATTR(<<"type">>, <<"text-multi">>),
?XMLATTR('label', ?T(Lang, "Message body"))]} ?XMLATTR(<<"label">>, ?T(Lang, "Message body"))]}
]}]}; ]}]};
get_form(Host, ["config", "acls"], Lang) -> get_form(Host, ["config", "acls"], Lang) ->
@ -1144,11 +1144,11 @@ get_form(Host, ["config", "acls"], Lang) ->
[#xmlcdata{cdata = [#xmlcdata{cdata =
list_to_binary(?T( list_to_binary(?T(
Lang, "Access Control List Configuration"))}]}, Lang, "Access Control List Configuration"))}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [?XMLATTR('type', <<"text-multi">>), #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [?XMLATTR(<<"type">>, <<"text-multi">>),
?XMLATTR('label', ?XMLATTR(<<"label">>,
?T( ?T(
Lang, "Access control lists")), Lang, "Access control lists")),
?XMLATTR('var', <<"acls">>)], ?XMLATTR(<<"var">>, <<"acls">>)],
children = lists:map(fun(S) -> children = lists:map(fun(S) ->
#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(S)}]} #xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(S)}]}
end, end,
@ -1172,11 +1172,11 @@ get_form(Host, ["config", "access"], Lang) ->
[#xmlcdata{cdata = [#xmlcdata{cdata =
list_to_binary(?T( list_to_binary(?T(
Lang, "Access Configuration"))}]}, Lang, "Access Configuration"))}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =[?XMLATTR('type', <<"text-multi">>), #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =[?XMLATTR(<<"type">>, <<"text-multi">>),
?XMLATTR('label', ?XMLATTR(<<"label">>,
?T( ?T(
Lang, "Access rules")), Lang, "Access rules")),
?XMLATTR('var', <<"access">>)], ?XMLATTR(<<"var">>, <<"access">>)],
children = lists:map(fun(S) -> children = lists:map(fun(S) ->
#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children =[#xmlcdata{cdata = list_to_binary(S)}]} #xmlel{ns = ?NS_DATA_FORMS, name = 'value', children =[#xmlcdata{cdata = list_to_binary(S)}]}
end, end,
@ -1199,19 +1199,19 @@ get_form(_Host, ?NS_ADMINL("add-user"), Lang) ->
#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children = #xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
[#xmlcdata{cdata = list_to_binary(?T(Lang, "Add User"))}]}, [#xmlcdata{cdata = list_to_binary(?T(Lang, "Add User"))}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[?XMLATTR('type', <<"jid-single">>), [?XMLATTR(<<"type">>, <<"jid-single">>),
?XMLATTR('label', ?T(Lang, "Jabber ID")), ?XMLATTR(<<"label">>, ?T(Lang, "Jabber ID")),
?XMLATTR('var', <<"accountjid">>)], children = ?XMLATTR(<<"var">>, <<"accountjid">>)], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]}, [#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[?XMLATTR('type', <<"text-private">>), [?XMLATTR(<<"type">>, <<"text-private">>),
?XMLATTR('label', ?T(Lang, "Password")), ?XMLATTR(<<"label">>, ?T(Lang, "Password")),
?XMLATTR('var', <<"password">>)], children = ?XMLATTR(<<"var">>, <<"password">>)], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]}, [#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[?XMLATTR('type', <<"text-private">>), [?XMLATTR(<<"type">>, <<"text-private">>),
?XMLATTR('label', ?T(Lang, "Password Verification")), ?XMLATTR(<<"label">>, ?T(Lang, "Password Verification")),
?XMLATTR('var', <<"password-verify">>)], children = ?XMLATTR(<<"var">>, <<"password-verify">>)], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]} [#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]}
]}]}; ]}]};
@ -1221,9 +1221,9 @@ get_form(_Host, ?NS_ADMINL("delete-user"), Lang) ->
#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children = #xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
[#xmlcdata{cdata = list_to_binary(?T(Lang, "Delete User"))}]}, [#xmlcdata{cdata = list_to_binary(?T(Lang, "Delete User"))}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[?XMLATTR('type', <<"jid-multi">>), [?XMLATTR(<<"type">>, <<"jid-multi">>),
?XMLATTR('label', ?T(Lang, "Jabber ID")), ?XMLATTR(<<"label">>, ?T(Lang, "Jabber ID")),
?XMLATTR('var', <<"accountjids">>)], children = ?XMLATTR(<<"var">>, <<"accountjids">>)], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]} [#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]}
]}]}; ]}]};
@ -1233,9 +1233,9 @@ get_form(_Host, ?NS_ADMINL("end-user-session"), Lang) ->
#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children = #xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
[#xmlcdata{cdata = list_to_binary(?T(Lang, "End User Session"))}]}, [#xmlcdata{cdata = list_to_binary(?T(Lang, "End User Session"))}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[?XMLATTR('type', <<"jid-single">>), [?XMLATTR(<<"type">>, <<"jid-single">>),
?XMLATTR('label', ?T(Lang, "Jabber ID")), ?XMLATTR(<<"label">>, ?T(Lang, "Jabber ID")),
?XMLATTR('var', <<"accountjid">>)], children = ?XMLATTR(<<"var">>, <<"accountjid">>)], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]} [#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]}
]}]}; ]}]};
@ -1245,9 +1245,9 @@ get_form(_Host, ?NS_ADMINL("get-user-password"), Lang) ->
#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children = #xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
[#xmlcdata{cdata = list_to_binary(?T(Lang, "Get User Password"))}]}, [#xmlcdata{cdata = list_to_binary(?T(Lang, "Get User Password"))}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[?XMLATTR('type', <<"jid-single">>), [?XMLATTR(<<"type">>, <<"jid-single">>),
?XMLATTR('label', ?T(Lang, "Jabber ID")), ?XMLATTR(<<"label">>, ?T(Lang, "Jabber ID")),
?XMLATTR('var', <<"accountjid">>)], children = ?XMLATTR(<<"var">>, <<"accountjid">>)], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]} [#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]}
]}]}; ]}]};
@ -1257,14 +1257,14 @@ get_form(_Host, ?NS_ADMINL("change-user-password"), Lang) ->
#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children = #xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
[#xmlcdata{cdata = list_to_binary(?T(Lang, "Get User Password"))}]}, [#xmlcdata{cdata = list_to_binary(?T(Lang, "Get User Password"))}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[?XMLATTR('type', <<"jid-single">>), [?XMLATTR(<<"type">>, <<"jid-single">>),
?XMLATTR('label', ?T(Lang, "Jabber ID")), ?XMLATTR(<<"label">>, ?T(Lang, "Jabber ID")),
?XMLATTR('var', <<"accountjid">>)], children = ?XMLATTR(<<"var">>, <<"accountjid">>)], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]}, [#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[?XMLATTR('type', <<"text-private">>), [?XMLATTR(<<"type">>, <<"text-private">>),
?XMLATTR('label', ?T(Lang, "Password")), ?XMLATTR(<<"label">>, ?T(Lang, "Password")),
?XMLATTR('var', <<"password">>)], children = ?XMLATTR(<<"var">>, <<"password">>)], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]} [#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]}
]}]}; ]}]};
@ -1274,9 +1274,9 @@ get_form(_Host, ?NS_ADMINL("get-user-lastlogin"), Lang) ->
#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children = #xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
[#xmlcdata{cdata = list_to_binary(?T(Lang, "Get User Last Login Time"))}]}, [#xmlcdata{cdata = list_to_binary(?T(Lang, "Get User Last Login Time"))}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[?XMLATTR('type', <<"jid-single">>), [?XMLATTR(<<"type">>, <<"jid-single">>),
?XMLATTR('label', ?T(Lang, "Jabber ID")), ?XMLATTR(<<"label">>, ?T(Lang, "Jabber ID")),
?XMLATTR('var', <<"accountjid">>)], children = ?XMLATTR(<<"var">>, <<"accountjid">>)], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]} [#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]}
]}]}; ]}]};
@ -1286,9 +1286,9 @@ get_form(_Host, ?NS_ADMINL("user-stats"), Lang) ->
#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children = #xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
[#xmlcdata{cdata = list_to_binary(?T(Lang, "Get User Statistics"))}]}, [#xmlcdata{cdata = list_to_binary(?T(Lang, "Get User Statistics"))}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[?XMLATTR('type', <<"jid-single">>), [?XMLATTR(<<"type">>, <<"jid-single">>),
?XMLATTR('label', ?T(Lang, "Jabber ID")), ?XMLATTR(<<"label">>, ?T(Lang, "Jabber ID")),
?XMLATTR('var', <<"accountjid">>)], children = ?XMLATTR(<<"var">>, <<"accountjid">>)], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]} [#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]}
]}]}; ]}]};
@ -1298,9 +1298,9 @@ get_form(Host, ?NS_ADMINL("get-registered-users-num"), Lang) ->
[#xmlel{ns = ?NS_DATA_FORMS, name = 'x', children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'x', children =
[?HFIELD(), [?HFIELD(),
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[?XMLATTR('type', <<"text-single">>), [?XMLATTR(<<"type">>, <<"text-single">>),
?XMLATTR('label', ?T(Lang, "Number of registered users")), ?XMLATTR(<<"label">>, ?T(Lang, "Number of registered users")),
?XMLATTR('var', <<"registeredusersnum">>)], children = ?XMLATTR(<<"var">>, <<"registeredusersnum">>)], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(Num)}]}] [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(Num)}]}]
}]}]}; }]}]};
@ -1310,9 +1310,9 @@ get_form(Host, ?NS_ADMINL("get-online-users-num"), Lang) ->
[#xmlel{ns = ?NS_DATA_FORMS, name = 'x', children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'x', children =
[?HFIELD(), [?HFIELD(),
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[?XMLATTR('type', <<"text-single">>), [?XMLATTR(<<"type">>, <<"text-single">>),
?XMLATTR('label', ?T(Lang, "Number of online users")), ?XMLATTR(<<"label">>, ?T(Lang, "Number of online users")),
?XMLATTR('var', <<"onlineusersnum">>)], children = ?XMLATTR(<<"var">>, <<"onlineusersnum">>)], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(Num)}]}] [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(Num)}]}]
}]}]}; }]}]};
@ -1688,7 +1688,7 @@ set_form(From, Host, ?NS_ADMINL("get-user-lastlogin"), Lang, XData) ->
_ -> _ ->
?T(Lang, "Online") ?T(Lang, "Online")
end, end,
{result, [#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs = [?XMLATTR('type', <<"result">>)], children = {result, [#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs = [?XMLATTR(<<"type">>, <<"result">>)], children =
[?HFIELD(), [?HFIELD(),
?XFIELD(<<"jid-single">>, "Jabber ID", <<"accountjid">>, list_to_binary(AccountString)), ?XFIELD(<<"jid-single">>, "Jabber ID", <<"accountjid">>, list_to_binary(AccountString)),
?XFIELD(<<"text-single">>, "Last login", <<"lastlogin">>, list_to_binary(FLast)) ?XFIELD(<<"text-single">>, "Last login", <<"lastlogin">>, list_to_binary(FLast))
@ -1748,12 +1748,12 @@ stop_node(From, Host, ENode, Action, XData) ->
Delay = list_to_integer(get_value("delay", XData)), Delay = list_to_integer(get_value("delay", XData)),
Subject = case get_value("subject", XData) of Subject = case get_value("subject", XData) of
[] -> []; [] -> [];
S -> [#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [?XMLATTR('var', <<"subject">>)], children = S -> [#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [?XMLATTR(<<"var">>, <<"subject">>)], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(S)}]}]}] [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(S)}]}]}]
end, end,
Announcement = case get_values("announcement", XData) of Announcement = case get_values("announcement", XData) of
[] -> []; [] -> [];
As -> [#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [?XMLATTR('var', <<"body">>)], children = As -> [#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [?XMLATTR(<<"var">>, <<"body">>)], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(Line)}]} || Line <- As] }] [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(Line)}]} || Line <- As] }]
end, end,
case Subject ++ Announcement of case Subject ++ Announcement of
@ -1763,10 +1763,10 @@ stop_node(From, Host, ENode, Action, XData) ->
node = binary_to_list(?NS_ADMINX(<<"announce-allhosts">>)), node = binary_to_list(?NS_ADMINX(<<"announce-allhosts">>)),
action = "complete", action = "complete",
xdata = #xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs = xdata = #xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs =
[?XMLATTR('type', <<"submit">>)], children = [?XMLATTR(<<"type">>, <<"submit">>)], children =
SubEls}, SubEls},
others= [#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs = others= [#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs =
[?XMLATTR('type', <<"submit">>)], children = [?XMLATTR(<<"type">>, <<"submit">>)], children =
SubEls}] SubEls}]
}, },
To = exmpp_jid:make(Host), To = exmpp_jid:make(Host),
@ -1845,15 +1845,15 @@ get_sm_form(User, Server, "config", Lang) ->
list_to_binary(?T( list_to_binary(?T(
Lang, "Administration of ") ++ User)}]}, Lang, "Administration of ") ++ User)}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[?XMLATTR('type', <<"list-single">>), [?XMLATTR(<<"type">>, <<"list-single">>),
?XMLATTR('label', ?T(Lang, "Action on user")), ?XMLATTR(<<"label">>, ?T(Lang, "Action on user")),
?XMLATTR('var', <<"action">>)], children = ?XMLATTR(<<"var">>, <<"action">>)], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = <<"edit">>}]}, [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = <<"edit">>}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'option', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'option', attrs =
[?XMLATTR('label', ?T(Lang, "Edit Properties"))], children = [?XMLATTR(<<"label">>, ?T(Lang, "Edit Properties"))], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = <<"edit">>}]}]}, [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = <<"edit">>}]}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'option', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'option', attrs =
[?XMLATTR('label', ?T(Lang, "Remove User"))], children = [?XMLATTR(<<"label">>, ?T(Lang, "Remove User"))], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = <<"remove">>}]}]} [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = <<"remove">>}]}]}
]}, ]},
?XFIELD(<<"text-private">>, "Password", <<"password">>, ?XFIELD(<<"text-private">>, "Password", <<"password">>,

View File

@ -124,15 +124,15 @@ process_local_iq(From, To, #iq{type = Type, payload = Request} = IQ_Rec) ->
process_get(#xmlel{ns = ?NS_ECONFIGURE, name = 'info'}) -> process_get(#xmlel{ns = ?NS_ECONFIGURE, name = 'info'}) ->
S2SConns = ejabberd_s2s:dirty_get_connections(), S2SConns = ejabberd_s2s:dirty_get_connections(),
TConns = lists:usort([element(2, C) || C <- S2SConns]), TConns = lists:usort([element(2, C) || C <- S2SConns]),
Attrs = [?XMLATTR('registered-users', mnesia:table_info(passwd, size)), Attrs = [?XMLATTR(<<"registered-users">>, mnesia:table_info(passwd, size)),
?XMLATTR('online-users', mnesia:table_info(presence, size)), ?XMLATTR(<<"online-users">>, mnesia:table_info(presence, size)),
?XMLATTR('running-nodes', ?XMLATTR(<<"running-nodes">>,
length(mnesia:system_info(running_db_nodes))), length(mnesia:system_info(running_db_nodes))),
?XMLATTR('stopped-nodes', ?XMLATTR(<<"stopped-nodes">>,
length(lists:usort(mnesia:system_info(db_nodes) ++ length(lists:usort(mnesia:system_info(db_nodes) ++
mnesia:system_info(extra_db_nodes)) -- mnesia:system_info(extra_db_nodes)) --
mnesia:system_info(running_db_nodes))), mnesia:system_info(running_db_nodes))),
?XMLATTR('outgoing-s2s-servers', ?XMLATTR(<<"outgoing-s2s-servers">>,
length(TConns))], length(TConns))],
{result, #xmlel{ns = ?NS_ECONFIGURE, name = 'info', attrs = Attrs}}; {result, #xmlel{ns = ?NS_ECONFIGURE, name = 'info', attrs = Attrs}};
process_get(#xmlel{ns = ?NS_ECONFIGURE, name = 'welcome-message', attrs = Attrs}) -> process_get(#xmlel{ns = ?NS_ECONFIGURE, name = 'welcome-message', attrs = Attrs}) ->

View File

@ -124,14 +124,14 @@ unregister_extra_domain(HostB, Domain) when is_binary(HostB) ->
process_local_iq_items(From, To, #iq{type = get, payload = SubEl, process_local_iq_items(From, To, #iq{type = get, payload = SubEl,
lang = Lang} = IQ_Rec) -> lang = Lang} = IQ_Rec) ->
Node = exmpp_xml:get_attribute_as_binary(SubEl, 'node', <<>>), Node = exmpp_xml:get_attribute_as_binary(SubEl, <<"node">>, <<>>),
Host = exmpp_jid:prep_domain(To), Host = exmpp_jid:prep_domain(To),
case find_items(disco_local_items, Host, From, To, Node, Lang) of case find_items(disco_local_items, Host, From, To, Node, Lang) of
{result, Items} -> {result, Items} ->
ANode = case Node of ANode = case Node of
<<>> -> []; <<>> -> [];
_ -> [?XMLATTR('node', Node)] _ -> [?XMLATTR(<<"node">>, Node)]
end, end,
Result = #xmlel{ns = ?NS_DISCO_ITEMS, name = 'query', Result = #xmlel{ns = ?NS_DISCO_ITEMS, name = 'query',
attrs = ANode, children = Items}, attrs = ANode, children = Items},
@ -145,7 +145,7 @@ process_local_iq_items(_From, _To, #iq{type = set} = IQ_Rec) ->
process_local_iq_info(From, To, #iq{type = get, payload = SubEl, process_local_iq_info(From, To, #iq{type = get, payload = SubEl,
lang = Lang} = IQ_Rec) -> lang = Lang} = IQ_Rec) ->
Node = exmpp_xml:get_attribute_as_binary(SubEl, 'node', <<>>), Node = exmpp_xml:get_attribute_as_binary(SubEl, <<"node">>, <<>>),
HostB = exmpp_jid:prep_domain(To), HostB = exmpp_jid:prep_domain(To),
Identity = ejabberd_hooks:run_fold(disco_local_identity, Identity = ejabberd_hooks:run_fold(disco_local_identity,
HostB, HostB,
@ -158,7 +158,7 @@ process_local_iq_info(From, To, #iq{type = get, payload = SubEl,
{result, Features} -> {result, Features} ->
ANode = case Node of ANode = case Node of
<<>> -> []; <<>> -> [];
_ -> [?XMLATTR('node', Node)] _ -> [?XMLATTR(<<"node">>, Node)]
end, end,
Result = #xmlel{ns = ?NS_DISCO_INFO, name = 'query', Result = #xmlel{ns = ?NS_DISCO_INFO, name = 'query',
attrs = ANode, attrs = ANode,
@ -172,9 +172,9 @@ process_local_iq_info(_From, _To, #iq{type = set} = IQ_Rec) ->
get_local_identity(Acc, _From, _To, <<>>, _Lang) -> get_local_identity(Acc, _From, _To, <<>>, _Lang) ->
Acc ++ [#xmlel{ns = ?NS_DISCO_INFO, name = 'identity', attrs = [ Acc ++ [#xmlel{ns = ?NS_DISCO_INFO, name = 'identity', attrs = [
?XMLATTR('category', <<"server">>), ?XMLATTR(<<"category">>, <<"server">>),
?XMLATTR('type', <<"im">>), ?XMLATTR(<<"type">>, <<"im">>),
?XMLATTR('name', <<"ejabberd">>) ?XMLATTR(<<"name">>, <<"ejabberd">>)
]}]; ]}];
get_local_identity(Acc, _From, _To, _Node, _Lang) -> get_local_identity(Acc, _From, _To, _Node, _Lang) ->
@ -208,7 +208,7 @@ get_local_features(Acc, _From, _To, _Node, _Lang) ->
features_to_xml(FeatureList) -> features_to_xml(FeatureList) ->
%% Avoid duplicating features %% Avoid duplicating features
[#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', [#xmlel{ns = ?NS_DISCO_INFO, name = 'feature',
attrs = [?XMLATTR('var', Feat)]} || attrs = [?XMLATTR(<<"var">>, Feat)]} ||
Feat <- lists:usort( Feat <- lists:usort(
lists:map( lists:map(
fun({{Feature, _Host}}) -> fun({{Feature, _Host}}) ->
@ -228,7 +228,7 @@ domain_to_xml({Domain}) ->
domain_to_xml(Domain); domain_to_xml(Domain);
domain_to_xml(Domain) when is_binary(Domain)-> domain_to_xml(Domain) when is_binary(Domain)->
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs = [ #xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs = [
?XMLATTR('jid', Domain) ?XMLATTR(<<"jid">>, Domain)
]}; ]};
domain_to_xml(Domain) when is_list(Domain) -> domain_to_xml(Domain) when is_list(Domain) ->
domain_to_xml(list_to_binary(Domain)). domain_to_xml(list_to_binary(Domain)).
@ -284,13 +284,13 @@ get_vh_services(Host) ->
process_sm_iq_items(From, To, #iq{type = get, payload = SubEl, process_sm_iq_items(From, To, #iq{type = get, payload = SubEl,
lang = Lang} = IQ_Rec) -> lang = Lang} = IQ_Rec) ->
Node = exmpp_xml:get_attribute_as_binary(SubEl, 'node', <<>>), Node = exmpp_xml:get_attribute_as_binary(SubEl, <<"node">>, <<>>),
Host = exmpp_jid:prep_domain(To), Host = exmpp_jid:prep_domain(To),
case find_items(disco_sm_items, Host, From, To, Node, Lang) of case find_items(disco_sm_items, Host, From, To, Node, Lang) of
{result, Items} -> {result, Items} ->
ANode = case Node of ANode = case Node of
<<>> -> []; <<>> -> [];
_ -> [?XMLATTR('node', Node)] _ -> [?XMLATTR(<<"node">>, Node)]
end, end,
AItems = case Node of AItems = case Node of
<<>> -> <<>> ->
@ -362,7 +362,7 @@ process_sm_iq_info(From, To, #iq{type = get, payload = SubEl,
lang = Lang} = IQ_Rec) -> lang = Lang} = IQ_Rec) ->
case is_presence_subscribed(From, To) of case is_presence_subscribed(From, To) of
true -> true ->
Node = exmpp_xml:get_attribute_as_binary(SubEl, 'node', <<>>), Node = exmpp_xml:get_attribute_as_binary(SubEl, <<"node">>, <<>>),
Identity = ejabberd_hooks:run_fold(disco_sm_identity, Identity = ejabberd_hooks:run_fold(disco_sm_identity,
exmpp_jid:prep_domain(To), exmpp_jid:prep_domain(To),
[], [],
@ -372,7 +372,7 @@ process_sm_iq_info(From, To, #iq{type = get, payload = SubEl,
{result, Features} -> {result, Features} ->
ANode = case Node of ANode = case Node of
<<>> -> []; <<>> -> [];
_ -> [?XMLATTR('node', Node)] _ -> [?XMLATTR(<<"node">>, Node)]
end, end,
Result = #xmlel{ns = ?NS_DISCO_INFO, name = 'query', Result = #xmlel{ns = ?NS_DISCO_INFO, name = 'query',
attrs = ANode, attrs = ANode,
@ -421,9 +421,9 @@ get_user_resources(JID) ->
exmpp_jid:prep_domain(JID)), exmpp_jid:prep_domain(JID)),
lists:map(fun(R) -> lists:map(fun(R) ->
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs = [ #xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs = [
?XMLATTR('jid', ?XMLATTR(<<"jid">>,
exmpp_jid:to_binary(exmpp_jid:full(JID, R))), exmpp_jid:to_binary(exmpp_jid:full(JID, R))),
?XMLATTR('name', exmpp_jid:prep_node(JID)) ?XMLATTR(<<"name">>, exmpp_jid:prep_node(JID))
]} ]}
end, lists:sort(Rs)). end, lists:sort(Rs)).
@ -440,13 +440,13 @@ get_info(Acc, Host, Mod, Node, _Lang) when Node == <<>> ->
CData1 = #xmlcdata{cdata = list_to_binary(?NS_SERVERINFO_s)}, CData1 = #xmlcdata{cdata = list_to_binary(?NS_SERVERINFO_s)},
Value1 = #xmlel{name = 'value', children = [CData1]}, Value1 = #xmlel{name = 'value', children = [CData1]},
Field1 = #xmlel{name = 'field', Field1 = #xmlel{name = 'field',
attrs = [?XMLATTR('type', <<"hidden">>), attrs = [?XMLATTR(<<"type">>, <<"hidden">>),
?XMLATTR('var', <<"FORM_TYPE">>)], ?XMLATTR(<<"var">>, <<"FORM_TYPE">>)],
children = [Value1] children = [Value1]
}, },
X = #xmlel{name = 'x', X = #xmlel{name = 'x',
ns = ?NS_DATA_FORMS, ns = ?NS_DATA_FORMS,
attrs = [?XMLATTR('type', <<"result">>)], attrs = [?XMLATTR(<<"type">>, <<"result">>)],
children = [Field1 | Serverinfo_fields] children = [Field1 | Serverinfo_fields]
}, },
[X | Acc]; [X | Acc];
@ -475,7 +475,7 @@ fields_to_xml(Fields) ->
field_to_xml({_, Var, Values}) -> field_to_xml({_, Var, Values}) ->
Values_xml = values_to_xml(Values), Values_xml = values_to_xml(Values),
#xmlel{name = 'field', #xmlel{name = 'field',
attrs = [?XMLATTR('var', list_to_binary(Var))], attrs = [?XMLATTR(<<"var">>, list_to_binary(Var))],
children = Values_xml children = Values_xml
}. }.

View File

@ -113,7 +113,7 @@ stop(Host) ->
process_local_iq(_From, _To, #iq{type = get} = IQ_Rec) -> process_local_iq(_From, _To, #iq{type = get} = IQ_Rec) ->
Sec = get_node_uptime(), Sec = get_node_uptime(),
Response = #xmlel{ns = ?NS_LAST_ACTIVITY, name = 'query', attrs = Response = #xmlel{ns = ?NS_LAST_ACTIVITY, name = 'query', attrs =
[?XMLATTR('seconds', Sec)]}, [?XMLATTR(<<"seconds">>, Sec)]},
exmpp_iq:result(IQ_Rec, Response); exmpp_iq:result(IQ_Rec, Response);
process_local_iq(_From, _To, #iq{type = set} = IQ_Rec) -> process_local_iq(_From, _To, #iq{type = set} = IQ_Rec) ->
exmpp_iq:error(IQ_Rec, 'not-allowed'). exmpp_iq:error(IQ_Rec, 'not-allowed').
@ -186,7 +186,7 @@ get_last_iq(IQ_Rec, LUser, LServer) ->
_ -> _ ->
Sec = 0, Sec = 0,
#xmlel{ns = ?NS_LAST_ACTIVITY, name = 'query', #xmlel{ns = ?NS_LAST_ACTIVITY, name = 'query',
attrs = [?XMLATTR('seconds', Sec)]} attrs = [?XMLATTR(<<"seconds">>, Sec)]}
end. end.
get_last_iq_disconnected(IQ_Rec, LUser, LServer) -> get_last_iq_disconnected(IQ_Rec, LUser, LServer) ->
@ -199,7 +199,7 @@ get_last_iq_disconnected(IQ_Rec, LUser, LServer) ->
TimeStamp2 = now_to_seconds(now()), TimeStamp2 = now_to_seconds(now()),
Sec = TimeStamp2 - TimeStamp, Sec = TimeStamp2 - TimeStamp,
Response = #xmlel{ns = ?NS_LAST_ACTIVITY, name = 'query', Response = #xmlel{ns = ?NS_LAST_ACTIVITY, name = 'query',
attrs = [?XMLATTR('seconds', Sec)], attrs = [?XMLATTR(<<"seconds">>, Sec)],
children = [#xmlcdata{cdata = Status}]}, children = [#xmlcdata{cdata = Status}]},
exmpp_iq:result(IQ_Rec, Response) exmpp_iq:result(IQ_Rec, Response)
end. end.

View File

@ -71,7 +71,7 @@ stop(Host) ->
process_local_iq(_From, _To, #iq{type = get} = IQ_Rec) -> process_local_iq(_From, _To, #iq{type = get} = IQ_Rec) ->
Sec = get_node_uptime(), Sec = get_node_uptime(),
Response = #xmlel{ns = ?NS_LAST_ACTIVITY, name = 'query', attrs = Response = #xmlel{ns = ?NS_LAST_ACTIVITY, name = 'query', attrs =
[?XMLATTR('seconds', Sec)]}, [?XMLATTR(<<"seconds">>, Sec)]},
exmpp_iq:result(IQ_Rec, Response); exmpp_iq:result(IQ_Rec, Response);
process_local_iq(_From, _To, #iq{type = set} = IQ_Rec) -> process_local_iq(_From, _To, #iq{type = set} = IQ_Rec) ->
exmpp_iq:error(IQ_Rec, 'not-allowed'). exmpp_iq:error(IQ_Rec, 'not-allowed').
@ -137,7 +137,7 @@ get_last(IQ_Rec, LUser, LServer) ->
TimeStamp2 = now_to_seconds(now()), TimeStamp2 = now_to_seconds(now()),
Sec = TimeStamp2 - TimeStamp, Sec = TimeStamp2 - TimeStamp,
Response = #xmlel{ns = ?NS_LAST_ACTIVITY, name = 'query', Response = #xmlel{ns = ?NS_LAST_ACTIVITY, name = 'query',
attrs = [?XMLATTR('seconds', Sec)], attrs = [?XMLATTR(<<"seconds">>, Sec)],
children = [#xmlcdata{cdata = list_to_binary(Status)}]}, children = [#xmlcdata{cdata = list_to_binary(Status)}]},
exmpp_iq:result(IQ_Rec, Response); exmpp_iq:result(IQ_Rec, Response);
_ -> _ ->

View File

@ -524,7 +524,7 @@ do_route1(Host, ServerHost, Access, HistorySize, RoomShaper,
ejabberd_router:route(To, From, Err) ejabberd_router:route(To, From, Err)
end; end;
'message' -> 'message' ->
case exmpp_xml:get_attribute_as_list(Packet,type, "chat") of case exmpp_xml:get_attribute_as_list(Packet,<<"type">>, "chat") of
"error" -> "error" ->
ok; ok;
_ -> _ ->
@ -676,32 +676,32 @@ register_room(Host, Room, Pid) ->
iq_disco_info(Lang) -> iq_disco_info(Lang) ->
[#xmlel{ns = ?NS_DISCO_INFO, name = 'identity', [#xmlel{ns = ?NS_DISCO_INFO, name = 'identity',
attrs = [?XMLATTR('category', attrs = [?XMLATTR(<<"category">>,
<<"conference">>), <<"conference">>),
?XMLATTR('type', ?XMLATTR(<<"type">>,
<<"text">>), <<"text">>),
?XMLATTR('name', ?XMLATTR(<<"name">>,
translate:translate(Lang, "Rooms"))]}, translate:translate(Lang, "Rooms"))]},
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = #xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs =
[?XMLATTR('var', [?XMLATTR(<<"var">>,
?NS_DISCO_INFO_s)]}, ?NS_DISCO_INFO_s)]},
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = #xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs =
[?XMLATTR('var', [?XMLATTR(<<"var">>,
?NS_DISCO_ITEMS_s)]}, ?NS_DISCO_ITEMS_s)]},
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = #xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs =
[?XMLATTR('var', [?XMLATTR(<<"var">>,
?NS_MUC_s)]}, ?NS_MUC_s)]},
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = #xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs =
[?XMLATTR('var', [?XMLATTR(<<"var">>,
?NS_MUC_UNIQUE_s)]}, ?NS_MUC_UNIQUE_s)]},
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = #xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs =
[?XMLATTR('var', [?XMLATTR(<<"var">>,
?NS_INBAND_REGISTER_s)]}, ?NS_INBAND_REGISTER_s)]},
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = #xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs =
[?XMLATTR('var', [?XMLATTR(<<"var">>,
?NS_RSM_s)]}, ?NS_RSM_s)]},
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = #xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs =
[?XMLATTR('var', [?XMLATTR(<<"var">>,
?NS_VCARD_s)]}]. ?NS_VCARD_s)]}].
@ -730,9 +730,9 @@ iq_disco_items(Host, From, Lang, Rsm) ->
flush(), flush(),
{true, {true,
#xmlel{name = 'item', #xmlel{name = 'item',
attrs = [?XMLATTR('jid', attrs = [?XMLATTR(<<"jid">>,
exmpp_jid:to_binary(exmpp_jid:make(Name, Host))), exmpp_jid:to_binary(exmpp_jid:make(Name, Host))),
?XMLATTR('name', ?XMLATTR(<<"name">>,
Desc)]}}; Desc)]}};
_ -> _ ->
false false
@ -808,10 +808,10 @@ flush() ->
-define(XFIELD(Type, Label, Var, Val), -define(XFIELD(Type, Label, Var, Val),
#xmlel{name = "field", #xmlel{name = "field",
attrs = [?XMLATTR('type', Type), attrs = [?XMLATTR(<<"type">>, Type),
?XMLATTR('label', ?XMLATTR(<<"label">>,
translate:translate(Lang, Label)), translate:translate(Lang, Label)),
?XMLATTR('var', Var)], ?XMLATTR(<<"var">>, Var)],
children = [#xmlel{name = 'value', children = [#xmlel{name = 'value',
children = [#xmlcdata{cdata = Val}]}]}). children = [#xmlcdata{cdata = Val}]}]}).

View File

@ -578,7 +578,7 @@ normal_state(_Event, StateData) ->
%%---------------------------------------------------------------------- %%----------------------------------------------------------------------
handle_event({service_message, Msg}, _StateName, StateData) -> handle_event({service_message, Msg}, _StateName, StateData) ->
MessagePkt = #xmlel{name = 'message', MessagePkt = #xmlel{name = 'message',
attrs = [?XMLATTR('type', <<"groupchat">>)], attrs = [?XMLATTR(<<"type">>, <<"groupchat">>)],
children = [#xmlel{name = 'body', children = [#xmlel{name = 'body',
children = [#xmlcdata{cdata = Msg}]}]}, children = [#xmlcdata{cdata = Msg}]}]},
send_multiple( send_multiple(
@ -757,16 +757,16 @@ terminate(Reason, _StateName, StateData) ->
_ -> <<"Room terminates">> _ -> <<"Room terminates">>
end, end,
ReasonEl = #xmlel{name = 'reason', children = [#xmlcdata{cdata = ReasonT}]}, ReasonEl = #xmlel{name = 'reason', children = [#xmlcdata{cdata = ReasonT}]},
ItemAttrs = [?XMLATTR('affiliation', <<"none">>), ItemAttrs = [?XMLATTR(<<"affiliation">>, <<"none">>),
?XMLATTR('role', <<"none">>)], ?XMLATTR(<<"role">>, <<"none">>)],
XEls = [#xmlel{ns = ?NS_MUC_USER, name = 'item', XEls = [#xmlel{ns = ?NS_MUC_USER, name = 'item',
attrs = ItemAttrs, attrs = ItemAttrs,
children = [ReasonEl]}, children = [ReasonEl]},
#xmlel{ns = ?NS_MUC_USER, name = 'status', #xmlel{ns = ?NS_MUC_USER, name = 'status',
attrs = [?XMLATTR('code', <<"332">>)]}], attrs = [?XMLATTR(<<"code">>, <<"332">>)]}],
Packet = #xmlel{ns = ?NS_JABBER_CLIENT, Packet = #xmlel{ns = ?NS_JABBER_CLIENT,
name = 'presence', name = 'presence',
attrs = [?XMLATTR('type', <<"unavailable">>)], attrs = [?XMLATTR(<<"type">>, <<"unavailable">>)],
children = [#xmlel{ns = ?NS_MUC_USER, name = 'x', children = [#xmlel{ns = ?NS_MUC_USER, name = 'x',
children = XEls} children = XEls}
]}, ]},
@ -1643,7 +1643,7 @@ add_new_user(From, Nick, Packet, StateData) ->
if not (NewState#state.config)#config.anonymous -> if not (NewState#state.config)#config.anonymous ->
WPacket = WPacket =
#xmlel{name = 'message', #xmlel{name = 'message',
attrs = [?XMLATTR('type', <<"groupchat">>)], attrs = [?XMLATTR(<<"type">>, <<"groupchat">>)],
children = [ children = [
#xmlel{name = 'body', #xmlel{name = 'body',
children = [#xmlcdata{cdata = children = [#xmlcdata{cdata =
@ -1693,7 +1693,7 @@ add_new_user(From, Nick, Packet, StateData) ->
SID, RoomJID, To, Lang, From) of SID, RoomJID, To, Lang, From) of
{ok, ID, CaptchaEls} -> {ok, ID, CaptchaEls} ->
MsgPkt = #xmlel{name = 'message', MsgPkt = #xmlel{name = 'message',
attrs = [#xmlattr{name = 'id', value = list_to_binary(ID)}], attrs = [#xmlattr{name = <<"id">>, value = list_to_binary(ID)}],
children = CaptchaEls}, children = CaptchaEls},
Robots = ?DICT:store(From, Robots = ?DICT:store(From,
{Nick, Packet}, StateData#state.robots), {Nick, Packet}, StateData#state.robots),
@ -1933,12 +1933,12 @@ send_new_presence(NJID, Reason, StateData) ->
case (Info#user.role == moderator) orelse case (Info#user.role == moderator) orelse
((StateData#state.config)#config.anonymous == false) of ((StateData#state.config)#config.anonymous == false) of
true -> true ->
[?XMLATTR('jid', exmpp_jid:to_binary(RealJID)), [?XMLATTR(<<"jid">>, exmpp_jid:to_binary(RealJID)),
?XMLATTR('affiliation', SAffiliation), ?XMLATTR(<<"affiliation">>, SAffiliation),
?XMLATTR('role', SRole)]; ?XMLATTR(<<"role">>, SRole)];
_ -> _ ->
[?XMLATTR('affiliation', SAffiliation), [?XMLATTR(<<"affiliation">>, SAffiliation),
?XMLATTR('role', SRole)] ?XMLATTR(<<"role">>, SRole)]
end, end,
ItemEls = case Reason of ItemEls = case Reason of
<<>> -> <<>> ->
@ -1950,7 +1950,7 @@ send_new_presence(NJID, Reason, StateData) ->
Status = case StateData#state.just_created of Status = case StateData#state.just_created of
true -> true ->
[#xmlel{name = 'status', [#xmlel{name = 'status',
attrs = [?XMLATTR('code', <<"201">>)]}]; attrs = [?XMLATTR(<<"code">>, <<"201">>)]}];
false -> false ->
[] []
end, end,
@ -1958,7 +1958,7 @@ send_new_presence(NJID, Reason, StateData) ->
andalso (NJID == Info#user.jid) of andalso (NJID == Info#user.jid) of
true -> true ->
[#xmlel{name = 'status', [#xmlel{name = 'status',
attrs = [?XMLATTR('code', <<"100">>)]} attrs = [?XMLATTR(<<"code">>, <<"100">>)]}
| Status]; | Status];
false -> false ->
Status Status
@ -1998,14 +1998,14 @@ send_existing_presences(ToJID, StateData) ->
((StateData#state.config)#config.anonymous == ((StateData#state.config)#config.anonymous ==
false) of false) of
true -> true ->
[?XMLATTR('jid', exmpp_jid:to_binary(FromJID)), [?XMLATTR(<<"jid">>, exmpp_jid:to_binary(FromJID)),
?XMLATTR('affiliation', ?XMLATTR(<<"affiliation">>,
affiliation_to_binary(FromAffiliation)), affiliation_to_binary(FromAffiliation)),
?XMLATTR('role', role_to_binary(FromRole))]; ?XMLATTR(<<"role">>, role_to_binary(FromRole))];
_ -> _ ->
[?XMLATTR('affiliation', [?XMLATTR(<<"affiliation">>,
affiliation_to_binary(FromAffiliation)), affiliation_to_binary(FromAffiliation)),
?XMLATTR('role', role_to_binary(FromRole))] ?XMLATTR(<<"role">>, role_to_binary(FromRole))]
end, end,
Packet = exmpp_xml:append_child(Presence, Packet = exmpp_xml:append_child(Presence,
#xmlel{ns = ?NS_MUC_USER, name = 'x', #xmlel{ns = ?NS_MUC_USER, name = 'x',
@ -2055,36 +2055,36 @@ send_nick_changing(JID, OldNick, StateData) ->
case (Info#user.role == moderator) orelse case (Info#user.role == moderator) orelse
((StateData#state.config)#config.anonymous == false) of ((StateData#state.config)#config.anonymous == false) of
true -> true ->
[?XMLATTR('jid', exmpp_jid:to_binary(RealJID)), [?XMLATTR(<<"jid">>, exmpp_jid:to_binary(RealJID)),
?XMLATTR('affiliation', SAffiliation), ?XMLATTR(<<"affiliation">>, SAffiliation),
?XMLATTR('role', SRole), ?XMLATTR(<<"role">>, SRole),
?XMLATTR('nick', Nick)]; ?XMLATTR(<<"nick">>, Nick)];
_ -> _ ->
[?XMLATTR('affiliation', SAffiliation), [?XMLATTR(<<"affiliation">>, SAffiliation),
?XMLATTR('role', SRole), ?XMLATTR(<<"role">>, SRole),
?XMLATTR('nick', Nick)] ?XMLATTR(<<"nick">>, Nick)]
end, end,
ItemAttrs2 = ItemAttrs2 =
case (Info#user.role == moderator) orelse case (Info#user.role == moderator) orelse
((StateData#state.config)#config.anonymous == false) of ((StateData#state.config)#config.anonymous == false) of
true -> true ->
[?XMLATTR('jid', exmpp_jid:to_binary(RealJID)), [?XMLATTR(<<"jid">>, exmpp_jid:to_binary(RealJID)),
?XMLATTR('affiliation', SAffiliation), ?XMLATTR(<<"affiliation">>, SAffiliation),
?XMLATTR('role', SRole)]; ?XMLATTR(<<"role">>, SRole)];
_ -> _ ->
[?XMLATTR('affiliation', SAffiliation), [?XMLATTR(<<"affiliation">>, SAffiliation),
?XMLATTR('role', SRole)] ?XMLATTR(<<"role">>, SRole)]
end, end,
Packet1 = Packet1 =
#xmlel{ns = ?NS_JABBER_CLIENT, #xmlel{ns = ?NS_JABBER_CLIENT,
name = 'presence', name = 'presence',
attrs = [?XMLATTR('type', <<"unavailable">>)], attrs = [?XMLATTR(<<"type">>, <<"unavailable">>)],
children = [#xmlel{ns = ?NS_MUC_USER, name = 'x', children = [#xmlel{ns = ?NS_MUC_USER, name = 'x',
children = [ children = [
#xmlel{ns = ?NS_MUC_USER, name = 'item', #xmlel{ns = ?NS_MUC_USER, name = 'item',
attrs = ItemAttrs1}, attrs = ItemAttrs1},
#xmlel{ns = ?NS_MUC_USER, name = 'status', #xmlel{ns = ?NS_MUC_USER, name = 'status',
attrs = [?XMLATTR('code', attrs = [?XMLATTR(<<"code">>,
<<"303">>)]}]}]}, <<"303">>)]}]}]},
Packet2 = exmpp_xml:append_child( Packet2 = exmpp_xml:append_child(
@ -2216,9 +2216,9 @@ process_iq_admin(From, get, Lang, SubEl, StateData) ->
Item -> Item ->
FAffiliation = get_affiliation(From, StateData), FAffiliation = get_affiliation(From, StateData),
FRole = get_role(From, StateData), FRole = get_role(From, StateData),
case exmpp_xml:get_attribute_as_binary(Item, 'role', false) of case exmpp_xml:get_attribute_as_binary(Item, <<"role">>, false) of
false -> false ->
case exmpp_xml:get_attribute_as_binary(Item, 'affiliation', false) of case exmpp_xml:get_attribute_as_binary(Item, <<"affiliation">>, false) of
false -> false ->
{error, 'bad-request'}; {error, 'bad-request'};
StrAffiliation -> StrAffiliation ->
@ -2267,9 +2267,9 @@ items_with_affiliation(SAffiliation, StateData) ->
fun({JID, {Affiliation, Reason}}) -> fun({JID, {Affiliation, Reason}}) ->
{N, D, R} = JID, {N, D, R} = JID,
#xmlel{name = 'item', #xmlel{name = 'item',
attrs = [?XMLATTR('affiliation', attrs = [?XMLATTR(<<"affiliation">>,
affiliation_to_binary(Affiliation)), affiliation_to_binary(Affiliation)),
?XMLATTR('jid', ?XMLATTR(<<"jid">>,
exmpp_jid:to_binary(N, D, R))], exmpp_jid:to_binary(N, D, R))],
children = [ #xmlel{name = 'reason', children = [ #xmlel{name = 'reason',
children = [#xmlcdata{cdata = Reason}]}]}; children = [#xmlcdata{cdata = Reason}]}]};
@ -2277,9 +2277,9 @@ items_with_affiliation(SAffiliation, StateData) ->
({JID, Affiliation}) -> ({JID, Affiliation}) ->
{N, D, R} = JID, {N, D, R} = JID,
#xmlel{name = 'item', #xmlel{name = 'item',
attrs = [?XMLATTR('affiliation', attrs = [?XMLATTR(<<"affiliation">>,
affiliation_to_binary(Affiliation)), affiliation_to_binary(Affiliation)),
?XMLATTR('jid', ?XMLATTR(<<"jid">>,
exmpp_jid:to_binary(N, D, R))]} exmpp_jid:to_binary(N, D, R))]}
end, search_affiliation(SAffiliation, StateData)). end, search_affiliation(SAffiliation, StateData)).
@ -2290,10 +2290,10 @@ user_to_item(#user{role = Role,
Affiliation = get_affiliation(JID, StateData), Affiliation = get_affiliation(JID, StateData),
#xmlel{name = 'item', #xmlel{name = 'item',
attrs = [ attrs = [
?XMLATTR('role', role_to_binary(Role)), ?XMLATTR(<<"role">>, role_to_binary(Role)),
?XMLATTR('affiliation', affiliation_to_binary(Affiliation)), ?XMLATTR(<<"affiliation">>, affiliation_to_binary(Affiliation)),
?XMLATTR('nick', Nick), ?XMLATTR(<<"nick">>, Nick),
?XMLATTR('jid', exmpp_jid:to_binary(JID))] ?XMLATTR(<<"jid">>, exmpp_jid:to_binary(JID))]
}. }.
search_role(Role, StateData) -> search_role(Role, StateData) ->
@ -2418,7 +2418,7 @@ find_changed_items(UJID, UAffiliation, URole, [#xmlcdata{} | Items],
find_changed_items(UJID, UAffiliation, URole, find_changed_items(UJID, UAffiliation, URole,
[#xmlel{name = 'item'} = Item | Items], [#xmlel{name = 'item'} = Item | Items],
Lang, StateData, Res) -> Lang, StateData, Res) ->
TJID = case exmpp_xml:get_attribute_as_binary(Item, 'jid',false) of TJID = case exmpp_xml:get_attribute_as_binary(Item, <<"jid">>,false) of
S when S =/= false -> S when S =/= false ->
try exmpp_jid:parse(S) of try exmpp_jid:parse(S) of
J -> J ->
@ -2432,7 +2432,7 @@ find_changed_items(UJID, UAffiliation, URole,
{error, ?ERR(Item, 'not-acceptable', Lang, ErrText)} {error, ?ERR(Item, 'not-acceptable', Lang, ErrText)}
end; end;
_ -> _ ->
case exmpp_xml:get_attribute(Item, 'nick', false) of case exmpp_xml:get_attribute(Item, <<"nick">>, false) of
N when N =/= false -> N when N =/= false ->
case find_jid_by_nick(N, StateData) of case find_jid_by_nick(N, StateData) of
false -> false ->
@ -2454,9 +2454,9 @@ find_changed_items(UJID, UAffiliation, URole,
{value, JID} -> {value, JID} ->
TAffiliation = get_affiliation(JID, StateData), TAffiliation = get_affiliation(JID, StateData),
TRole = get_role(JID, StateData), TRole = get_role(JID, StateData),
case exmpp_xml:get_attribute_as_binary(Item, 'role',false) of case exmpp_xml:get_attribute_as_binary(Item, <<"role">>,false) of
false -> false ->
case exmpp_xml:get_attribute_as_binary(Item, 'affiliation', false) of case exmpp_xml:get_attribute_as_binary(Item, <<"affiliation">>, false) of
false -> false ->
{error, 'bad-request'}; {error, 'bad-request'};
StrAffiliation -> StrAffiliation ->
@ -2764,8 +2764,8 @@ send_kickban_presence1(UJID, Reason, Code, Affiliation, StateData) ->
SAffiliation = affiliation_to_binary(Affiliation), SAffiliation = affiliation_to_binary(Affiliation),
lists:foreach( lists:foreach(
fun({_LJID, Info}) -> fun({_LJID, Info}) ->
ItemAttrs = [?XMLATTR('affiliation', SAffiliation), ItemAttrs = [?XMLATTR(<<"affiliation">>, SAffiliation),
?XMLATTR('role', <<"none">>)], ?XMLATTR(<<"role">>, <<"none">>)],
ItemEls = case Reason of ItemEls = case Reason of
"" -> "" ->
[]; [];
@ -2776,14 +2776,14 @@ send_kickban_presence1(UJID, Reason, Code, Affiliation, StateData) ->
Packet = Packet =
#xmlel{ns = ?NS_JABBER_CLIENT, #xmlel{ns = ?NS_JABBER_CLIENT,
name = 'presence', name = 'presence',
attrs = [?XMLATTR('type', <<"unavailable">>)], attrs = [?XMLATTR(<<"type">>, <<"unavailable">>)],
children = [#xmlel{ns = ?NS_MUC_USER, name = 'x', children = [#xmlel{ns = ?NS_MUC_USER, name = 'x',
children = [ children = [
#xmlel{ns = ?NS_MUC_USER, name = 'item', #xmlel{ns = ?NS_MUC_USER, name = 'item',
attrs = ItemAttrs, attrs = ItemAttrs,
children = ItemEls}, children = ItemEls},
#xmlel{ns = ?NS_MUC_USER, name = 'status', #xmlel{ns = ?NS_MUC_USER, name = 'status',
attrs = [?XMLATTR('code', attrs = [?XMLATTR(<<"code">>,
Code)]}]}]}, Code)]}]}]},
ejabberd_router:route( ejabberd_router:route(
jid_replace_resource(StateData#state.jid, Nick), jid_replace_resource(StateData#state.jid, Nick),
@ -2802,7 +2802,7 @@ process_iq_owner(From, set, Lang, SubEl, StateData) ->
owner -> owner ->
case exmpp_xml:get_child_elements(SubEl) of case exmpp_xml:get_child_elements(SubEl) of
[#xmlel{ns = XMLNS, name = 'x'} = XEl] -> [#xmlel{ns = XMLNS, name = 'x'} = XEl] ->
case {XMLNS, exmpp_xml:get_attribute_as_binary(XEl, 'type',false)} of case {XMLNS, exmpp_xml:get_attribute_as_binary(XEl, <<"type">>,false)} of
{?NS_DATA_FORMS, <<"cancel">>} -> {?NS_DATA_FORMS, <<"cancel">>} ->
{result, [], StateData}; {result, [], StateData};
{?NS_DATA_FORMS, <<"submit">>} -> {?NS_DATA_FORMS, <<"submit">>} ->
@ -2842,7 +2842,7 @@ process_iq_owner(From, get, Lang, SubEl, StateData) ->
[] -> [] ->
get_config(Lang, StateData, From); get_config(Lang, StateData, From);
[Item] -> [Item] ->
case exmpp_xml:get_attribute_as_binary(Item, 'affiliation',false) of case exmpp_xml:get_attribute_as_binary(Item, <<"affiliation">>,false) of
false -> false ->
{error, 'bad-request'}; {error, 'bad-request'};
StrAffiliation -> StrAffiliation ->
@ -2954,9 +2954,9 @@ is_password_settings_correct(XEl, StateData) ->
-define(XFIELD(Type, Label, Var, Val), -define(XFIELD(Type, Label, Var, Val),
#xmlel{name = 'field', #xmlel{name = 'field',
attrs = [?XMLATTR('type', Type), attrs = [?XMLATTR(<<"type">>, Type),
?XMLATTR('label', translate:translate(Lang, Label)), ?XMLATTR(<<"label">>, translate:translate(Lang, Label)),
?XMLATTR('var', Var)], ?XMLATTR(<<"var">>, Var)],
children = [#xmlel{name = 'value', children = [#xmlel{name = 'value',
children = [#xmlcdata{cdata = Val} ]}]}). children = [#xmlcdata{cdata = Val} ]}]}).
@ -2996,8 +2996,8 @@ get_config(Lang, StateData, From) ->
list_to_binary(io_lib:format(translate:translate(Lang, "Configuration of room ~s"), list_to_binary(io_lib:format(translate:translate(Lang, "Configuration of room ~s"),
[exmpp_jid:to_list(StateData#state.jid)])) [exmpp_jid:to_list(StateData#state.jid)]))
}]}, }]},
#xmlel{name = 'field', attrs = [?XMLATTR('type', <<"hidden">>), #xmlel{name = 'field', attrs = [?XMLATTR(<<"type">>, <<"hidden">>),
?XMLATTR('var', <<"FORM_TYPE">>)], ?XMLATTR(<<"var">>, <<"FORM_TYPE">>)],
children = [#xmlel{name = 'value', children = [#xmlcdata{cdata = children = [#xmlel{name = 'value', children = [#xmlcdata{cdata =
<<"http://jabber.org/protocol/muc#roomconfig">> <<"http://jabber.org/protocol/muc#roomconfig">>
}]}]}, }]}]},
@ -3032,44 +3032,44 @@ get_config(Lang, StateData, From) ->
false -> "" false -> ""
end), end),
#xmlel{name = 'field', attrs = [ #xmlel{name = 'field', attrs = [
?XMLATTR('type', <<"list-single">>), ?XMLATTR(<<"type">>, <<"list-single">>),
?XMLATTR('label', translate:translate(Lang, ?XMLATTR(<<"label">>, translate:translate(Lang,
"Maximum Number of Occupants")), "Maximum Number of Occupants")),
?XMLATTR('var', <<"muc#roomconfig_maxusers">>)], ?XMLATTR(<<"var">>, <<"muc#roomconfig_maxusers">>)],
children = [#xmlel{name = 'value', children = [#xmlel{name = 'value',
children = [#xmlcdata{cdata = children = [#xmlcdata{cdata =
list_to_binary(MaxUsersRoomString)}]}] ++ list_to_binary(MaxUsersRoomString)}]}] ++
if if
is_integer(ServiceMaxUsers) -> []; is_integer(ServiceMaxUsers) -> [];
true -> true ->
[#xmlel{name = 'option', attrs = [?XMLATTR('label', [#xmlel{name = 'option', attrs = [?XMLATTR(<<"label">>,
translate:translate(Lang, "No limit"))], translate:translate(Lang, "No limit"))],
children = [#xmlel{name = 'value', children = [#xmlel{name = 'value',
children = [#xmlcdata{cdata = <<"none">>}]}]}] children = [#xmlcdata{cdata = <<"none">>}]}]}]
end ++ end ++
[#xmlel{name = 'option', attrs = [?XMLATTR('label', N)], [#xmlel{name = 'option', attrs = [?XMLATTR(<<"label">>, N)],
children = [#xmlel{name = 'value', children = [ children = [#xmlel{name = 'value', children = [
#xmlcdata{cdata = list_to_binary(erlang:integer_to_list(N))}]}]} || #xmlcdata{cdata = list_to_binary(erlang:integer_to_list(N))}]}]} ||
N <- lists:usort([ServiceMaxUsers, DefaultRoomMaxUsers, MaxUsersRoomInteger | N <- lists:usort([ServiceMaxUsers, DefaultRoomMaxUsers, MaxUsersRoomInteger |
?MAX_USERS_DEFAULT_LIST]), N =< ServiceMaxUsers]}, ?MAX_USERS_DEFAULT_LIST]), N =< ServiceMaxUsers]},
#xmlel{name = 'field', attrs = [ #xmlel{name = 'field', attrs = [
?XMLATTR('type', <<"list-single">>), ?XMLATTR(<<"type">>, <<"list-single">>),
?XMLATTR('label', ?XMLATTR(<<"label">>,
translate:translate(Lang, "Present real Jabber IDs to")), translate:translate(Lang, "Present real Jabber IDs to")),
?XMLATTR('var', <<"muc#roomconfig_whois">>)], ?XMLATTR(<<"var">>, <<"muc#roomconfig_whois">>)],
children = [#xmlel{name = 'value', children = [#xmlel{name = 'value',
children = [#xmlcdata{cdata = children = [#xmlcdata{cdata =
if Config#config.anonymous -> <<"moderators">>; if Config#config.anonymous -> <<"moderators">>;
true -> <<"anyone">> true -> <<"anyone">>
end}]}, end}]},
#xmlel{name = 'option', attrs = [ #xmlel{name = 'option', attrs = [
?XMLATTR('label', ?XMLATTR(<<"label">>,
translate:translate(Lang, "moderators only"))], translate:translate(Lang, "moderators only"))],
children = [#xmlel{name = 'value', children = [#xmlel{name = 'value',
children = [#xmlcdata{cdata = children = [#xmlcdata{cdata =
<<"moderators">>}]}]}, <<"moderators">>}]}]},
#xmlel{name = 'option', attrs = [ #xmlel{name = 'option', attrs = [
?XMLATTR('label', ?XMLATTR(<<"label">>,
translate:translate(Lang, "anyone"))], translate:translate(Lang, "anyone"))],
children = [#xmlel{name = 'value', children = [#xmlel{name = 'value',
children = [#xmlcdata{cdata = children = [#xmlcdata{cdata =
@ -3122,7 +3122,7 @@ get_config(Lang, StateData, From) ->
#xmlcdata{cdata = translate:translate(Lang, #xmlcdata{cdata = translate:translate(Lang,
"You need an x:data capable client to configure room")}]}, "You need an x:data capable client to configure room")}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'x', #xmlel{ns = ?NS_DATA_FORMS, name = 'x',
attrs = [?XMLATTR('type', <<"form">>)], attrs = [?XMLATTR(<<"type">>, <<"form">>)],
children = Res}], children = Res}],
StateData}. StateData}.
@ -3364,11 +3364,11 @@ destroy_room(DEl, StateData) ->
lists:foreach( lists:foreach(
fun({_LJID, Info}) -> fun({_LJID, Info}) ->
Nick = Info#user.nick, Nick = Info#user.nick,
ItemAttrs = [?XMLATTR('affiliation', <<"none">>), ItemAttrs = [?XMLATTR(<<"affiliation">>, <<"none">>),
?XMLATTR('role', <<"none">>)], ?XMLATTR(<<"role">>, <<"none">>)],
Packet = #xmlel{ns = ?NS_JABBER_CLIENT, Packet = #xmlel{ns = ?NS_JABBER_CLIENT,
name = 'presence', name = 'presence',
attrs = [?XMLATTR('type', attrs = [?XMLATTR(<<"type">>,
<<"unavailable">>)], <<"unavailable">>)],
children = [ children = [
#xmlel{ns = ?NS_MUC_USER, name = 'x', children = #xmlel{ns = ?NS_MUC_USER, name = 'x', children =
@ -3394,7 +3394,7 @@ destroy_room(DEl, StateData) ->
% Disco % Disco
-define(FEATURE(Var), #xmlel{name = 'feature', -define(FEATURE(Var), #xmlel{name = 'feature',
attrs = [?XMLATTR('var', Var)]}). attrs = [?XMLATTR(<<"var">>, Var)]}).
-define(CONFIG_OPT_TO_FEATURE(Opt, Fiftrue, Fiffalse), -define(CONFIG_OPT_TO_FEATURE(Opt, Fiftrue, Fiffalse),
case Opt of case Opt of
@ -3410,13 +3410,13 @@ process_iq_disco_info(_From, set, _Lang, _StateData) ->
process_iq_disco_info(_From, get, Lang, StateData) -> process_iq_disco_info(_From, get, Lang, StateData) ->
Config = StateData#state.config, Config = StateData#state.config,
{result, [ #xmlel{name = 'identity', {result, [ #xmlel{name = 'identity',
attrs = [?XMLATTR('category', attrs = [?XMLATTR(<<"category">>,
<<"conference">>), <<"conference">>),
?XMLATTR('type', <<"text">>), ?XMLATTR(<<"type">>, <<"text">>),
?XMLATTR('name', ?XMLATTR(<<"name">>,
get_title(StateData))]}, get_title(StateData))]},
#xmlel{name = 'feature', #xmlel{name = 'feature',
attrs = [?XMLATTR('var', ?NS_MUC_s)]}, attrs = [?XMLATTR(<<"var">>, ?NS_MUC_s)]},
?CONFIG_OPT_TO_FEATURE(Config#config.public, ?CONFIG_OPT_TO_FEATURE(Config#config.public,
"muc_public", "muc_hidden"), "muc_public", "muc_hidden"),
@ -3433,15 +3433,15 @@ process_iq_disco_info(_From, get, Lang, StateData) ->
] ++ iq_disco_info_extras(Lang, StateData), StateData}. ] ++ iq_disco_info_extras(Lang, StateData), StateData}.
-define(RFIELDT(Type, Var, Val), -define(RFIELDT(Type, Var, Val),
#xmlel{name = 'field', attrs = [?XMLATTR('type', Type), #xmlel{name = 'field', attrs = [?XMLATTR(<<"type">>, Type),
?XMLATTR('var', Var)], ?XMLATTR(<<"var">>, Var)],
children = [#xmlel{name = 'value', children = [#xmlel{name = 'value',
children = [#xmlcdata{cdata = list_to_binary(Val)}]}]}). children = [#xmlcdata{cdata = list_to_binary(Val)}]}]}).
-define(RFIELD(Label, Var, Val), -define(RFIELD(Label, Var, Val),
#xmlel{name = 'field', attrs = [?XMLATTR('label', #xmlel{name = 'field', attrs = [?XMLATTR(<<"label">>,
translate:translate(Lang, Label)), translate:translate(Lang, Label)),
?XMLATTR('var', Var)], ?XMLATTR(<<"var">>, Var)],
children = [#xmlel{name = 'value', children = [ children = [#xmlel{name = 'value', children = [
#xmlcdata{cdata = list_to_binary(Val)}]}]}). #xmlcdata{cdata = list_to_binary(Val)}]}]}).
@ -3449,7 +3449,7 @@ iq_disco_info_extras(Lang, StateData) ->
Len = length(?DICT:to_list(StateData#state.users)), Len = length(?DICT:to_list(StateData#state.users)),
RoomDescription = (StateData#state.config)#config.description, RoomDescription = (StateData#state.config)#config.description,
[#xmlel{ns = ?NS_DATA_FORMS, name = 'x', [#xmlel{ns = ?NS_DATA_FORMS, name = 'x',
attrs = [?XMLATTR('type', <<"result">>)], attrs = [?XMLATTR(<<"type">>, <<"result">>)],
children = children =
[?RFIELDT("hidden", "FORM_TYPE", [?RFIELDT("hidden", "FORM_TYPE",
"http://jabber.org/protocol/muc#roominfo"), "http://jabber.org/protocol/muc#roominfo"),
@ -3520,12 +3520,12 @@ get_mucroom_disco_items(StateData) ->
lists:map( lists:map(
fun({_LJID, Info}) -> fun({_LJID, Info}) ->
Nick = Info#user.nick, Nick = Info#user.nick,
#xmlel{name = 'item', attrs = [?XMLATTR('jid', #xmlel{name = 'item', attrs = [?XMLATTR(<<"jid">>,
exmpp_jid:to_binary( exmpp_jid:to_binary(
StateData#state.room, StateData#state.room,
StateData#state.host, StateData#state.host,
Nick)), Nick)),
?XMLATTR('name', ?XMLATTR(<<"name">>,
Nick)]} Nick)]}
end, end,
?DICT:to_list(StateData#state.users)). ?DICT:to_list(StateData#state.users)).
@ -3554,7 +3554,7 @@ check_invitation(From, Els, Lang, StateData) ->
throw({error, 'bad-request'}) throw({error, 'bad-request'})
end, end,
JID = try exmpp_jid:parse(exmpp_xml:get_attribute_as_binary(InviteEl, JID = try exmpp_jid:parse(exmpp_xml:get_attribute_as_binary(InviteEl,
'to', <<"to">>,
false)) of false)) of
JID1 -> JID1 JID1 -> JID1
catch catch
@ -3579,7 +3579,7 @@ check_invitation(From, Els, Lang, StateData) ->
IEl = IEl =
[#xmlel{ns = ?NS_MUC_USER, [#xmlel{ns = ?NS_MUC_USER,
name = 'invite', name = 'invite',
attrs = [?XMLATTR('from', attrs = [?XMLATTR(<<"from">>,
exmpp_jid:to_binary(From))], exmpp_jid:to_binary(From))],
children = [#xmlel{ns =?NS_MUC_USER, name = 'reason', children = [#xmlel{ns =?NS_MUC_USER, name = 'reason',
children = [#xmlcdata{cdata = Reason} ]}] children = [#xmlcdata{cdata = Reason} ]}]
@ -3621,11 +3621,11 @@ check_invitation(From, Els, Lang, StateData) ->
%%TODO: always NS_JABBER_CLIENT? %%TODO: always NS_JABBER_CLIENT?
Msg = Msg =
#xmlel{ns = ?NS_JABBER_CLIENT, name = 'message', #xmlel{ns = ?NS_JABBER_CLIENT, name = 'message',
attrs = [?XMLATTR('type', <<"normal">>)], attrs = [?XMLATTR(<<"type">>, <<"normal">>)],
children = [#xmlel{ns = ?NS_MUC_USER, name = 'x', children = [#xmlel{ns = ?NS_MUC_USER, name = 'x',
children = IEl ++ PasswdEl}, children = IEl ++ PasswdEl},
#xmlel{ns = 'jabber:x:conference', name = 'x', #xmlel{ns = 'jabber:x:conference', name = 'x',
attrs = [?XMLATTR('jid', attrs = [?XMLATTR(<<"jid">>,
exmpp_jid:to_binary( exmpp_jid:to_binary(
StateData#state.room, StateData#state.room,
StateData#state.host) StateData#state.host)
@ -3655,7 +3655,7 @@ check_decline_invitation(Packet) ->
#xmlel{name = 'message'} = Packet, #xmlel{name = 'message'} = Packet,
#xmlel{ns = ?NS_MUC_USER} = XEl = exmpp_xml:get_element(Packet, 'x'), #xmlel{ns = ?NS_MUC_USER} = XEl = exmpp_xml:get_element(Packet, 'x'),
DEl = exmpp_xml:get_element(XEl, 'decline'), DEl = exmpp_xml:get_element(XEl, 'decline'),
ToString = exmpp_xml:get_attribute_as_binary(DEl, 'to', false), ToString = exmpp_xml:get_attribute_as_binary(DEl, <<"to">>, false),
ToJID = exmpp_jid:parse(ToString), ToJID = exmpp_jid:parse(ToString),
{true, {Packet, XEl, DEl, ToJID}}. {true, {Packet, XEl, DEl, ToJID}}.
@ -3666,7 +3666,7 @@ send_decline_invitation({Packet, XEl, DEl = #xmlel{name='decline'}, ToJID},
FromString = exmpp_jid:to_binary(FromJID), FromString = exmpp_jid:to_binary(FromJID),
DEl1 = exmpp_xml:remove_attribute(DEl, 'to'), DEl1 = exmpp_xml:remove_attribute(DEl, 'to'),
DEl2 = exmpp_xml:set_attribute(DEl1, 'from',FromString), DEl2 = exmpp_xml:set_attribute(DEl1, <<"from">>,FromString),
XEl2 = replace_subelement(XEl,DEl2), XEl2 = replace_subelement(XEl,DEl2),
Packet2 = replace_subelement(Packet,XEl2), Packet2 = replace_subelement(Packet,XEl2),
ejabberd_router:route(RoomJID, ToJID, Packet2). ejabberd_router:route(RoomJID, ToJID, Packet2).

View File

@ -206,7 +206,7 @@ handle_info({route, From, To, #xmlel{name=iq} = Packet}, State) ->
ejabberd_router:route(To, From, Err); ejabberd_router:route(To, From, Err);
reply -> reply ->
LServiceS = jts(To), LServiceS = jts(To),
case exmpp_xml:get_attribute_as_list(Packet, type, "error") of case exmpp_xml:get_attribute_as_list(Packet, <<"type">>, "error") of
"result" -> process_iqreply_result(From, LServiceS, Packet, State); "result" -> process_iqreply_result(From, LServiceS, Packet, State);
"error" -> process_iqreply_error(From, LServiceS, Packet) "error" -> process_iqreply_error(From, LServiceS, Packet)
end end
@ -299,13 +299,13 @@ process_iq(_, #iq{type=Type}, _) when Type==result; Type==error ->
process_iq(_, _IQ, _) -> process_iq(_, _IQ, _) ->
unknown_iq. unknown_iq.
-define(FEATURE(Feat), #xmlel{name = feature, attrs = [#xmlattr{name = var, value = Feat}]}). -define(FEATURE(Feat), #xmlel{name = feature, attrs = [#xmlattr{name = <<"var">>, value = Feat}]}).
iq_disco_info(From, Lang, State) -> iq_disco_info(From, Lang, State) ->
[#xmlel{ns = ?NS_DISCO_INFO, name = 'identity', [#xmlel{ns = ?NS_DISCO_INFO, name = 'identity',
attrs = [?XMLATTR('category', <<"service">>), attrs = [?XMLATTR(<<"category">>, <<"service">>),
?XMLATTR('type', <<"multicast">>), ?XMLATTR(<<"type">>, <<"multicast">>),
?XMLATTR('name', translate:translate(Lang, ?XMLATTR(<<"name">>, translate:translate(Lang,
"Multicast"))]}, "Multicast"))]},
?FEATURE(?NS_DISCO_INFO_b), ?FEATURE(?NS_DISCO_INFO_b),
?FEATURE(?NS_DISCO_ITEMS_b), ?FEATURE(?NS_DISCO_ITEMS_b),
@ -342,8 +342,8 @@ route_trusted(LServiceS, LServerS, FromJID, Destinations, Packet) ->
DS = jts(D), DS = jts(D),
XML = #xmlel{name = address, XML = #xmlel{name = address,
ns = ?NS_ADDRESS, ns = ?NS_ADDRESS,
attrs = [#xmlattr{name = type, value = <<"bcc">>}, attrs = [#xmlattr{name = <<"type">>, value = <<"bcc">>},
#xmlattr{name = jid, value = list_to_binary(DS)}] }, #xmlattr{name = <<"jid">>, value = list_to_binary(DS)}] },
#dest{jid_string = DS, #dest{jid_string = DS,
jid_jid = D, jid_jid = D,
type = "bcc", type = "bcc",
@ -479,10 +479,10 @@ split_addresses_todeliver(Addresses) ->
fun(XML) -> fun(XML) ->
case XML of case XML of
#xmlel{name = address} = Packet -> #xmlel{name = address} = Packet ->
case exmpp_xml:get_attribute_as_binary(Packet, "delivered", no_delivered) of case exmpp_xml:get_attribute_as_binary(Packet, <<"delivered">>, no_delivered) of
<<"true">> -> false; <<"true">> -> false;
_ -> _ ->
Type = exmpp_xml:get_attribute_as_binary(Packet, "type", no_type), Type = exmpp_xml:get_attribute_as_binary(Packet, <<"type">>, no_type),
case Type of case Type of
<<"to">> -> true; <<"to">> -> true;
<<"cc">> -> true; <<"cc">> -> true;
@ -516,11 +516,11 @@ check_limit_dests(SLimits, FromJID, Packet, Addresses) ->
convert_dest_record(XMLs) -> convert_dest_record(XMLs) ->
lists:map( lists:map(
fun(XML) -> fun(XML) ->
case exmpp_xml:get_attribute_as_list(XML, jid, "") of case exmpp_xml:get_attribute_as_list(XML, <<"jid">>, "") of
[] -> [] ->
#dest{jid_string = none, full_xml = XML}; #dest{jid_string = none, full_xml = XML};
JIDS -> JIDS ->
Type = exmpp_xml:get_attribute_as_list(XML, type, ""), Type = exmpp_xml:get_attribute_as_list(XML, <<"type">>, ""),
JIDJ = stj(JIDS), JIDJ = stj(JIDS),
#dest{jid_string = JIDS, #dest{jid_string = JIDS,
jid_jid = JIDJ, jid_jid = JIDJ,
@ -603,7 +603,7 @@ build_other_xml(Dests) ->
Dests). Dests).
add_delivered(Stanza) -> add_delivered(Stanza) ->
exmpp_xml:set_attribute(Stanza, delivered, 'true'). exmpp_xml:set_attribute(Stanza, <<"delivered">>, <<"true">>).
%%%================================== %%%==================================
%%%% Add preliminary packets %%%% Add preliminary packets
@ -782,7 +782,7 @@ process_discoinfo_result2(From, FromS, LServiceS, Els, Waiter) ->
fun(XML) -> fun(XML) ->
case XML of case XML of
#xmlel{name = feature, attrs = Attrs} -> #xmlel{name = feature, attrs = Attrs} ->
?NS_ADDRESS_b == exmpp_xml:get_attribute_from_list_as_binary(Attrs, var, ""); ?NS_ADDRESS_b == exmpp_xml:get_attribute_from_list_as_binary(Attrs, <<"var">>, "");
_ -> false _ -> false
end end
end, end,
@ -850,8 +850,9 @@ get_limits_els(Els) ->
fun(XML, R) -> fun(XML, R) ->
case XML of case XML of
#xmlel{name = x, attrs = Attrs, children = SubEls} -> #xmlel{name = x, attrs = Attrs, children = SubEls} ->
case (?NS_DATA_FORMS_b == exmpp_xml:get_attribute_from_list_as_binary(Attrs, xmlns, "")) and %%TODO: do ask for "xmlns" works here?. Seems it should ask for namespace?
(<<"result">> == exmpp_xml:get_attribute_from_list_as_binary(Attrs, type, "")) of case (?NS_DATA_FORMS_b == exmpp_xml:get_attribute_from_list_as_binary(Attrs, <<"xmlns">>, "")) and
(<<"result">> == exmpp_xml:get_attribute_from_list_as_binary(Attrs, <<"type">>, "")) of
true -> get_limits_fields(SubEls) ++ R; true -> get_limits_fields(SubEls) ++ R;
false -> R false -> R
end; end;
@ -867,8 +868,8 @@ get_limits_fields(Fields) ->
fun(Field) -> fun(Field) ->
case Field of case Field of
#xmlel{name = field, attrs = Attrs} -> #xmlel{name = field, attrs = Attrs} ->
(<<"FORM_TYPE">> == exmpp_xml:get_attribute_from_list_as_binary(Attrs, var, "")) (<<"FORM_TYPE">> == exmpp_xml:get_attribute_from_list_as_binary(Attrs, <<"var">>, ""))
and (<<"hidden">> == exmpp_xml:get_attribute_from_list_as_binary(Attrs, type, "")); and (<<"hidden">> == exmpp_xml:get_attribute_from_list_as_binary(Attrs, <<"type">>, ""));
_ -> false _ -> false
end end
end, end,
@ -887,7 +888,7 @@ get_limits_values(Values) ->
%% TODO: Only one subel is expected here, but there may be several %% TODO: Only one subel is expected here, but there may be several
#xmlel{children = SubElsV} = exmpp_xml:get_element(SubEls, value), #xmlel{children = SubElsV} = exmpp_xml:get_element(SubEls, value),
Number = exmpp_xml:get_cdata_from_list_as_list(SubElsV), Number = exmpp_xml:get_cdata_from_list_as_list(SubElsV),
Name = exmpp_xml:get_attribute_from_list_as_list(Attrs, var, ""), Name = exmpp_xml:get_attribute_from_list_as_list(Attrs, <<"var">>, ""),
[{list_to_atom(Name), list_to_integer(Number)} | R]; [{list_to_atom(Name), list_to_integer(Number)} | R];
_ -> R _ -> R
end end
@ -906,7 +907,7 @@ process_discoitems_result(From, LServiceS, Els) ->
%% For each one, if it's "item", look for jid %% For each one, if it's "item", look for jid
case XML of case XML of
#xmlel{name = item, attrs = Attrs} -> #xmlel{name = item, attrs = Attrs} ->
Res ++ [exmpp_xml:get_attribute_from_list_as_list(Attrs, jid, "")]; Res ++ [exmpp_xml:get_attribute_from_list_as_list(Attrs, <<"jid">>, "")];
_ -> Res _ -> Res
end end
end, end,
@ -1197,13 +1198,13 @@ fragment_dests(Dests, Limit_number) ->
%% Some parts of code are borrowed from mod_muc_room.erl %% Some parts of code are borrowed from mod_muc_room.erl
-define(RFIELDT(Type, Var, Val), -define(RFIELDT(Type, Var, Val),
#xmlel{name = 'field', attrs = [?XMLATTR('type', Type), #xmlel{name = 'field', attrs = [?XMLATTR(<<"type">>, Type),
?XMLATTR('var', Var)], ?XMLATTR(<<"var">>, Var)],
children = [#xmlel{name = 'value', children = [#xmlel{name = 'value',
children = [#xmlcdata{cdata = Val}]}]}). children = [#xmlcdata{cdata = Val}]}]}).
-define(RFIELDV(Var, Val), -define(RFIELDV(Var, Val),
#xmlel{name = 'field', attrs = [?XMLATTR('var', Var)], #xmlel{name = 'field', attrs = [?XMLATTR(<<"var">>, Var)],
children = [#xmlel{name = 'value', children = [#xmlel{name = 'value',
children = [#xmlcdata{cdata = Val}]}]}). children = [#xmlcdata{cdata = Val}]}]}).
@ -1214,7 +1215,7 @@ iq_disco_info_extras(From, State) ->
[] -> []; [] -> [];
List_limits_xmpp -> List_limits_xmpp ->
Children = [?RFIELDT("hidden", "FORM_TYPE", ?NS_ADDRESS)] ++ List_limits_xmpp, Children = [?RFIELDT("hidden", "FORM_TYPE", ?NS_ADDRESS)] ++ List_limits_xmpp,
[#xmlel{name = x, ns = ?NS_DATA_FORMS, attrs = [#xmlattr{name = type, value = <<"result">>}], children = Children}] [#xmlel{name = x, ns = ?NS_DATA_FORMS, attrs = [#xmlattr{name = <<"type">>, value = <<"result">>}], children = Children}]
end. end.
sender_type(From) -> sender_type(From) ->

View File

@ -320,7 +320,7 @@ find_x_event_chatstates([_ | Els], {A, B, _}) ->
find_x_expire(_, []) -> find_x_expire(_, []) ->
0; 0;
find_x_expire(TimeStamp, [#xmlel{ns = ?NS_MESSAGE_EXPIRE} = El | _Els]) -> find_x_expire(TimeStamp, [#xmlel{ns = ?NS_MESSAGE_EXPIRE} = El | _Els]) ->
Val = exmpp_xml:get_attribute_as_list(El, 'seconds', ""), Val = exmpp_xml:get_attribute_as_list(El, <<"seconds">>, ""),
case catch list_to_integer(Val) of case catch list_to_integer(Val) of
{'EXIT', _} -> {'EXIT', _} ->
0; 0;
@ -541,7 +541,7 @@ find_x_timestamp([{xmlcdata, _} | Els]) ->
find_x_timestamp(Els); find_x_timestamp(Els);
find_x_timestamp([#xmlel{ns = ?NS_DELAY} = El | Els]) -> find_x_timestamp([#xmlel{ns = ?NS_DELAY} = El | Els]) ->
Stamp = exmpp_xml:get_attribute_as_list(El, 'stamp', ""), Stamp = exmpp_xml:get_attribute_as_list(El, <<"stamp">>, ""),
case jlib:datetime_string_to_timestamp(Stamp) of case jlib:datetime_string_to_timestamp(Stamp) of
undefined -> find_x_timestamp(Els); undefined -> find_x_timestamp(Els);
{MegaSecs, Secs, _MicroSecs} -> MegaSecs * 1000000 + Secs {MegaSecs, Secs, _MicroSecs} -> MegaSecs * 1000000 + Secs
@ -611,11 +611,11 @@ user_queue(User, Server, Query, Lang) ->
exmpp_xml:indent_document(Packet1, <<" ">>), exmpp_xml:indent_document(Packet1, <<" ">>),
[?DEFAULT_NS], ?PREFIXED_NS), [?DEFAULT_NS], ?PREFIXED_NS),
?XE("tr", ?XE("tr",
[?XAE("td", [?XMLATTR('class', <<"valign">>)], [?INPUT("checkbox", "selected", ID)]), [?XAE("td", [?XMLATTR(<<"class">>, <<"valign">>)], [?INPUT("checkbox", "selected", ID)]),
?XAC("td", [?XMLATTR('class', <<"valign">>)], Time), ?XAC("td", [?XMLATTR(<<"class">>, <<"valign">>)], Time),
?XAC("td", [?XMLATTR('class', <<"valign">>)], SFrom), ?XAC("td", [?XMLATTR(<<"class">>, <<"valign">>)], SFrom),
?XAC("td", [?XMLATTR('class', <<"valign">>)], STo), ?XAC("td", [?XMLATTR(<<"class">>, <<"valign">>)], STo),
?XAE("td", [?XMLATTR('class', <<"valign">>)], [?XC("pre", FPacket)])] ?XAE("td", [?XMLATTR(<<"class">>, <<"valign">>)], [?XC("pre", FPacket)])]
) )
end, Msgs), end, Msgs),
[?XC("h1", io_lib:format(?T("~s's Offline Messages Queue"), [?XC("h1", io_lib:format(?T("~s's Offline Messages Queue"),
@ -624,7 +624,7 @@ user_queue(User, Server, Query, Lang) ->
ok -> [?CT("Submitted"), ?P]; ok -> [?CT("Submitted"), ?P];
nothing -> [] nothing -> []
end ++ end ++
[?XAE("form", [?XMLATTR('action', <<"">>), ?XMLATTR('method', <<"post">>)], [?XAE("form", [?XMLATTR(<<"action">>, <<"">>), ?XMLATTR(<<"method">>, <<"post">>)],
[?XE("table", [?XE("table",
[?XE("thead", [?XE("thead",
[?XE("tr", [?XE("tr",
@ -638,7 +638,7 @@ user_queue(User, Server, Query, Lang) ->
if if
FMsgs == [] -> FMsgs == [] ->
[?XE("tr", [?XE("tr",
[?XAC("td", [?XMLATTR('colspan', <<"4">>)], " ")] [?XAC("td", [?XMLATTR(<<"colspan">>, <<"4">>)], " ")]
)]; )];
true -> true ->
FMsgs FMsgs

View File

@ -289,7 +289,7 @@ find_x_event_chatstates([_ | Els], {A, B, _}) ->
find_x_expire(_, []) -> find_x_expire(_, []) ->
never; never;
find_x_expire(TimeStamp, [#xmlel{ns = ?NS_MESSAGE_EXPIRE} = El | _Els]) -> find_x_expire(TimeStamp, [#xmlel{ns = ?NS_MESSAGE_EXPIRE} = El | _Els]) ->
Val = exmpp_xml:get_attribute_as_list(El, 'seconds', ""), Val = exmpp_xml:get_attribute_as_list(El, <<"seconds">>, ""),
case catch list_to_integer(Val) of case catch list_to_integer(Val) of
{'EXIT', _} -> {'EXIT', _} ->
never; never;
@ -319,7 +319,7 @@ pop_offline_messages(Ls, User, Server)
try try
[El] = exmpp_xml:parse_document(XML, [El] = exmpp_xml:parse_document(XML,
[names_as_atom, {check_elems, xmpp}, [names_as_atom, {check_elems, xmpp},
{check_nss,xmpp}, {check_attrs,xmpp}]), {check_nss,xmpp} ]),
To = exmpp_jid:parse( To = exmpp_jid:parse(
exmpp_stanza:get_recipient(El)), exmpp_stanza:get_recipient(El)),
From = exmpp_jid:parse( From = exmpp_jid:parse(
@ -400,7 +400,7 @@ user_queue(User, Server, Query, Lang) ->
fun({_, XML}) -> fun({_, XML}) ->
try exmpp_xml:parse_document(XML, try exmpp_xml:parse_document(XML,
[names_as_atom, {check_elems, xmpp}, [names_as_atom, {check_elems, xmpp},
{check_nss,xmpp}, {check_attrs,xmpp}]) of {check_nss,xmpp}]) of
[El] -> [El] ->
[El] [El]
catch catch
@ -426,8 +426,8 @@ user_queue(User, Server, Query, Lang) ->
exmpp_xml:indent_document(Packet, <<" ">>), exmpp_xml:indent_document(Packet, <<" ">>),
[?DEFAULT_NS], ?PREFIXED_NS), [?DEFAULT_NS], ?PREFIXED_NS),
?XE("tr", ?XE("tr",
[?XAE("td", [?XMLATTR('class', <<"valign">>)], [?INPUT("checkbox", "selected", ID)]), [?XAE("td", [?XMLATTR(<<"class">>, <<"valign">>)], [?INPUT("checkbox", "selected", ID)]),
?XAE("td", [?XMLATTR('class', <<"valign">>)], [?XC("pre", FPacket)])] ?XAE("td", [?XMLATTR(<<"class">>, <<"valign">>)], [?XC("pre", FPacket)])]
) )
end, Msgs), end, Msgs),
[?XC("h1", io_lib:format(?T("~s's Offline Messages Queue"), [?XC("h1", io_lib:format(?T("~s's Offline Messages Queue"),
@ -436,7 +436,7 @@ user_queue(User, Server, Query, Lang) ->
ok -> [?XREST("Submitted")]; ok -> [?XREST("Submitted")];
nothing -> [] nothing -> []
end ++ end ++
[?XAE("form", [?XMLATTR('action', <<"">>), ?XMLATTR('method', <<"post">>)], [?XAE("form", [?XMLATTR(<<"action">>, <<"">>), ?XMLATTR(<<"method">>, <<"post">>)],
[?XE("table", [?XE("table",
[?XE("thead", [?XE("thead",
[?XE("tr", [?XE("tr",
@ -447,7 +447,7 @@ user_queue(User, Server, Query, Lang) ->
if if
FMsgs == [] -> FMsgs == [] ->
[?XE("tr", [?XE("tr",
[?XAC("td", [?XMLATTR('colspan', <<"4">>)], " ")] [?XAC("td", [?XMLATTR(<<"colspan">>, <<"4">>)], " ")]
)]; )];
true -> true ->
FMsgs FMsgs
@ -472,7 +472,7 @@ user_queue_parse_query(Username, LServer, Query) ->
fun({XML, Seq}) -> fun({XML, Seq}) ->
try exmpp_xml:parse_document(XML, try exmpp_xml:parse_document(XML,
[names_as_atom, {check_elems, xmpp}, [names_as_atom, {check_elems, xmpp},
{check_nss,xmpp}, {check_attrs,xmpp}]) of {check_nss,xmpp} ]) of
[El] -> [El] ->
[{El, Seq}] [{El, Seq}]
catch catch

View File

@ -204,7 +204,7 @@ process_iq_get(_, From, _To, #iq{payload = SubEl},
[#xmlel{name = Name} = Child] -> [#xmlel{name = Name} = Child] ->
case Name of case Name of
list -> list ->
ListName = exmpp_xml:get_attribute_as_list(Child, name, false), ListName = exmpp_xml:get_attribute_as_list(Child, <<"name">>, false),
process_list_get(LUser, LServer, ListName); process_list_get(LUser, LServer, ListName);
_ -> _ ->
{error, 'bad-request'} {error, 'bad-request'}
@ -236,20 +236,20 @@ process_lists_get(LUser, LServer, Active) ->
[] -> [] ->
{result, #xmlel{ns = ?NS_PRIVACY, name = 'query'}}; {result, #xmlel{ns = ?NS_PRIVACY, name = 'query'}};
_ -> _ ->
LItems = [exmpp_xml:set_attribute(#xmlel{ns = ?NS_PRIVACY, name = list}, name, N) || N <- Lists], LItems = [exmpp_xml:set_attribute(#xmlel{ns = ?NS_PRIVACY, name = list}, <<"name">>, N) || N <- Lists],
DItems = DItems =
case Default of case Default of
none -> none ->
LItems; LItems;
_ -> _ ->
[exmpp_xml:set_attribute(#xmlel{ns = ?NS_PRIVACY, name = default}, name, Default) | LItems] [exmpp_xml:set_attribute(#xmlel{ns = ?NS_PRIVACY, name = default}, <<"name">>, Default) | LItems]
end, end,
ADItems = ADItems =
case Active of case Active of
none -> none ->
DItems; DItems;
_ -> _ ->
[exmpp_xml:set_attribute(#xmlel{ns = ?NS_PRIVACY, name = active}, name, Active) | DItems] [exmpp_xml:set_attribute(#xmlel{ns = ?NS_PRIVACY, name = active}, <<"name">>, Active) | DItems]
end, end,
{result, #xmlel{ns = ?NS_PRIVACY, name = 'query', children = ADItems}} {result, #xmlel{ns = ?NS_PRIVACY, name = 'query', children = ADItems}}
end end
@ -279,20 +279,20 @@ process_list_get(LUser, LServer, Name) ->
{error, 'item-not-found'}; {error, 'item-not-found'};
{atomic, List} -> {atomic, List} ->
LItems = lists:map(fun item_to_xml/1, List), LItems = lists:map(fun item_to_xml/1, List),
ListEl = exmpp_xml:set_attribute(#xmlel{ns = ?NS_PRIVACY, name = list, children = LItems}, name, Name), ListEl = exmpp_xml:set_attribute(#xmlel{ns = ?NS_PRIVACY, name = list, children = LItems}, <<"name">>, Name),
{result,#xmlel{ns = ?NS_PRIVACY, name = 'query', children = [ListEl]}} {result,#xmlel{ns = ?NS_PRIVACY, name = 'query', children = [ListEl]}}
end. end.
item_to_xml(Item) -> item_to_xml(Item) ->
Attrs1 = [?XMLATTR('action', action_to_binary(Item#privacy_list_data.action)), Attrs1 = [?XMLATTR(<<"action">>, action_to_binary(Item#privacy_list_data.action)),
?XMLATTR('order', order_to_binary(Item#privacy_list_data.order))], ?XMLATTR(<<"order">>, order_to_binary(Item#privacy_list_data.order))],
Attrs2 = case Item#privacy_list_data.type of Attrs2 = case Item#privacy_list_data.type of
none -> none ->
Attrs1; Attrs1;
Type -> Type ->
[?XMLATTR('type', type_to_binary(Type)), [?XMLATTR(<<"type">>, type_to_binary(Type)),
?XMLATTR('value', Item#privacy_list_data.value) | ?XMLATTR(<<"value">>, Item#privacy_list_data.value) |
Attrs1] Attrs1]
end, end,
SubEls = case Item#privacy_list_data.match_all of SubEls = case Item#privacy_list_data.match_all of
@ -359,7 +359,7 @@ process_iq_set(_, From, _To, #iq{payload = SubEl}) ->
LServer = exmpp_jid:prep_domain_as_list(From), LServer = exmpp_jid:prep_domain_as_list(From),
case exmpp_xml:get_child_elements(SubEl) of case exmpp_xml:get_child_elements(SubEl) of
[#xmlel{name = Name} = Child] -> [#xmlel{name = Name} = Child] ->
ListName = exmpp_xml:get_attribute_as_list(Child, 'name', false), ListName = exmpp_xml:get_attribute_as_list(Child, <<"name">>, false),
case Name of case Name of
list -> list ->
process_list_set(LUser, LServer, ListName, process_list_set(LUser, LServer, ListName,
@ -477,7 +477,7 @@ process_list_set(LUser, LServer, Name, Els) ->
exmpp_jid:make(LUser, LServer), exmpp_jid:make(LUser, LServer),
exmpp_jid:make(LUser, LServer), exmpp_jid:make(LUser, LServer),
#xmlel{name = 'broadcast', ns = privacy_list, #xmlel{name = 'broadcast', ns = privacy_list,
attrs = [exmpp_xml:attribute(list_name, Name)], attrs = [?XMLATTR(<<"list_name">>, Name)],
children = [exmpp_xml:cdata(ListString)]}), children = [exmpp_xml:cdata(ListString)]}),
Res; Res;
_ -> _ ->
@ -512,7 +512,7 @@ process_list_set(LUser, LServer, Name, Els) ->
exmpp_jid:make(LUser, LServer), exmpp_jid:make(LUser, LServer),
exmpp_jid:make(LUser, LServer), exmpp_jid:make(LUser, LServer),
#xmlel{name = 'broadcast', ns = privacy_list, #xmlel{name = 'broadcast', ns = privacy_list,
attrs = [exmpp_xml:attribute(list_name, Name)], attrs = [?XMLATTR(<<"list_name">>, Name)],
children = [exmpp_xml:cdata(ListString)]}), children = [exmpp_xml:cdata(ListString)]}),
Res; Res;
_ -> _ ->
@ -532,10 +532,10 @@ parse_items([], Res) ->
%% lists:keysort(#listitem.order, Res); %% lists:keysort(#listitem.order, Res);
lists:reverse(Res); lists:reverse(Res);
parse_items([El = #xmlel{name = item} | Els], Res) -> parse_items([El = #xmlel{name = item} | Els], Res) ->
Type = exmpp_xml:get_attribute_as_list(El, type, false), Type = exmpp_xml:get_attribute_as_list(El, <<"type">>, false),
Value = exmpp_xml:get_attribute_as_binary(El, value, false), Value = exmpp_xml:get_attribute_as_binary(El, <<"value">>, false),
SAction =exmpp_xml:get_attribute_as_list(El, action, false), SAction =exmpp_xml:get_attribute_as_list(El, <<"action">>, false),
SOrder = exmpp_xml:get_attribute_as_list(El, order, false), SOrder = exmpp_xml:get_attribute_as_list(El, <<"order">>, false),
Action = case catch list_to_action(SAction) of Action = case catch list_to_action(SAction) of
{'EXIT', _} -> false; {'EXIT', _} -> false;
Val -> Val Val -> Val
@ -698,7 +698,7 @@ check_packet(_, User, Server,
'message' -> message; 'message' -> message;
'iq' -> iq; 'iq' -> iq;
'presence' -> 'presence' ->
case exmpp_xml:get_attribute(El, type, '') of case exmpp_xml:get_attribute(El, <<"type">>, '') of
%% notification %% notification
'' -> presence; '' -> presence;
'unavailable' -> presence; 'unavailable' -> presence;

View File

@ -91,7 +91,7 @@ process_iq_get(_, From, _To, #iq{payload = SubEl},
[#xmlel{name = Name} = Child] -> [#xmlel{name = Name} = Child] ->
case Name of case Name of
list -> list ->
ListName = exmpp_xml:get_attribute_as_list(Child, name, false), ListName = exmpp_xml:get_attribute_as_list(Child, <<"name">>, false),
process_list_get(LUser, LServer, ListName); process_list_get(LUser, LServer, ListName);
_ -> _ ->
{error, 'bad-request'} {error, 'bad-request'}
@ -116,21 +116,21 @@ process_lists_get(LUser, LServer, Active) ->
{selected, ["name"], Names} -> {selected, ["name"], Names} ->
LItems = lists:map( LItems = lists:map(
fun({N}) -> fun({N}) ->
exmpp_xml:set_attribute(#xmlel{ns = ?NS_PRIVACY, name = list}, name, N) exmpp_xml:set_attribute(#xmlel{ns = ?NS_PRIVACY, name = list}, <<"name">>, N)
end, Names), end, Names),
DItems = DItems =
case Default of case Default of
none -> none ->
LItems; LItems;
_ -> _ ->
[exmpp_xml:set_attribute(#xmlel{ns = ?NS_PRIVACY, name = default}, name, Default) | LItems] [exmpp_xml:set_attribute(#xmlel{ns = ?NS_PRIVACY, name = default}, <<"name">>, Default) | LItems]
end, end,
ADItems = ADItems =
case Active of case Active of
none -> none ->
DItems; DItems;
_ -> _ ->
[exmpp_xml:set_attribute(#xmlel{ns = ?NS_PRIVACY, name = active}, name, Active) | DItems] [exmpp_xml:set_attribute(#xmlel{ns = ?NS_PRIVACY, name = active}, <<"name">>, Active) | DItems]
end, end,
{result, #xmlel{ns = ?NS_PRIVACY, name = 'query', children = ADItems}}; {result, #xmlel{ns = ?NS_PRIVACY, name = 'query', children = ADItems}};
_ -> _ ->
@ -155,7 +155,7 @@ process_list_get(LUser, LServer, Name) ->
ListEl = exmpp_xml:set_attribute(#xmlel{name = list, ListEl = exmpp_xml:set_attribute(#xmlel{name = list,
ns = ?NS_PRIVACY, ns = ?NS_PRIVACY,
children = LItems}, children = LItems},
name, <<"name">>,
Name), Name),
{result, #xmlel{ns = ?NS_PRIVACY, name = 'query', children = [ListEl]}}; {result, #xmlel{ns = ?NS_PRIVACY, name = 'query', children = [ListEl]}};
_ -> _ ->
@ -167,14 +167,14 @@ process_list_get(LUser, LServer, Name) ->
item_to_xml(Item) -> item_to_xml(Item) ->
Attrs1 = [?XMLATTR('action', action_to_binary(Item#listitem.action)), Attrs1 = [?XMLATTR(<<"action">>, action_to_binary(Item#listitem.action)),
?XMLATTR('order', order_to_binary(Item#listitem.order))], ?XMLATTR(<<"order">>, order_to_binary(Item#listitem.order))],
Attrs2 = case Item#listitem.type of Attrs2 = case Item#listitem.type of
none -> none ->
Attrs1; Attrs1;
Type -> Type ->
[?XMLATTR('type', type_to_binary(Item#listitem.type)), [?XMLATTR(<<"type">>, type_to_binary(Item#listitem.type)),
?XMLATTR('value', value_to_binary(Type, Item#listitem.value)) | ?XMLATTR(<<"value">>, value_to_binary(Type, Item#listitem.value)) |
Attrs1] Attrs1]
end, end,
SubEls = case Item#listitem.match_all of SubEls = case Item#listitem.match_all of
@ -256,7 +256,7 @@ process_iq_set(_, From, _To, #iq{payload = SubEl}) ->
LServer = exmpp_jid:prep_domain_as_list(From), LServer = exmpp_jid:prep_domain_as_list(From),
case exmpp_xml:get_child_elements(SubEl) of case exmpp_xml:get_child_elements(SubEl) of
[#xmlel{name = Name} = Child] -> [#xmlel{name = Name} = Child] ->
ListName = exmpp_xml:get_attribute_as_list(Child, 'name', false), ListName = exmpp_xml:get_attribute_as_list(Child, <<"name">>, false),
case Name of case Name of
list -> list ->
process_list_set(LUser, LServer, ListName, process_list_set(LUser, LServer, ListName,
@ -370,7 +370,7 @@ process_list_set(LUser, LServer, Name, Els) ->
exmpp_jid:make(LUser, LServer), exmpp_jid:make(LUser, LServer),
exmpp_jid:make(LUser, LServer), exmpp_jid:make(LUser, LServer),
#xmlel{name = 'broadcast', ns = privacy_list, #xmlel{name = 'broadcast', ns = privacy_list,
attrs = [exmpp_xml:attribute(list_name, Name)], attrs = [?XMLATTR(<<"list_name">>, Name)],
children = [exmpp_xml:cdata(ListString)]}), children = [exmpp_xml:cdata(ListString)]}),
Res; Res;
_ -> _ ->
@ -407,7 +407,7 @@ process_list_set(LUser, LServer, Name, Els) ->
exmpp_jid:make(LUser, LServer), exmpp_jid:make(LUser, LServer),
exmpp_jid:make(LUser, LServer), exmpp_jid:make(LUser, LServer),
#xmlel{name = 'broadcast', ns = privacy_list, #xmlel{name = 'broadcast', ns = privacy_list,
attrs = [exmpp_xml:attribute(list_name, Name)], attrs = [?XMLATTR(<<"list_name">>, Name)],
children = [exmpp_xml:cdata(ListString)]}), children = [exmpp_xml:cdata(ListString)]}),
Res; Res;
_ -> _ ->
@ -426,10 +426,10 @@ parse_items([], Res) ->
%% Sort the items by their 'order' attribute %% Sort the items by their 'order' attribute
lists:keysort(#listitem.order, Res); lists:keysort(#listitem.order, Res);
parse_items([El = #xmlel{name = item} | Els], Res) -> parse_items([El = #xmlel{name = item} | Els], Res) ->
Type = exmpp_xml:get_attribute_as_list(El, type, false), Type = exmpp_xml:get_attribute_as_list(El, <<"type">>, false),
Value = exmpp_xml:get_attribute_as_list(El, value, false), Value = exmpp_xml:get_attribute_as_list(El, <<"value">>, false),
SAction =exmpp_xml:get_attribute_as_list(El, action, false), SAction =exmpp_xml:get_attribute_as_list(El, <<"action">>, false),
SOrder = exmpp_xml:get_attribute_as_list(El, order, false), SOrder = exmpp_xml:get_attribute_as_list(El, <<"order">>, false),
Action = case catch list_to_action(SAction) of Action = case catch list_to_action(SAction) of
{'EXIT', _} -> false; {'EXIT', _} -> false;
Val -> Val Val -> Val

View File

@ -158,7 +158,7 @@ get_data(LUser, LServer, [El | Els], Res) ->
{selected, ["data"], [{SData}]} -> {selected, ["data"], [{SData}]} ->
[Data] = exmpp_xml:parse_document(SData, [Data] = exmpp_xml:parse_document(SData,
[names_as_atom, {check_elems, xmpp}, [names_as_atom, {check_elems, xmpp},
{check_nss,xmpp}, {check_attrs,xmpp}]), {check_nss,xmpp} ]),
get_data(LUser, LServer, Els, [Data | Res]); get_data(LUser, LServer, Els, [Data | Res]);
%% MREMOND: I wonder when the query could return a vcard ? %% MREMOND: I wonder when the query could return a vcard ?
{selected, ["vcard"], []} -> {selected, ["vcard"], []} ->

View File

@ -163,7 +163,7 @@ process_iq(InitiatorJID, #iq{type = set, payload = SubEl, ns = ?NS_BYTESTREAMS}
case acl:match_rule(ServerHost, ACL, InitiatorJID) of case acl:match_rule(ServerHost, ACL, InitiatorJID) of
allow -> allow ->
ActivateEl = exmpp_xml:get_path(SubEl, [{element, 'activate'}]), ActivateEl = exmpp_xml:get_path(SubEl, [{element, 'activate'}]),
SID = exmpp_xml:get_attribute_as_list(SubEl, 'sid', ""), SID = exmpp_xml:get_attribute_as_list(SubEl, <<"sid">>, ""),
case catch exmpp_jid:parse(exmpp_xml:get_cdata_as_list(ActivateEl)) of case catch exmpp_jid:parse(exmpp_xml:get_cdata_as_list(ActivateEl)) of
TargetJID when ?IS_JID(TargetJID), SID /= "", TargetJID when ?IS_JID(TargetJID), SID /= "",
length(SID) =< 128, TargetJID /= InitiatorJID -> length(SID) =< 128, TargetJID /= InitiatorJID ->
@ -201,13 +201,13 @@ process_iq(_, _, _) ->
%%% Auxiliary functions. %%% Auxiliary functions.
%%%------------------------- %%%-------------------------
-define(FEATURE(Feat), #xmlel{ns = ?NS_DISCO_INFO, name = 'feature', -define(FEATURE(Feat), #xmlel{ns = ?NS_DISCO_INFO, name = 'feature',
attrs = [?XMLATTR('var', Feat)]}). attrs = [?XMLATTR(<<"var">>, Feat)]}).
iq_disco_info(Lang, Name) -> iq_disco_info(Lang, Name) ->
[#xmlel{ns = ?NS_DISCO_INFO, name = 'identity', attrs = [#xmlel{ns = ?NS_DISCO_INFO, name = 'identity', attrs =
[?XMLATTR('category', <<"proxy">>), [?XMLATTR(<<"category">>, <<"proxy">>),
?XMLATTR('type', <<"bytestreams">>), ?XMLATTR(<<"type">>, <<"bytestreams">>),
?XMLATTR('name', translate:translate(Lang, Name))]}, ?XMLATTR(<<"name">>, translate:translate(Lang, Name))]},
?FEATURE(?NS_DISCO_INFO_s), ?FEATURE(?NS_DISCO_INFO_s),
?FEATURE(?NS_VCARD_s), ?FEATURE(?NS_VCARD_s),
?FEATURE(?NS_BYTESTREAMS_s)]. ?FEATURE(?NS_BYTESTREAMS_s)].
@ -238,8 +238,8 @@ parse_options(ServerHost, Opts) ->
HostNameStr -> HostNameStr ->
HostNameStr HostNameStr
end, end,
StreamAddr = [?XMLATTR('jid', MyHost), ?XMLATTR('host', HostName), StreamAddr = [?XMLATTR(<<"jid">>, MyHost), ?XMLATTR(<<"host">>, HostName),
?XMLATTR('port', Port)], ?XMLATTR(<<"port">>, Port)],
#state{myhost = MyHost, #state{myhost = MyHost,
serverhost = ServerHost, serverhost = ServerHost,
name = Name, name = Name,

View File

@ -692,7 +692,7 @@ disco_local_identity(Acc, _From, #jid{domain = Host} = _To, <<>> = _NodeId, _Lan
case lists:member(?PEPNODE, plugins(Host)) of case lists:member(?PEPNODE, plugins(Host)) of
true -> true ->
[#xmlel{name = 'identity', ns = ?NS_DISCO_INFO, [#xmlel{name = 'identity', ns = ?NS_DISCO_INFO,
attrs = [?XMLATTR('category', <<"pubsub">>), ?XMLATTR('type', <<"pep">>)]} attrs = [?XMLATTR(<<"category">>, <<"pubsub">>), ?XMLATTR(<<"type">>, <<"pep">>)]}
| Acc]; | Acc];
false -> Acc false -> Acc
end; end;
@ -762,19 +762,19 @@ disco_sm_identity(Acc, From, To, NodeId, _Lang) ->
disco_identity(_Host, <<>> = _NodeId, _From) -> disco_identity(_Host, <<>> = _NodeId, _From) ->
[#xmlel{name = 'identity', ns = ?NS_DISCO_INFO, [#xmlel{name = 'identity', ns = ?NS_DISCO_INFO,
attrs = [?XMLATTR('category', <<"pubsub">>), ?XMLATTR('type', <<"pep">>)]}]; attrs = [?XMLATTR(<<"category">>, <<"pubsub">>), ?XMLATTR(<<"type">>, <<"pep">>)]}];
disco_identity(#jid{node = U, domain = S, resource = R} = Host, NodeId, From) -> disco_identity(#jid{node = U, domain = S, resource = R} = Host, NodeId, From) ->
Action = fun(#pubsub_node{idx = NodeIdx, type = Type, options = Options, owners = Owners}) -> Action = fun(#pubsub_node{idx = NodeIdx, type = Type, options = Options, owners = Owners}) ->
case get_allowed_items_call(Host, NodeIdx, From, Type, Options, Owners) of case get_allowed_items_call(Host, NodeIdx, From, Type, Options, Owners) of
{result, _} -> {result, _} ->
{result, {result,
[#xmlel{name = 'identity', ns = ?NS_DISCO_INFO, [#xmlel{name = 'identity', ns = ?NS_DISCO_INFO,
attrs = [?XMLATTR('category', <<"pubsub">>), ?XMLATTR('type', <<"pep">>)]}, attrs = [?XMLATTR(<<"category">>, <<"pubsub">>), ?XMLATTR(<<"type">>, <<"pep">>)]},
#xmlel{name = 'identity', ns = ?NS_DISCO_INFO, #xmlel{name = 'identity', ns = ?NS_DISCO_INFO,
attrs = [?XMLATTR('category', <<"pubsub">>), ?XMLATTR('type', <<"leaf">>) attrs = [?XMLATTR(<<"category">>, <<"pubsub">>), ?XMLATTR(<<"type">>, <<"leaf">>)
| case get_option(Options, 'title') of | case get_option(Options, 'title') of
false -> []; false -> [];
Title -> [?XMLATTR('name', Title)] Title -> [?XMLATTR(<<"name">>, Title)]
end end
]}]}; ]}]};
{error, _} -> {result, []} {error, _} -> {result, []}
@ -858,11 +858,11 @@ disco_items(#jid{raw = JID, node = U, domain = S, resource = R} = Host, <<>>, Fr
case get_allowed_items_call(Host, NodeIdx, From, Type, Options, Owners) of case get_allowed_items_call(Host, NodeIdx, From, Type, Options, Owners) of
{result, _} -> {result, _} ->
[#xmlel{name = 'item', ns = ?NS_DISCO_INFO, [#xmlel{name = 'item', ns = ?NS_DISCO_INFO,
attrs = [?XMLATTR('jid', JID), attrs = [?XMLATTR(<<"jid">>, JID),
?XMLATTR('node', NodeId) | ?XMLATTR(<<"node">>, NodeId) |
case get_option(Options, 'title') of case get_option(Options, 'title') of
false -> []; false -> [];
[Title] -> [?XMLATTR('title', Title)] [Title] -> [?XMLATTR(<<"title">>, Title)]
end]} end]}
| Acc]; | Acc];
_ -> Acc _ -> Acc
@ -879,8 +879,8 @@ disco_items(#jid{raw = JID, node = U, domain = S, resource = R} = Host, NodeId,
{result, Items} -> {result, Items} ->
{result, {result,
[#xmlel{name = 'item', ns = ?NS_DISCO_INFO, [#xmlel{name = 'item', ns = ?NS_DISCO_INFO,
attrs = [?XMLATTR('jid', JID), attrs = [?XMLATTR(<<"jid">>, JID),
?XMLATTR('name', ItemId)]} ?XMLATTR(<<"name">>, ItemId)]}
|| #pubsub_item{id = {ItemId,_}} <- Items]}; || #pubsub_item{id = {ItemId,_}} <- Items]};
_ -> {result, []} _ -> {result, []}
end end
@ -1164,7 +1164,7 @@ do_route(ServerHost, Access, Plugins, Host, From, To, #xmlel{name = 'iq'} = Pack
case exmpp_iq:xmlel_to_iq(Packet) of case exmpp_iq:xmlel_to_iq(Packet) of
%% Service discovery : disco#info %% Service discovery : disco#info
#iq{type = 'get', ns = ?NS_DISCO_INFO, payload = #xmlel{attrs = Attrs}, lang = Lang} -> #iq{type = 'get', ns = ?NS_DISCO_INFO, payload = #xmlel{attrs = Attrs}, lang = Lang} ->
NodeId = exmpp_xml:get_attribute_from_list(Attrs, 'node', <<>>), NodeId = exmpp_xml:get_attribute_from_list(Attrs, <<"node">>, <<>>),
Info = ejabberd_hooks:run_fold( Info = ejabberd_hooks:run_fold(
disco_info, ServerHost, [], disco_info, ServerHost, [],
[ServerHost, ?MODULE, <<>>, ""]), [ServerHost, ?MODULE, <<>>, ""]),
@ -1181,7 +1181,7 @@ do_route(ServerHost, Access, Plugins, Host, From, To, #xmlel{name = 'iq'} = Pack
ejabberd_router:route(To, From, Res); ejabberd_router:route(To, From, Res);
%% Service discovery : disco#items %% Service discovery : disco#items
#iq{type = 'get', ns = ?NS_DISCO_ITEMS, payload = #xmlel{attrs = Attrs}} -> #iq{type = 'get', ns = ?NS_DISCO_ITEMS, payload = #xmlel{attrs = Attrs}} ->
NodeId = exmpp_xml:get_attribute_from_list(Attrs, 'node', <<>>), NodeId = exmpp_xml:get_attribute_from_list(Attrs, <<"node">>, <<>>),
Res = case iq_disco_items(Host, NodeId, From) of Res = case iq_disco_items(Host, NodeId, From) of
{result, IQRes} -> {result, IQRes} ->
Result = #xmlel{ns = ?NS_DISCO_ITEMS, Result = #xmlel{ns = ?NS_DISCO_ITEMS,
@ -1258,8 +1258,8 @@ do_route(ServerHost, _Access, _Plugins, Host, From, To,
undefined -> undefined ->
ok; ok;
#xmlel{attrs = Attrs, children = Els} = _Item -> #xmlel{attrs = Attrs, children = Els} = _Item ->
NodeId = exmpp_xml:get_attribute(Publish, 'node', <<>>), NodeId = exmpp_xml:get_attribute(Publish, <<"node">>, <<>>),
ItemId = exmpp_xml:get_attribute_from_list(Attrs, 'id', <<>>), ItemId = exmpp_xml:get_attribute_from_list(Attrs, <<"id">>, <<>>),
case publish_item(Host, ServerHost, NodeId, From, ItemId, Els) of case publish_item(Host, ServerHost, NodeId, From, ItemId, Els) of
{result, _} -> {result, _} ->
ok; ok;
@ -1302,19 +1302,19 @@ command_disco_info(_Host, ?NS_ADHOC_b = _NodeId, _From) ->
{result, {result,
[#xmlel{ns = ?NS_DISCO_INFO, [#xmlel{ns = ?NS_DISCO_INFO,
name = 'identity', name = 'identity',
attrs = [?XMLATTR('category', <<"automation">>), attrs = [?XMLATTR(<<"category">>, <<"automation">>),
?XMLATTR('type', <<"command-list">>)]}]}; ?XMLATTR(<<"type">>, <<"command-list">>)]}]};
command_disco_info(_Host, ?NS_PUBSUB_GET_PENDING_b = _NodeId, _From) -> command_disco_info(_Host, ?NS_PUBSUB_GET_PENDING_b = _NodeId, _From) ->
{result, {result,
% Identity % Identity
[#xmlel{ns = ?NS_DISCO_INFO, [#xmlel{ns = ?NS_DISCO_INFO,
name = 'identity', name = 'identity',
attrs = [?XMLATTR('category', <<"automation">>), attrs = [?XMLATTR(<<"category">>, <<"automation">>),
?XMLATTR('type', <<"command-node">>)]}, ?XMLATTR(<<"type">>, <<"command-node">>)]},
% Features % Features
#xmlel{ns = ?NS_DISCO_INFO, #xmlel{ns = ?NS_DISCO_INFO,
name = 'feature', name = 'feature',
attrs = [?XMLATTR('var', ?NS_ADHOC)]}]}. attrs = [?XMLATTR(<<"var">>, ?NS_ADHOC)]}]}.
-spec(node_disco_info/3 :: -spec(node_disco_info/3 ::
@ -1343,16 +1343,16 @@ node_disco_info(Host, NodeId, From) ->
%% Identities %% Identities
[#xmlel{ns = ?NS_DISCO_INFO, [#xmlel{ns = ?NS_DISCO_INFO,
name = 'identity', name = 'identity',
attrs = [?XMLATTR('category', <<"pubsub">>), attrs = [?XMLATTR(<<"category">>, <<"pubsub">>),
?XMLATTR('type', Type)]} || Type <- Types ] ?XMLATTR(<<"type">>, Type)]} || Type <- Types ]
++ ++
%% Features %% Features
[#xmlel{ns = ?NS_DISCO_INFO, [#xmlel{ns = ?NS_DISCO_INFO,
name = 'feature', name = 'feature',
attrs = [?XMLATTR('var', ?NS_PUBSUB_b)]} | attrs = [?XMLATTR(<<"var">>, ?NS_PUBSUB_b)]} |
[#xmlel{ns = ?NS_DISCO_INFO, [#xmlel{ns = ?NS_DISCO_INFO,
name = 'feature', name = 'feature',
attrs = [?XMLATTR('var', list_to_binary(?NS_PUBSUB_s++"#"++Type))]} attrs = [?XMLATTR(<<"var">>, list_to_binary(?NS_PUBSUB_s++"#"++Type))]}
|| Type <- features(Plugin)]]} || Type <- features(Plugin)]]}
end, end,
case transaction(Host, NodeId, Action, sync_dirty) of case transaction(Host, NodeId, Action, sync_dirty) of
@ -1377,29 +1377,29 @@ iq_disco_info(Host, <<>> = _NodeId, _From, Lang) ->
%% Identities %% Identities
[#xmlel{ns = ?NS_DISCO_INFO, [#xmlel{ns = ?NS_DISCO_INFO,
name = 'identity', name = 'identity',
attrs = [?XMLATTR('category', "pubsub"), attrs = [?XMLATTR(<<"category">>, "pubsub"),
?XMLATTR('type', "service"), ?XMLATTR(<<"type">>, "service"),
?XMLATTR('name', translate:translate(Lang, "Publish-Subscribe"))]}, ?XMLATTR(<<"name">>, translate:translate(Lang, "Publish-Subscribe"))]},
%% Features %% Features
#xmlel{ns = ?NS_DISCO_INFO, #xmlel{ns = ?NS_DISCO_INFO,
name = 'feature', name = 'feature',
attrs = [?XMLATTR('var', ?NS_DISCO_INFO_b)]}, attrs = [?XMLATTR(<<"var">>, ?NS_DISCO_INFO_b)]},
#xmlel{ns = ?NS_DISCO_INFO, #xmlel{ns = ?NS_DISCO_INFO,
name = 'feature', name = 'feature',
attrs = [?XMLATTR('var', ?NS_DISCO_ITEMS_b)]}, attrs = [?XMLATTR(<<"var">>, ?NS_DISCO_ITEMS_b)]},
#xmlel{ns = ?NS_DISCO_INFO, #xmlel{ns = ?NS_DISCO_INFO,
name = 'feature', name = 'feature',
attrs = [?XMLATTR('var', ?NS_PUBSUB_b)]}, attrs = [?XMLATTR(<<"var">>, ?NS_PUBSUB_b)]},
#xmlel{ns = ?NS_DISCO_INFO, #xmlel{ns = ?NS_DISCO_INFO,
name = 'feature', name = 'feature',
attrs = [?XMLATTR('var', ?NS_ADHOC_b)]}, attrs = [?XMLATTR(<<"var">>, ?NS_ADHOC_b)]},
#xmlel{ns = ?NS_DISCO_INFO, #xmlel{ns = ?NS_DISCO_INFO,
name = 'feature', name = 'feature',
attrs = [?XMLATTR('var', ?NS_VCARD_b)]}] attrs = [?XMLATTR(<<"var">>, ?NS_VCARD_b)]}]
++ ++
[#xmlel{ns = ?NS_DISCO_INFO, [#xmlel{ns = ?NS_DISCO_INFO,
name = 'feature', name = 'feature',
attrs = [?XMLATTR('var', list_to_binary(?NS_PUBSUB_s++"#"++Feature))]} attrs = [?XMLATTR(<<"var">>, list_to_binary(?NS_PUBSUB_s++"#"++Feature))]}
|| Feature <- features(Host, <<>>)]}; || Feature <- features(Host, <<>>)]};
iq_disco_info(Host, NodeId, From, _Lang) iq_disco_info(Host, NodeId, From, _Lang)
when NodeId == ?NS_ADHOC_b orelse NodeId == ?NS_PUBSUB_GET_PENDING_b -> when NodeId == ?NS_ADHOC_b orelse NodeId == ?NS_PUBSUB_GET_PENDING_b ->
@ -1425,9 +1425,9 @@ iq_disco_items(Host, <<>> = _NodeId, From) ->
Attrs = Attrs =
case get_option(Options, 'title') of case get_option(Options, 'title') of
false -> false ->
[?XMLATTR('jid', Host) | nodeAttr(SubNodeId)]; [?XMLATTR(<<"jid">>, Host) | nodeAttr(SubNodeId)];
Title -> Title ->
[?XMLATTR('jid', Host), ?XMLATTR('name', Title) | nodeAttr(SubNodeId)] [?XMLATTR(<<"jid">>, Host), ?XMLATTR(<<"name">>, Title) | nodeAttr(SubNodeId)]
end, end,
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs = Attrs} #xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs = Attrs}
end, Nodes)}; end, Nodes)};
@ -1439,9 +1439,9 @@ iq_disco_items(Host, ?NS_ADHOC_b = _NodeId, _From) ->
{result, {result,
[#xmlel{ns = ?NS_DISCO_ITEMS, [#xmlel{ns = ?NS_DISCO_ITEMS,
name = 'item', name = 'item',
attrs = [?XMLATTR('jid', Host), attrs = [?XMLATTR(<<"jid">>, Host),
?XMLATTR('node', ?NS_PUBSUB_GET_PENDING_b), ?XMLATTR(<<"node">>, ?NS_PUBSUB_GET_PENDING_b),
?XMLATTR('name', "Get Pending")]}]}; ?XMLATTR(<<"name">>, "Get Pending")]}]};
iq_disco_items(_Host, ?NS_PUBSUB_GET_PENDING_b = _NodeId, _From) -> iq_disco_items(_Host, ?NS_PUBSUB_GET_PENDING_b = _NodeId, _From) ->
%% TODO %% TODO
{result, []}; {result, []};
@ -1456,9 +1456,9 @@ iq_disco_items(Host, NodeId, From) ->
Attrs = Attrs =
case get_option(SubOptions, 'title') of case get_option(SubOptions, 'title') of
false -> false ->
[?XMLATTR('jid', Host) | nodeAttr(SubNodeId)]; [?XMLATTR(<<"jid">>, Host) | nodeAttr(SubNodeId)];
Title -> Title ->
[?XMLATTR('jid', Host), ?XMLATTR('name', Title) | nodeAttr(SubNodeId)] [?XMLATTR(<<"jid">>, Host), ?XMLATTR(<<"name">>, Title) | nodeAttr(SubNodeId)]
end, end,
#xmlel{ns = ?NS_DISCO_ITEMS, #xmlel{ns = ?NS_DISCO_ITEMS,
name = 'item', name = 'item',
@ -1469,8 +1469,8 @@ iq_disco_items(Host, NodeId, From) ->
{result, Name} = node_call(Type, get_item_name, [Host, NodeId, RN]), {result, Name} = node_call(Type, get_item_name, [Host, NodeId, RN]),
#xmlel{ns = ?NS_DISCO_ITEMS, #xmlel{ns = ?NS_DISCO_ITEMS,
name = 'item', name = 'item',
attrs = [?XMLATTR('jid', Host), attrs = [?XMLATTR(<<"jid">>, Host),
?XMLATTR('name', Name)]} ?XMLATTR(<<"name">>, Name)]}
end, NodeItems), end, NodeItems),
{result, Nodes ++ Items} {result, Nodes ++ Items}
end, end,
@ -1573,7 +1573,7 @@ iq_pubsub(Host, ServerHost, From, IQType, #xmlel{children = Els}, Lang, Access,
case exmpp_xml:remove_cdata_from_list(Els) of case exmpp_xml:remove_cdata_from_list(Els) of
[#xmlel{name = Name, attrs = Attrs, children = SubEls} | Rest] -> [#xmlel{name = Name, attrs = Attrs, children = SubEls} | Rest] ->
%% Fix bug when owner retrieves his affiliations %% Fix bug when owner retrieves his affiliations
NodeId = exmpp_xml:get_attribute_from_list(Attrs, 'node', <<>>), NodeId = exmpp_xml:get_attribute_from_list(Attrs, <<"node">>, <<>>),
case {IQType, Name} of case {IQType, Name} of
{'set', 'create'} -> {'set', 'create'} ->
Config = case Rest of Config = case Rest of
@ -1581,7 +1581,7 @@ iq_pubsub(Host, ServerHost, From, IQType, #xmlel{children = Els}, Lang, Access,
_ -> [] _ -> []
end, end,
%% Get the type of the node %% Get the type of the node
Plugin = case exmpp_xml:get_attribute_from_list_as_list(Attrs, 'type', "") of Plugin = case exmpp_xml:get_attribute_from_list_as_list(Attrs, <<"type">>, "") of
"" -> hd(Plugins); "" -> hd(Plugins);
T -> T T -> T
end, end,
@ -1596,7 +1596,7 @@ iq_pubsub(Host, ServerHost, From, IQType, #xmlel{children = Els}, Lang, Access,
{'set', 'publish'} -> {'set', 'publish'} ->
case exmpp_xml:remove_cdata_from_list(SubEls) of case exmpp_xml:remove_cdata_from_list(SubEls) of
[#xmlel{name = 'item', attrs = ItemAttrs, children = Payload}] -> [#xmlel{name = 'item', attrs = ItemAttrs, children = Payload}] ->
ItemId = exmpp_xml:get_attribute_from_list(ItemAttrs, 'id', <<>>), ItemId = exmpp_xml:get_attribute_from_list(ItemAttrs, <<"id">>, <<>>),
publish_item(Host, ServerHost, NodeId, From, ItemId, publish_item(Host, ServerHost, NodeId, From, ItemId,
exmpp_xml:remove_cdata_from_list(Payload)); exmpp_xml:remove_cdata_from_list(Payload));
[] -> [] ->
@ -1607,14 +1607,14 @@ iq_pubsub(Host, ServerHost, From, IQType, #xmlel{children = Els}, Lang, Access,
{error, extended_error('bad-request', "invalid-payload")} {error, extended_error('bad-request', "invalid-payload")}
end; end;
{'set', 'retract'} -> {'set', 'retract'} ->
ForceNotify = case exmpp_xml:get_attribute_from_list(Attrs, 'notify', <<>>) of ForceNotify = case exmpp_xml:get_attribute_from_list(Attrs, <<"notify">>, <<>>) of
<<"1">> -> true; <<"1">> -> true;
<<"true">> -> true; <<"true">> -> true;
_ -> false _ -> false
end, end,
case exmpp_xml:remove_cdata_from_list(SubEls) of case exmpp_xml:remove_cdata_from_list(SubEls) of
[#xmlel{name = 'item', attrs = ItemAttrs}] -> [#xmlel{name = 'item', attrs = ItemAttrs}] ->
ItemId = exmpp_xml:get_attribute_from_list(ItemAttrs, 'id', <<>>), ItemId = exmpp_xml:get_attribute_from_list(ItemAttrs, <<"id">>, <<>>),
delete_item(Host, NodeId, From, ItemId, ForceNotify); delete_item(Host, NodeId, From, ItemId, ForceNotify);
_ -> _ ->
%% Request does not specify an item %% Request does not specify an item
@ -1625,18 +1625,18 @@ iq_pubsub(Host, ServerHost, From, IQType, #xmlel{children = Els}, Lang, Access,
[#xmlel{name = 'options', children = C}] -> C; [#xmlel{name = 'options', children = C}] -> C;
_ -> [] _ -> []
end, end,
JID = exmpp_xml:get_attribute_from_list(Attrs, 'jid', <<>>), JID = exmpp_xml:get_attribute_from_list(Attrs, <<"jid">>, <<>>),
subscribe_node(Host, NodeId, From, JID, Config); subscribe_node(Host, NodeId, From, JID, Config);
{'set', 'unsubscribe'} -> {'set', 'unsubscribe'} ->
JID = exmpp_xml:get_attribute_from_list(Attrs, 'jid', <<>>), JID = exmpp_xml:get_attribute_from_list(Attrs, <<"jid">>, <<>>),
SubId = exmpp_xml:get_attribute_from_list(Attrs, 'subid', <<>>), SubId = exmpp_xml:get_attribute_from_list(Attrs, <<"subid">>, <<>>),
unsubscribe_node(Host, NodeId, From, JID, SubId); unsubscribe_node(Host, NodeId, From, JID, SubId);
{'get', 'items'} -> {'get', 'items'} ->
MaxItems = exmpp_xml:get_attribute_from_list(Attrs, 'max_items', <<>>), MaxItems = exmpp_xml:get_attribute_from_list(Attrs, <<"max_items">>, <<>>),
SubId = exmpp_xml:get_attribute_from_list(Attrs, 'subid', <<>>), SubId = exmpp_xml:get_attribute_from_list(Attrs, <<"subid">>, <<>>),
ItemIds = lists:foldl(fun ItemIds = lists:foldl(fun
(#xmlel{name = 'item', attrs = ItemAttrs}, Acc) -> (#xmlel{name = 'item', attrs = ItemAttrs}, Acc) ->
case exmpp_xml:get_attribute_from_list(ItemAttrs, 'id', <<>>) of case exmpp_xml:get_attribute_from_list(ItemAttrs, <<"id">>, <<>>) of
<<>> -> Acc; <<>> -> Acc;
ItemId -> [ItemId|Acc] ItemId -> [ItemId|Acc]
end; end;
@ -1648,12 +1648,12 @@ iq_pubsub(Host, ServerHost, From, IQType, #xmlel{children = Els}, Lang, Access,
{'get', 'affiliations'} -> {'get', 'affiliations'} ->
get_affiliations(Host, From, Plugins); get_affiliations(Host, From, Plugins);
{'get', 'options'} -> {'get', 'options'} ->
SubId = exmpp_xml:get_attribute_from_list(Attrs, 'subid', <<>>), SubId = exmpp_xml:get_attribute_from_list(Attrs, <<"subid">>, <<>>),
JID = exmpp_xml:get_attribute_from_list(Attrs, 'jid', <<>>), JID = exmpp_xml:get_attribute_from_list(Attrs, <<"jid">>, <<>>),
get_options(Host, NodeId, JID, SubId, Lang); get_options(Host, NodeId, JID, SubId, Lang);
{'set', 'options'} -> {'set', 'options'} ->
SubId = exmpp_xml:get_attribute_from_list(Attrs, 'subid', <<>>), SubId = exmpp_xml:get_attribute_from_list(Attrs, <<"subid">>, <<>>),
JID = exmpp_xml:get_attribute_from_list(Attrs, 'jid', <<>>), JID = exmpp_xml:get_attribute_from_list(Attrs, <<"jid">>, <<>>),
set_options(Host, NodeId, JID, SubId, SubEls); set_options(Host, NodeId, JID, SubId, SubEls);
_ -> _ ->
{error, 'feature-not-implemented'} {error, 'feature-not-implemented'}
@ -1678,7 +1678,7 @@ iq_pubsub(Host, ServerHost, From, IQType, #xmlel{children = Els}, Lang, Access,
iq_pubsub_owner(Host, ServerHost, From, IQType, #xmlel{children = Els}, Lang) -> iq_pubsub_owner(Host, ServerHost, From, IQType, #xmlel{children = Els}, Lang) ->
case Action = exmpp_xml:remove_cdata_from_list(Els) of case Action = exmpp_xml:remove_cdata_from_list(Els) of
[#xmlel{name = Name, attrs = Attrs, children = SubEls}] -> [#xmlel{name = Name, attrs = Attrs, children = SubEls}] ->
NodeId = exmpp_xml:get_attribute_from_list(Attrs, 'node', <<>>), NodeId = exmpp_xml:get_attribute_from_list(Attrs, <<"node">>, <<>>),
case {IQType, Name} of case {IQType, Name} of
{'get', 'configure'} -> {'get', 'configure'} ->
get_configure(Host, ServerHost, NodeId, From, Lang); get_configure(Host, ServerHost, NodeId, From, Lang);
@ -1814,11 +1814,11 @@ send_pending_node_form(Host, Owner, _Lang, Plugins) ->
children = [ children = [
exmpp_xml:cdata(node_to_string(Node))]}]} exmpp_xml:cdata(node_to_string(Node))]}]}
end, get_pending_nodes(Host, Owner, Ps)), end, get_pending_nodes(Host, Owner, Ps)),
XForm = #xmlel{ns = ?NS_DATA_FORMS, name ='x', attrs = [?XMLATTR('type', <<"form">>)], XForm = #xmlel{ns = ?NS_DATA_FORMS, name ='x', attrs = [?XMLATTR(<<"type">>, <<"form">>)],
children = [ children = [
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', #xmlel{ns = ?NS_DATA_FORMS, name = 'field',
attrs = [?XMLATTR('type', <<"list-single">>), attrs = [?XMLATTR(<<"type">>, <<"list-single">>),
?XMLATTR('var', <<"pubsub#node">>)], ?XMLATTR(<<"var">>, <<"pubsub#node">>)],
children = lists:usort(XOpts)}]}, children = lists:usort(XOpts)}]},
#adhoc_response{status = executing, #adhoc_response{status = executing,
defaultaction = "execute", defaultaction = "execute",
@ -1881,28 +1881,28 @@ send_authorization_request(#pubsub_node{owners = Owners, id = {Host, Node}}, Sub
Lang = <<"en">>, %% TODO fix Lang = <<"en">>, %% TODO fix
{U, S, R} = Subscriber, {U, S, R} = Subscriber,
Stanza = #xmlel{ns = ?NS_JABBER_CLIENT, name = 'message', children = Stanza = #xmlel{ns = ?NS_JABBER_CLIENT, name = 'message', children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs = [?XMLATTR('type', <<"form">>)], children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs = [?XMLATTR(<<"type">>, <<"form">>)], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
[#xmlcdata{cdata = list_to_binary(translate:translate(Lang, "PubSub subscriber request"))}]}, [#xmlcdata{cdata = list_to_binary(translate:translate(Lang, "PubSub subscriber request"))}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'instructions', children = #xmlel{ns = ?NS_DATA_FORMS, name = 'instructions', children =
[#xmlcdata{cdata = list_to_binary(translate:translate(Lang, "Choose whether to approve this entity's subscription."))}]}, [#xmlcdata{cdata = list_to_binary(translate:translate(Lang, "Choose whether to approve this entity's subscription."))}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[?XMLATTR('var', <<"FORM_TYPE">>), ?XMLATTR('type', <<"hidden">>)], children = [?XMLATTR(<<"var">>, <<"FORM_TYPE">>), ?XMLATTR(<<"type">>, <<"hidden">>)], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(?NS_PUBSUB_SUBSCRIBE_AUTH_s)}]}]}, [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(?NS_PUBSUB_SUBSCRIBE_AUTH_s)}]}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[?XMLATTR('var', <<"pubsub#node">>), ?XMLATTR('type', <<"text-single">>), [?XMLATTR(<<"var">>, <<"pubsub#node">>), ?XMLATTR(<<"type">>, <<"text-single">>),
?XMLATTR('label', translate:translate(Lang, "Node ID"))], children = ?XMLATTR(<<"label">>, translate:translate(Lang, "Node ID"))], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children =
[#xmlcdata{cdata = Node}]}]}, [#xmlcdata{cdata = Node}]}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [?XMLATTR('var', <<"pubsub#subscriber_jid">>), #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [?XMLATTR(<<"var">>, <<"pubsub#subscriber_jid">>),
?XMLATTR('type', <<"jid-single">>), ?XMLATTR(<<"type">>, <<"jid-single">>),
?XMLATTR('label', translate:translate(Lang, "Subscriber Address"))], children = ?XMLATTR(<<"label">>, translate:translate(Lang, "Subscriber Address"))], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children =
[#xmlcdata{cdata = exmpp_jid:to_binary(U, S, R)}]}]}, [#xmlcdata{cdata = exmpp_jid:to_binary(U, S, R)}]}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[?XMLATTR('var', <<"pubsub#allow">>), [?XMLATTR(<<"var">>, <<"pubsub#allow">>),
?XMLATTR('type', <<"boolean">>), ?XMLATTR(<<"type">>, <<"boolean">>),
?XMLATTR('label', translate:translate(Lang, "Allow this Jabber ID to subscribe to this pubsub node?"))], children = ?XMLATTR(<<"label">>, translate:translate(Lang, "Allow this Jabber ID to subscribe to this pubsub node?"))], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = <<"false">>}]}]}]}]}, [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = <<"false">>}]}]}]}]},
lists:foreach(fun(Owner) -> lists:foreach(fun(Owner) ->
{U, S, R} = Owner, {U, S, R} = Owner,
@ -1912,7 +1912,7 @@ send_authorization_request(#pubsub_node{owners = Owners, id = {Host, Node}}, Sub
find_authorization_response(Packet) -> find_authorization_response(Packet) ->
Els = Packet#xmlel.children, Els = Packet#xmlel.children,
XData1 = lists:map(fun(#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs = XAttrs} = XEl) -> XData1 = lists:map(fun(#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs = XAttrs} = XEl) ->
case exmpp_xml:get_attribute_from_list_as_list(XAttrs, 'type', "") of case exmpp_xml:get_attribute_from_list_as_list(XAttrs, <<"type">>, "") of
"cancel" -> "cancel" ->
none; none;
_ -> _ ->
@ -1943,13 +1943,13 @@ find_authorization_response(Packet) ->
%% @doc Send a message to JID with the supplied Subscription %% @doc Send a message to JID with the supplied Subscription
send_authorization_approval(Host, JID, SNode, Subscription) -> send_authorization_approval(Host, JID, SNode, Subscription) ->
SubAttrs = case Subscription of SubAttrs = case Subscription of
{S, SID} -> [?XMLATTR('subscription', subscription_to_string(S)), {S, SID} -> [?XMLATTR(<<"subscription">>, subscription_to_string(S)),
?XMLATTR('subid', SID)]; ?XMLATTR(<<"subid">>, SID)];
S -> [?XMLATTR('subscription', subscription_to_string(S))] S -> [?XMLATTR(<<"subscription">>, subscription_to_string(S))]
end, end,
Stanza = event_stanza( Stanza = event_stanza(
[#xmlel{ns = ?NS_PUBSUB_EVENT, name = 'subscription', attrs = [#xmlel{ns = ?NS_PUBSUB_EVENT, name = 'subscription', attrs =
[?XMLATTR('jid', exmpp_jid:to_binary(JID)) | nodeAttr(SNode)] ++ SubAttrs [?XMLATTR(<<"jid">>, exmpp_jid:to_binary(JID)) | nodeAttr(SNode)] ++ SubAttrs
}]), }]),
ejabberd_router:route(service_jid(Host), JID, Stanza). ejabberd_router:route(service_jid(Host), JID, Stanza).
@ -2014,9 +2014,9 @@ update_auth(Host, Node, Type, Nidx, Subscriber,
end. end.
-define(XFIELD(Type, Label, Var, Val), -define(XFIELD(Type, Label, Var, Val),
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [?XMLATTR('type', Type), #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [?XMLATTR(<<"type">>, Type),
?XMLATTR('label', translate:translate(Lang, Label)), ?XMLATTR(<<"label">>, translate:translate(Lang, Label)),
?XMLATTR('var', Var)], children = ?XMLATTR(<<"var">>, Var)], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(Val)}]}]}). [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(Val)}]}]}).
-define(BOOLXFIELD(Label, Var, Val), -define(BOOLXFIELD(Label, Var, Val),
@ -2032,17 +2032,17 @@ update_auth(Host, Node, Type, Nidx, Subscriber,
-define(STRINGMXFIELD(Label, Var, Vals), -define(STRINGMXFIELD(Label, Var, Vals),
#xmlel{ns = ?NS_DATA_FORMS, #xmlel{ns = ?NS_DATA_FORMS,
name = 'field', name = 'field',
attrs = [?XMLATTR('type', <<"text-multi">>), attrs = [?XMLATTR(<<"type">>, <<"text-multi">>),
?XMLATTR('label', translate:translate(Lang, Label)), ?XMLATTR(<<"label">>, translate:translate(Lang, Label)),
?XMLATTR('var', Var) ?XMLATTR(<<"var">>, Var)
], ],
children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value',
children = [?XMLCDATA(V)]} || V <- Vals]}). children = [?XMLCDATA(V)]} || V <- Vals]}).
-define(XFIELDOPT(Type, Label, Var, Val, Opts), -define(XFIELDOPT(Type, Label, Var, Val, Opts),
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [?XMLATTR('type', Type), #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [?XMLATTR(<<"type">>, Type),
?XMLATTR('label', translate:translate(Lang, Label)), ?XMLATTR(<<"label">>, translate:translate(Lang, Label)),
?XMLATTR('var', Var)], children = ?XMLATTR(<<"var">>, Var)], children =
lists:map(fun(Opt) -> lists:map(fun(Opt) ->
#xmlel{ns = ?NS_DATA_FORMS, name = 'option', children = #xmlel{ns = ?NS_DATA_FORMS, name = 'option', children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children =
@ -2054,9 +2054,9 @@ update_auth(Host, Node, Type, Nidx, Subscriber,
?XFIELDOPT("list-single", Label, Var, Val, Opts)). ?XFIELDOPT("list-single", Label, Var, Val, Opts)).
-define(LISTMXFIELD(Label, Var, Vals, Opts), -define(LISTMXFIELD(Label, Var, Vals, Opts),
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [?XMLATTR('type', <<"list-multi">>), #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [?XMLATTR(<<"type">>, <<"list-multi">>),
?XMLATTR('label', translate:translate(Lang, Label)), ?XMLATTR(<<"label">>, translate:translate(Lang, Label)),
?XMLATTR('var', Var)], children = ?XMLATTR(<<"var">>, Var)], children =
lists:map(fun(Opt) -> lists:map(fun(Opt) ->
#xmlel{ns = ?NS_DATA_FORMS, name = 'option', children = #xmlel{ns = ?NS_DATA_FORMS, name = 'option', children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children =
@ -2315,13 +2315,13 @@ subscribe_node(Host, Node, From, JID, Configuration) ->
%% TODO, this is subscription-notification, should depends on node features %% TODO, this is subscription-notification, should depends on node features
SubAttrs = case Subscription of SubAttrs = case Subscription of
{subscribed, SubId} -> {subscribed, SubId} ->
[?XMLATTR("subscription", subscription_to_string(subscribed)), [?XMLATTR(<<"subscription">>, subscription_to_string(subscribed)),
?XMLATTR("subid", SubId)]; ?XMLATTR(<<"subid">>, SubId)];
Other -> Other ->
[?XMLATTR("subscription", subscription_to_string(Other))] [?XMLATTR(<<"subscription">>, subscription_to_string(Other))]
end, end,
Fields = Fields =
[ ?XMLATTR('jid', JID) | SubAttrs], [ ?XMLATTR(<<"jid">>, JID) | SubAttrs],
#xmlel{ns = ?NS_PUBSUB, name = 'pubsub', children = #xmlel{ns = ?NS_PUBSUB, name = 'pubsub', children =
[#xmlel{ns = ?NS_PUBSUB, name = 'subscription', attrs = Fields}]} [#xmlel{ns = ?NS_PUBSUB, name = 'subscription', attrs = Fields}]}
end, end,
@ -2796,8 +2796,8 @@ get_affiliations(Host, JID, Plugins) when is_list(Plugins) ->
fun({_, none}) -> []; fun({_, none}) -> [];
({#pubsub_node{id = {_, Node}}, Affiliation}) -> ({#pubsub_node{id = {_, Node}}, Affiliation}) ->
[#xmlel{ns = ?NS_PUBSUB, name = 'affiliation', attrs = [#xmlel{ns = ?NS_PUBSUB, name = 'affiliation', attrs =
[?XMLATTR('node', node_to_string(Node)), [?XMLATTR(<<"node">>, node_to_string(Node)),
?XMLATTR('affiliation', affiliation_to_string(Affiliation))]}] ?XMLATTR(<<"affiliation">>, affiliation_to_string(Affiliation))]}]
end, lists:usort(lists:flatten(Affiliations))), end, lists:usort(lists:flatten(Affiliations))),
{result, #xmlel{ns = ?NS_PUBSUB, name = 'pubsub', children = {result, #xmlel{ns = ?NS_PUBSUB, name = 'pubsub', children =
[#xmlel{ns = ?NS_PUBSUB, name = 'affiliations', children = [#xmlel{ns = ?NS_PUBSUB, name = 'affiliations', children =
@ -2827,8 +2827,8 @@ get_affiliations(Host, Node, JID) ->
fun({_, none}) -> []; fun({_, none}) -> [];
({{AU, AS, AR}, Affiliation}) -> ({{AU, AS, AR}, Affiliation}) ->
[#xmlel{ns = ?NS_PUBSUB_OWNER, name = 'affiliation', attrs = [#xmlel{ns = ?NS_PUBSUB_OWNER, name = 'affiliation', attrs =
[?XMLATTR('jid', exmpp_jid:to_binary(AU, AS, AR)), [?XMLATTR(<<"jid">>, exmpp_jid:to_binary(AU, AS, AR)),
?XMLATTR('affiliation', affiliation_to_string(Affiliation))]}] ?XMLATTR(<<"affiliation">>, affiliation_to_string(Affiliation))]}]
end, Affiliations), end, Affiliations),
{result, #xmlel{ns = ?NS_PUBSUB_OWNER, name = 'pubsub', children = {result, #xmlel{ns = ?NS_PUBSUB_OWNER, name = 'pubsub', children =
[#xmlel{ns = ?NS_PUBSUB_OWNER, name = 'affiliations', attrs = nodeAttr(Node), children = [#xmlel{ns = ?NS_PUBSUB_OWNER, name = 'affiliations', attrs = nodeAttr(Node), children =
@ -2850,12 +2850,12 @@ set_affiliations(Host, Node, From, EntitiesEls) ->
#xmlel{name = 'affiliation', attrs = Attrs} -> #xmlel{name = 'affiliation', attrs = Attrs} ->
JID = try JID = try
exmpp_jid:parse( exmpp_jid:parse(
exmpp_xml:get_attribute_from_list(Attrs, 'jid', "")) exmpp_xml:get_attribute_from_list(Attrs, <<"jid">>, ""))
catch catch
_:_ -> error _:_ -> error
end, end,
Affiliation = string_to_affiliation( Affiliation = string_to_affiliation(
exmpp_xml:get_attribute_from_list_as_list(Attrs, 'affiliation', "")), exmpp_xml:get_attribute_from_list_as_list(Attrs, <<"affiliation">>, "")),
if if
(JID == error) or (JID == error) or
(Affiliation == false) -> (Affiliation == false) ->
@ -2958,8 +2958,8 @@ read_sub(Subscriber, Node, NodeId, SubId, Lang) ->
{result, #pubsub_subscription{options = Options}} -> {result, #pubsub_subscription{options = Options}} ->
{result, XdataEl} = pubsub_subscription:get_options_xform(Lang, Options), {result, XdataEl} = pubsub_subscription:get_options_xform(Lang, Options),
OptionsEl = #xmlel{ns = ?NS_PUBSUB, name = 'options', OptionsEl = #xmlel{ns = ?NS_PUBSUB, name = 'options',
attrs = [ ?XMLATTR('jid', exmpp_jid:to_binary(Subscriber)), attrs = [ ?XMLATTR(<<"jid">>, exmpp_jid:to_binary(Subscriber)),
?XMLATTR('subid', SubId) | nodeAttr(Node)], ?XMLATTR(<<"subid">>, SubId) | nodeAttr(Node)],
children = [XdataEl]}, children = [XdataEl]},
PubsubEl = #xmlel{ns = ?NS_PUBSUB, name = 'pubsub', children = [OptionsEl]}, PubsubEl = #xmlel{ns = ?NS_PUBSUB, name = 'pubsub', children = [OptionsEl]},
{result, PubsubEl} {result, PubsubEl}
@ -3052,11 +3052,11 @@ get_subscriptions(Host, Node, JID, Plugins) when is_list(Plugins) ->
case Node of case Node of
<<>> -> <<>> ->
[#xmlel{ns = ?NS_PUBSUB, name = 'subscription', attrs = [#xmlel{ns = ?NS_PUBSUB, name = 'subscription', attrs =
[?XMLATTR('node', node_to_string(SubsNode)), [?XMLATTR(<<"node">>, node_to_string(SubsNode)),
?XMLATTR('subscription', subscription_to_string(Subscription))]}]; ?XMLATTR(<<"subscription">>, subscription_to_string(Subscription))]}];
SubsNode -> SubsNode ->
[#xmlel{ns = ?NS_PUBSUB, name = 'subscription', attrs = [#xmlel{ns = ?NS_PUBSUB, name = 'subscription', attrs =
[?XMLATTR('subscription', subscription_to_string(Subscription))]}]; [?XMLATTR(<<"subscription">>, subscription_to_string(Subscription))]}];
_ -> _ ->
[] []
end; end;
@ -3066,14 +3066,14 @@ get_subscriptions(Host, Node, JID, Plugins) when is_list(Plugins) ->
case Node of case Node of
<<>> -> <<>> ->
[#xmlel{ns = ?NS_PUBSUB, name='subscription', [#xmlel{ns = ?NS_PUBSUB, name='subscription',
attrs = [?XMLATTR('jid', exmpp_jid:to_binary(SubJID)), attrs = [?XMLATTR(<<"jid">>, exmpp_jid:to_binary(SubJID)),
?XMLATTR('subid', SubId), ?XMLATTR(<<"subid">>, SubId),
?XMLATTR('subscription', subscription_to_string(Subscription)) | nodeAttr(SubsNode)]}]; ?XMLATTR(<<"subscription">>, subscription_to_string(Subscription)) | nodeAttr(SubsNode)]}];
SubsNode -> SubsNode ->
[#xmlel{ns = ?NS_PUBSUB, name = 'subscription', [#xmlel{ns = ?NS_PUBSUB, name = 'subscription',
attrs = [?XMLATTR('jid', exmpp_jid:to_binary(SubJID)), attrs = [?XMLATTR(<<"jid">>, exmpp_jid:to_binary(SubJID)),
?XMLATTR('subid', SubId), ?XMLATTR(<<"subid">>, SubId),
?XMLATTR('subscription', subscription_to_string(Subscription))]}]; ?XMLATTR(<<"subscription">>, subscription_to_string(Subscription))]}];
_ -> _ ->
[] []
end; end;
@ -3081,13 +3081,13 @@ get_subscriptions(Host, Node, JID, Plugins) when is_list(Plugins) ->
case Node of case Node of
<<>> -> <<>> ->
[#xmlel{ns = ?NS_PUBSUB, name = 'subscription', attrs = [#xmlel{ns = ?NS_PUBSUB, name = 'subscription', attrs =
[?XMLATTR('node', node_to_string(SubsNode)), [?XMLATTR(<<"node">>, node_to_string(SubsNode)),
?XMLATTR('jid', exmpp_jid:to_binary(SubJID)), ?XMLATTR(<<"jid">>, exmpp_jid:to_binary(SubJID)),
?XMLATTR('subscription', subscription_to_string(Subscription))]}]; ?XMLATTR(<<"subscription">>, subscription_to_string(Subscription))]}];
SubsNode -> SubsNode ->
[#xmlel{ns = ?NS_PUBSUB, name = 'subscription', attrs = [#xmlel{ns = ?NS_PUBSUB, name = 'subscription', attrs =
[?XMLATTR('jid', exmpp_jid:to_binary(SubJID)), [?XMLATTR(<<"jid">>, exmpp_jid:to_binary(SubJID)),
?XMLATTR('subscription', subscription_to_string(Subscription))]}]; ?XMLATTR(<<"subscription">>, subscription_to_string(Subscription))]}];
_ -> _ ->
[] []
end end
@ -3124,13 +3124,13 @@ get_subscriptions(Host, Node, JID) ->
({_, pending, _}) -> []; ({_, pending, _}) -> [];
({{AU, AS, AR}, Subscription}) -> ({{AU, AS, AR}, Subscription}) ->
[#xmlel{ns = ?NS_PUBSUB_OWNER, name = 'subscription', attrs = [#xmlel{ns = ?NS_PUBSUB_OWNER, name = 'subscription', attrs =
[?XMLATTR('jid', exmpp_jid:to_binary(AU, AS, AR)), [?XMLATTR(<<"jid">>, exmpp_jid:to_binary(AU, AS, AR)),
?XMLATTR('subscription', subscription_to_string(Subscription))]}]; ?XMLATTR(<<"subscription">>, subscription_to_string(Subscription))]}];
({{AU, AS, AR}, Subscription, SubId}) -> ({{AU, AS, AR}, Subscription, SubId}) ->
[#xmlel{ns = ?NS_PUBSUB_OWNER, name = 'subscription', attrs = [#xmlel{ns = ?NS_PUBSUB_OWNER, name = 'subscription', attrs =
[?XMLATTR('jid', exmpp_jid:to_binary(AU, AS, AR)), [?XMLATTR(<<"jid">>, exmpp_jid:to_binary(AU, AS, AR)),
?XMLATTR('subscription', subscription_to_string(Subscription)), ?XMLATTR(<<"subscription">>, subscription_to_string(Subscription)),
?XMLATTR('subid', SubId)]}] ?XMLATTR(<<"subid">>, SubId)]}]
end, Subscriptions), end, Subscriptions),
{result, #xmlel{ns = ?NS_PUBSUB_OWNER, name = 'pubsub', children = {result, #xmlel{ns = ?NS_PUBSUB_OWNER, name = 'pubsub', children =
[#xmlel{ns = ?NS_PUBSUB_OWNER, name = 'subscriptions', attrs = nodeAttr(Node), children = [#xmlel{ns = ?NS_PUBSUB_OWNER, name = 'subscriptions', attrs = nodeAttr(Node), children =
@ -3152,14 +3152,14 @@ set_subscriptions(Host, Node, From, EntitiesEls) ->
#xmlel{name = 'subscription', attrs = Attrs} -> #xmlel{name = 'subscription', attrs = Attrs} ->
JID = try JID = try
exmpp_jid:parse( exmpp_jid:parse(
exmpp_xml:get_attribute_from_list(Attrs, 'jid', "")) exmpp_xml:get_attribute_from_list(Attrs, <<"jid">>, ""))
catch catch
_:_ -> _:_ ->
error error
end, end,
Subscription = string_to_subscription( Subscription = string_to_subscription(
exmpp_xml:get_attribute_from_list_as_list(Attrs, 'subscription', false)), exmpp_xml:get_attribute_from_list_as_list(Attrs, <<"subscription">>, false)),
SubId = exmpp_xml:get_attribute_from_list_as_list(Attrs, "subid", false), SubId = exmpp_xml:get_attribute_from_list_as_list(Attrs, <<"subid">>, false),
if if
(JID == error) or (JID == error) or
(Subscription == false) -> (Subscription == false) ->
@ -3183,8 +3183,8 @@ set_subscriptions(Host, Node, From, EntitiesEls) ->
children = children =
[#xmlel{ns = ?NS_PUBSUB, [#xmlel{ns = ?NS_PUBSUB,
name = 'subscription', name = 'subscription',
attrs = [?XMLATTR('jid', exmpp_jid:to_binary(JID)), attrs = [?XMLATTR(<<"jid">>, exmpp_jid:to_binary(JID)),
?XMLATTR('subsription', subscription_to_string(Sub)) | nodeAttr(Node)]}]}]}, ?XMLATTR(<<"subsription">>, subscription_to_string(Sub)) | nodeAttr(Node)]}]}]},
ejabberd_router:route(service_jid(Host), JID, Stanza) ejabberd_router:route(service_jid(Host), JID, Stanza)
end, end,
Action = fun(#pubsub_node{owners = Owners, type = Type, idx = Nidx}) -> Action = fun(#pubsub_node{owners = Owners, type = Type, idx = Nidx}) ->
@ -3519,14 +3519,14 @@ broadcast_config_notification(Host, Node, NodeId, Type, NodeOptions, Lang) ->
SubsByDepth when is_list(SubsByDepth) -> SubsByDepth when is_list(SubsByDepth) ->
Content = case get_option(NodeOptions, deliver_payloads) of Content = case get_option(NodeOptions, deliver_payloads) of
true -> true ->
[#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs = [?XMLATTR('type', <<"form">>)], children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs = [?XMLATTR(<<"type">>, <<"form">>)], children =
get_configure_xfields(Type, NodeOptions, Lang, [])}]; get_configure_xfields(Type, NodeOptions, Lang, [])}];
false -> false ->
[] []
end, end,
Stanza = event_stanza( Stanza = event_stanza(
[#xmlel{ns = ?NS_PUBSUB_EVENT, name = 'items', attrs = nodeAttr(Node), children = [#xmlel{ns = ?NS_PUBSUB_EVENT, name = 'items', attrs = nodeAttr(Node), children =
[#xmlel{ns = ?NS_PUBSUB_EVENT, name = 'item', attrs = [?XMLATTR('id', <<"configuration">>)], children = [#xmlel{ns = ?NS_PUBSUB_EVENT, name = 'item', attrs = [?XMLATTR(<<"id">>, <<"configuration">>)], children =
Content}]}]), Content}]}]),
broadcast_stanza(Host, Node, NodeId, Type, NodeOptions, SubsByDepth, nodes, Stanza, false), broadcast_stanza(Host, Node, NodeId, Type, NodeOptions, SubsByDepth, nodes, Stanza, false),
{result, true}; {result, true};
@ -3773,7 +3773,7 @@ get_configure(Host, ServerHost, Node, #jid{node = User, domain = Server} = From,
[#xmlel{ns = ?NS_PUBSUB_OWNER, name = 'configure', attrs = [#xmlel{ns = ?NS_PUBSUB_OWNER, name = 'configure', attrs =
nodeAttr(Node), children = nodeAttr(Node), children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs = [#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs =
[?XMLATTR('type', <<"form">>)], children = [?XMLATTR(<<"type">>, <<"form">>)], children =
get_configure_xfields(Type, Options, Lang, Groups) get_configure_xfields(Type, Options, Lang, Groups)
}]}]}}; }]}]}};
_ -> _ ->
@ -3790,7 +3790,7 @@ get_default(Host, Node, _From, Lang) ->
Options = node_options(Type), Options = node_options(Type),
{result, #xmlel{ns = ?NS_PUBSUB_OWNER, name = 'pubsub', children = {result, #xmlel{ns = ?NS_PUBSUB_OWNER, name = 'pubsub', children =
[#xmlel{ns = ?NS_PUBSUB_OWNER, name = 'default', children = [#xmlel{ns = ?NS_PUBSUB_OWNER, name = 'default', children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs = [?XMLATTR('type', <<"form">>)], children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs = [?XMLATTR(<<"type">>, <<"form">>)], children =
get_configure_xfields(Type, Options, Lang, []) get_configure_xfields(Type, Options, Lang, [])
}]}]}}. }]}]}}.
@ -3947,7 +3947,7 @@ get_configure_xfields(_Type, Options, Lang, Groups) ->
set_configure(Host, Node, From, Els, Lang) -> set_configure(Host, Node, From, Els, Lang) ->
case exmpp_xml:remove_cdata_from_list(Els) of case exmpp_xml:remove_cdata_from_list(Els) of
[#xmlel{ns = ?NS_DATA_FORMS, name = 'x'} = XEl] -> [#xmlel{ns = ?NS_DATA_FORMS, name = 'x'} = XEl] ->
case exmpp_xml:get_attribute_as_list(XEl, 'type', undefined) of case exmpp_xml:get_attribute_as_list(XEl, <<"type">>, undefined) of
"cancel" -> "cancel" ->
{result, []}; {result, []};
"submit" -> "submit" ->
@ -4476,7 +4476,7 @@ extended_error(Error, Ext) ->
extended_error(Error, Ext, []). extended_error(Error, Ext, []).
extended_error(Error, unsupported, Feature) -> extended_error(Error, unsupported, Feature) ->
extended_error(Error, unsupported, extended_error(Error, unsupported,
[?XMLATTR('feature', Feature)]); [?XMLATTR(<<"feature">>, Feature)]);
extended_error(Error, Ext, ExtAttrs) -> extended_error(Error, Ext, ExtAttrs) ->
%Pubsub_Err = #xmlel{ns = ?NS_PUBSUB_ERRORS, name = Ext, attrs = ExtAttrs}, %Pubsub_Err = #xmlel{ns = ?NS_PUBSUB_ERRORS, name = Ext, attrs = ExtAttrs},
exmpp_xml:append_child(exmpp_stanza:error(?NS_JABBER_CLIENT, Error), exmpp_xml:append_child(exmpp_stanza:error(?NS_JABBER_CLIENT, Error),
@ -4491,13 +4491,13 @@ uniqid() ->
% node attributes % node attributes
nodeAttr(Node) when is_list(Node) -> nodeAttr(Node) when is_list(Node) ->
[?XMLATTR('node', Node)]; [?XMLATTR(<<"node">>, Node)];
nodeAttr(Node) -> nodeAttr(Node) ->
[?XMLATTR('node', node_to_string(Node))]. [?XMLATTR(<<"node">>, node_to_string(Node))].
% item attributes % item attributes
itemAttr([]) -> []; itemAttr([]) -> [];
itemAttr(ItemId) -> [?XMLATTR('id', ItemId)]. itemAttr(ItemId) -> [?XMLATTR(<<"id">>, ItemId)].
% build item elements from item list % build item elements from item list
@ -4545,19 +4545,19 @@ add_headers(#xmlel{children = Els} = Stanza, HeaderName, HeaderNS, HeaderEls) ->
%% identifier of the collection". %% identifier of the collection".
collection_shim(Node) -> collection_shim(Node) ->
[#xmlel{ns = ?NS_PUBSUB, name ='header', [#xmlel{ns = ?NS_PUBSUB, name ='header',
attrs = [?XMLATTR('name', <<"Collection">>)], attrs = [?XMLATTR(<<"name">>, <<"Collection">>)],
children = [?XMLCDATA(node_to_string(Node))]}]. children = [?XMLCDATA(node_to_string(Node))]}].
subid_shim(SubIds) -> subid_shim(SubIds) ->
[#xmlel{ns = ?NS_PUBSUB, name ='header', [#xmlel{ns = ?NS_PUBSUB, name ='header',
attrs = [?XMLATTR('name', <<"SubId">>)], attrs = [?XMLATTR(<<"name">>, <<"SubId">>)],
children = [?XMLCDATA(SubId)]} children = [?XMLCDATA(SubId)]}
|| SubId <- SubIds]. || SubId <- SubIds].
extended_headers(JIDs) -> extended_headers(JIDs) ->
[#xmlel{ns = ?NS_ADDRESS, name = 'address', [#xmlel{ns = ?NS_ADDRESS, name = 'address',
attrs = [?XMLATTR('type', <<"replyto">>), ?XMLATTR('jid', JID)]} attrs = [?XMLATTR(<<"type">>, <<"replyto">>), ?XMLATTR(<<"jid">>, JID)]}
|| JID <- JIDs]. || JID <- JIDs].
feature_check_packet(allow, _User, Server, Pres, {From, _To, El}, in) -> feature_check_packet(allow, _User, Server, Pres, {From, _To, El}, in) ->
@ -4570,7 +4570,7 @@ feature_check_packet(allow, _User, Server, Pres, {From, _To, El}, in) ->
case exmpp_xml:get_element(El, 'event') of case exmpp_xml:get_element(El, 'event') of
#xmlel{name = 'event', ns = ?NS_PUBSUB_EVENT} = Event -> #xmlel{name = 'event', ns = ?NS_PUBSUB_EVENT} = Event ->
Items = exmpp_xml:get_element(Event, ?NS_PUBSUB_EVENT, 'items'), Items = exmpp_xml:get_element(Event, ?NS_PUBSUB_EVENT, 'items'),
Feature = exmpp_xml:get_attribute_as_list(Items, "node", ""), Feature = exmpp_xml:get_attribute_as_list(Items, <<"node">>, ""),
case is_feature_supported(Pres, Feature) of case is_feature_supported(Pres, Feature) of
true -> allow; true -> allow;
false -> deny false -> deny
@ -4661,9 +4661,9 @@ notify_owners(true, JID, Host, Node, Owners, State) ->
Message = #xmlel{name = 'message', ns = ?NS_JABBER_CLIENT, Message = #xmlel{name = 'message', ns = ?NS_JABBER_CLIENT,
children = [#xmlel{name = 'pubsub', ns = ?NS_PUBSUB, children = [#xmlel{name = 'pubsub', ns = ?NS_PUBSUB,
children = [#xmlel{name = 'subscription', ns = ?NS_PUBSUB, children = [#xmlel{name = 'subscription', ns = ?NS_PUBSUB,
attrs = [?XMLATTR('node', Node), attrs = [?XMLATTR(<<"node">>, Node),
?XMLATTR('jid', exmpp_jid:prep_to_binary(exmpp_jid:make(JID))), ?XMLATTR(<<"jid">>, exmpp_jid:prep_to_binary(exmpp_jid:make(JID))),
?XMLATTR('subscription', State)]}]}]}, ?XMLATTR(<<"subscription">>, State)]}]}]},
lists:foreach( lists:foreach(
fun(Owner) -> fun(Owner) ->
ejabberd_router:route(exmpp_jid:make(Host), exmpp_jid:make(Owner), Message) ejabberd_router:route(exmpp_jid:make(Host), exmpp_jid:make(Owner), Message)

View File

@ -391,7 +391,7 @@ disco_local_identity(Acc, _From, To, <<>>, _Lang) ->
case lists:member(?PEPNODE, plugins(exmpp_jid:prep_domain_as_list(To))) of case lists:member(?PEPNODE, plugins(exmpp_jid:prep_domain_as_list(To))) of
true -> true ->
[#xmlel{name = 'identity', ns = ?NS_DISCO_INFO, [#xmlel{name = 'identity', ns = ?NS_DISCO_INFO,
attrs = [?XMLATTR('category', <<"pubsub">>), ?XMLATTR('type', <<"pep">>)]} attrs = [?XMLATTR(<<"category">>, <<"pubsub">>), ?XMLATTR(<<"type">>, <<"pep">>)]}
| Acc]; | Acc];
false -> Acc false -> Acc
end; end;
@ -420,7 +420,7 @@ disco_sm_identity(Acc, From, To, Node, _Lang) ->
disco_identity(_Host, <<>>, _From) -> disco_identity(_Host, <<>>, _From) ->
[#xmlel{name = 'identity', ns = ?NS_DISCO_INFO, [#xmlel{name = 'identity', ns = ?NS_DISCO_INFO,
attrs = [?XMLATTR('category', <<"pubsub">>), ?XMLATTR('type', <<"pep">>)]}]; attrs = [?XMLATTR(<<"category">>, <<"pubsub">>), ?XMLATTR(<<"type">>, <<"pep">>)]}];
disco_identity(Host, Node, From) -> disco_identity(Host, Node, From) ->
Action = fun(#pubsub_node{idx = Nidx, type = Type, options = Options}) -> Action = fun(#pubsub_node{idx = Nidx, type = Type, options = Options}) ->
Owners = node_owners_call(Type, Nidx), Owners = node_owners_call(Type, Nidx),
@ -428,12 +428,12 @@ disco_identity(Host, Node, From) ->
{result, _} -> {result, _} ->
{result, {result,
[#xmlel{name = 'identity', ns = ?NS_DISCO_INFO, [#xmlel{name = 'identity', ns = ?NS_DISCO_INFO,
attrs = [?XMLATTR('category', <<"pubsub">>), ?XMLATTR('type', <<"pep">>)]}, attrs = [?XMLATTR(<<"category">>, <<"pubsub">>), ?XMLATTR(<<"type">>, <<"pep">>)]},
#xmlel{name = 'identity', ns = ?NS_DISCO_INFO, #xmlel{name = 'identity', ns = ?NS_DISCO_INFO,
attrs = [?XMLATTR('category', <<"pubsub">>), ?XMLATTR('type', <<"leaf">>) attrs = [?XMLATTR(<<"category">>, <<"pubsub">>), ?XMLATTR(<<"type">>, <<"leaf">>)
| case get_option(Options, title) of | case get_option(Options, title) of
false -> []; false -> [];
Title -> [?XMLATTR('name', Title)] Title -> [?XMLATTR(<<"name">>, Title)]
end end
]}]}; ]}]};
{error, _} -> {result, []} {error, _} -> {result, []}
@ -479,11 +479,11 @@ disco_items(Host, <<>>, From) ->
case get_allowed_items_call(Host, Nidx, From, Type, Options, Owners) of case get_allowed_items_call(Host, Nidx, From, Type, Options, Owners) of
{result, _} -> {result, _} ->
[#xmlel{name = 'item', ns = ?NS_DISCO_INFO, [#xmlel{name = 'item', ns = ?NS_DISCO_INFO,
attrs = [?XMLATTR('jid', exmpp_jid:to_binary(Host)), attrs = [?XMLATTR(<<"jid">>, exmpp_jid:to_binary(Host)),
?XMLATTR('node', NodeId) | ?XMLATTR(<<"node">>, NodeId) |
case get_option(Options, title) of case get_option(Options, title) of
false -> []; false -> [];
[Title] -> [?XMLATTR('title', Title)] [Title] -> [?XMLATTR(<<"title">>, Title)]
end]} end]}
| Acc]; | Acc];
_ -> Acc _ -> Acc
@ -501,8 +501,8 @@ disco_items(Host, Node, From) ->
{result, Items} -> {result, Items} ->
{result, {result,
[#xmlel{name = 'item', ns = ?NS_DISCO_INFO, [#xmlel{name = 'item', ns = ?NS_DISCO_INFO,
attrs = [?XMLATTR('jid', exmpp_jid:to_binary(Host)), attrs = [?XMLATTR(<<"jid">>, exmpp_jid:to_binary(Host)),
?XMLATTR('name', ItemId)]} ?XMLATTR(<<"name">>, ItemId)]}
|| #pubsub_item{id = {ItemId,_}} <- Items]}; || #pubsub_item{id = {ItemId,_}} <- Items]};
_ -> {result, []} _ -> {result, []}
end end
@ -744,7 +744,7 @@ do_route(ServerHost, Access, Plugins, Host, From, To, Packet) ->
#iq{type = get, ns = ?NS_DISCO_INFO, #iq{type = get, ns = ?NS_DISCO_INFO,
payload = SubEl, lang = Lang} -> payload = SubEl, lang = Lang} ->
QAttrs = SubEl#xmlel.attrs, QAttrs = SubEl#xmlel.attrs,
Node = exmpp_xml:get_attribute_from_list_as_list(QAttrs, 'node', ""), Node = exmpp_xml:get_attribute_from_list_as_list(QAttrs, <<"node">>, ""),
ServerHostB = list_to_binary(ServerHost), ServerHostB = list_to_binary(ServerHost),
Info = ejabberd_hooks:run_fold( Info = ejabberd_hooks:run_fold(
disco_info, ServerHostB, [], disco_info, ServerHostB, [],
@ -762,7 +762,7 @@ do_route(ServerHost, Access, Plugins, Host, From, To, Packet) ->
#iq{type = get, ns = ?NS_DISCO_ITEMS, #iq{type = get, ns = ?NS_DISCO_ITEMS,
payload = SubEl} = IQ -> payload = SubEl} = IQ ->
QAttrs = SubEl#xmlel.attrs, QAttrs = SubEl#xmlel.attrs,
Node = exmpp_xml:get_attribute_from_list_as_list(QAttrs, 'node', ""), Node = exmpp_xml:get_attribute_from_list_as_list(QAttrs, <<"node">>, ""),
Rsm = jlib:rsm_decode(IQ), Rsm = jlib:rsm_decode(IQ),
Res = case iq_disco_items(Host, Node, From, Rsm) of Res = case iq_disco_items(Host, Node, From, Rsm) of
{result, IQRes} -> {result, IQRes} ->
@ -838,12 +838,12 @@ do_route(ServerHost, Access, Plugins, Host, From, To, Packet) ->
undefined -> undefined ->
ok; ok;
Publish -> Publish ->
Node = exmpp_xml:get_attribute(Publish, 'node', <<>>), Node = exmpp_xml:get_attribute(Publish, <<"node">>, <<>>),
case exmpp_xml:get_element(Publish, 'item') of case exmpp_xml:get_element(Publish, 'item') of
undefined -> undefined ->
ok; ok;
Item -> Item ->
ItemId = exmpp_xml:get_attribute_as_list(Item, 'id', ""), ItemId = exmpp_xml:get_attribute_as_list(Item, <<"id">>, ""),
case publish_item(Host, ServerHost, Node, From, ItemId, Item#xmlel.children) of case publish_item(Host, ServerHost, Node, From, ItemId, Item#xmlel.children) of
{result, _} -> {result, _} ->
ok; ok;
@ -875,16 +875,16 @@ do_route(ServerHost, Access, Plugins, Host, From, To, Packet) ->
command_disco_info(_Host, ?NS_ADHOC_b, _From) -> command_disco_info(_Host, ?NS_ADHOC_b, _From) ->
IdentityEl = IdentityEl =
#xmlel{ns = ?NS_DISCO_INFO, name = 'identity', #xmlel{ns = ?NS_DISCO_INFO, name = 'identity',
attrs = [?XMLATTR('category', <<"automation">>), attrs = [?XMLATTR(<<"category">>, <<"automation">>),
?XMLATTR('type', <<"command-list">>)]}, ?XMLATTR(<<"type">>, <<"command-list">>)]},
{result, [IdentityEl]}; {result, [IdentityEl]};
command_disco_info(_Host, ?NS_PUBSUB_GET_PENDING_b, _From) -> command_disco_info(_Host, ?NS_PUBSUB_GET_PENDING_b, _From) ->
IdentityEl = IdentityEl =
#xmlel{ns = ?NS_DISCO_INFO, name = 'identity', #xmlel{ns = ?NS_DISCO_INFO, name = 'identity',
attrs = [?XMLATTR('category', <<"automation">>), attrs = [?XMLATTR(<<"category">>, <<"automation">>),
?XMLATTR('type', <<"command-node">>)]}, ?XMLATTR(<<"type">>, <<"command-node">>)]},
FeaturesEl = #xmlel{ns = ?NS_DISCO_INFO, name = 'feature', FeaturesEl = #xmlel{ns = ?NS_DISCO_INFO, name = 'feature',
attrs = [?XMLATTR('var', ?NS_ADHOC)]}, attrs = [?XMLATTR(<<"var">>, ?NS_ADHOC)]},
{result, [IdentityEl, FeaturesEl]}. {result, [IdentityEl, FeaturesEl]}.
node_disco_info(Host, Node, From) -> node_disco_info(Host, Node, From) ->
@ -908,18 +908,18 @@ node_disco_info(Host, Node, From, Identity, Features) ->
end end
end, end,
lists:map(fun(T) -> lists:map(fun(T) ->
#xmlel{ns = ?NS_DISCO_INFO, name = 'identity', attrs = [?XMLATTR('category', <<"pubsub">>), #xmlel{ns = ?NS_DISCO_INFO, name = 'identity', attrs = [?XMLATTR(<<"category">>, <<"pubsub">>),
?XMLATTR('type', T)]} ?XMLATTR(<<"type">>, T)]}
end, Types) end, Types)
end, end,
F = case Features of F = case Features of
false -> false ->
[]; [];
true -> true ->
[#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR('var', ?NS_PUBSUB_s)]} | [#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR(<<"var">>, ?NS_PUBSUB_s)]} |
lists:map(fun lists:map(fun
("rsm") -> #xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR('var', ?NS_RSM_s)]}; ("rsm") -> #xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR(<<"var">>, ?NS_RSM_s)]};
(T) -> #xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR('var', ?NS_PUBSUB_s++"#"++T)]} (T) -> #xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR(<<"var">>, ?NS_PUBSUB_s++"#"++T)]}
end, features(Type))] end, features(Type))]
end, end,
%% TODO: add meta-data info (spec section 5.4) %% TODO: add meta-data info (spec section 5.4)
@ -940,17 +940,17 @@ iq_disco_info(Host, SNode, From, Lang) ->
<<>> -> <<>> ->
{result, {result,
[#xmlel{ns = ?NS_DISCO_INFO, name = 'identity', attrs = [#xmlel{ns = ?NS_DISCO_INFO, name = 'identity', attrs =
[?XMLATTR('category', "pubsub"), [?XMLATTR(<<"category">>, "pubsub"),
?XMLATTR('type', "service"), ?XMLATTR(<<"type">>, "service"),
?XMLATTR('name', translate:translate(Lang, "Publish-Subscribe"))]}, ?XMLATTR(<<"name">>, translate:translate(Lang, "Publish-Subscribe"))]},
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR('var', ?NS_DISCO_INFO_s)]}, #xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR(<<"var">>, ?NS_DISCO_INFO_s)]},
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR('var', ?NS_DISCO_ITEMS_s)]}, #xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR(<<"var">>, ?NS_DISCO_ITEMS_s)]},
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR('var', ?NS_PUBSUB_s)]}, #xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR(<<"var">>, ?NS_PUBSUB_s)]},
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR('var', ?NS_ADHOC_s)]}, #xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR(<<"var">>, ?NS_ADHOC_s)]},
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR('var', ?NS_VCARD_s)]}] ++ #xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR(<<"var">>, ?NS_VCARD_s)]}] ++
lists:map(fun lists:map(fun
("rsm") -> #xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR('var', ?NS_RSM_s)]}; ("rsm") -> #xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR(<<"var">>, ?NS_RSM_s)]};
(Feature) -> #xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR('var', ?NS_PUBSUB_s++"#"++Feature)]} (Feature) -> #xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR(<<"var">>, ?NS_PUBSUB_s++"#"++Feature)]}
end, features(Host, Node))}; end, features(Host, Node))};
?NS_ADHOC_b -> ?NS_ADHOC_b ->
command_disco_info(Host, Node, From); command_disco_info(Host, Node, From);
@ -968,9 +968,9 @@ iq_disco_items(Host, [], From, _RSM) ->
Attrs = Attrs =
case get_option(Options, title) of case get_option(Options, title) of
false -> false ->
[?XMLATTR('jid', Host) | nodeAttr(SubNode)]; [?XMLATTR(<<"jid">>, Host) | nodeAttr(SubNode)];
Title -> Title ->
[?XMLATTR('jid', Host), ?XMLATTR('name', Title) | nodeAttr(SubNode)] [?XMLATTR(<<"jid">>, Host), ?XMLATTR(<<"name">>, Title) | nodeAttr(SubNode)]
end, end,
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs = Attrs} #xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs = Attrs}
end, Nodes)}; end, Nodes)};
@ -981,9 +981,9 @@ iq_disco_items(Host, ?NS_ADHOC_s, _From, _RSM) ->
%% TODO: support localization of this string %% TODO: support localization of this string
CommandItems = [ CommandItems = [
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', #xmlel{ns = ?NS_DISCO_ITEMS, name = 'item',
attrs = [?XMLATTR('jid', Host), attrs = [?XMLATTR(<<"jid">>, Host),
?XMLATTR('node', ?NS_PUBSUB_GET_PENDING), ?XMLATTR(<<"node">>, ?NS_PUBSUB_GET_PENDING),
?XMLATTR('name', "Get Pending") ?XMLATTR(<<"name">>, "Get Pending")
]}], ]}],
{result, CommandItems}; {result, CommandItems};
iq_disco_items(_Host, ?NS_PUBSUB_GET_PENDING, _From, _RSM) -> iq_disco_items(_Host, ?NS_PUBSUB_GET_PENDING, _From, _RSM) ->
@ -1006,16 +1006,16 @@ iq_disco_items(Host, Item, From, RSM) ->
Attrs = Attrs =
case get_option(SubOptions, title) of case get_option(SubOptions, title) of
false -> false ->
[?XMLATTR('jid', Host) | nodeAttr(SubNode)]; [?XMLATTR(<<"jid">>, Host) | nodeAttr(SubNode)];
Title -> Title ->
[?XMLATTR('jid', Host), ?XMLATTR('name', Title) | nodeAttr(SubNode)] [?XMLATTR(<<"jid">>, Host), ?XMLATTR(<<"name">>, Title) | nodeAttr(SubNode)]
end, end,
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs = Attrs} #xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs = Attrs}
end, tree_call(Host, get_subnodes, [Host, Node, From])), end, tree_call(Host, get_subnodes, [Host, Node, From])),
Items = lists:map( Items = lists:map(
fun(#pubsub_item{id = {RN, _}}) -> fun(#pubsub_item{id = {RN, _}}) ->
{result, Name} = node_call(Type, get_item_name, [Host, Node, RN]), {result, Name} = node_call(Type, get_item_name, [Host, Node, RN]),
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs = [?XMLATTR('jid', Host), ?XMLATTR('name', Name)]} #xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs = [?XMLATTR(<<"jid">>, Host), ?XMLATTR(<<"name">>, Name)]}
end, NodeItems), end, NodeItems),
{result, Nodes ++ Items ++ jlib:rsm_encode(RsmOut)} {result, Nodes ++ Items ++ jlib:rsm_encode(RsmOut)}
end, end,
@ -1067,7 +1067,7 @@ iq_pubsub(Host, ServerHost, From, IQType, SubEl, Lang, Access, Plugins) ->
case exmpp_xml:remove_cdata_from_list(SubEl#xmlel.children) of case exmpp_xml:remove_cdata_from_list(SubEl#xmlel.children) of
[#xmlel{name = Name, attrs = Attrs, children = Els} | Rest] -> [#xmlel{name = Name, attrs = Attrs, children = Els} | Rest] ->
%% Fix bug when owner retrieves his affiliations %% Fix bug when owner retrieves his affiliations
Node = string_to_node(exmpp_xml:get_attribute_from_list_as_list(Attrs, 'node', "")), Node = string_to_node(exmpp_xml:get_attribute_from_list_as_list(Attrs, <<"node">>, "")),
case {IQType, Name} of case {IQType, Name} of
{set, 'create'} -> {set, 'create'} ->
Config = case Rest of Config = case Rest of
@ -1075,7 +1075,7 @@ iq_pubsub(Host, ServerHost, From, IQType, SubEl, Lang, Access, Plugins) ->
_ -> [] _ -> []
end, end,
%% Get the type of the node %% Get the type of the node
Type = case exmpp_xml:get_attribute_from_list_as_list(Attrs, 'type', "") of Type = case exmpp_xml:get_attribute_from_list_as_list(Attrs, <<"type">>, "") of
[] -> hd(Plugins); [] -> hd(Plugins);
T -> T T -> T
end, end,
@ -1093,7 +1093,7 @@ iq_pubsub(Host, ServerHost, From, IQType, SubEl, Lang, Access, Plugins) ->
{set, 'publish'} -> {set, 'publish'} ->
case exmpp_xml:remove_cdata_from_list(Els) of case exmpp_xml:remove_cdata_from_list(Els) of
[#xmlel{name = 'item', attrs = ItemAttrs, children = Payload}] -> [#xmlel{name = 'item', attrs = ItemAttrs, children = Payload}] ->
ItemId = exmpp_xml:get_attribute_from_list_as_list(ItemAttrs, 'id', ""), ItemId = exmpp_xml:get_attribute_from_list_as_list(ItemAttrs, <<"id">>, ""),
publish_item(Host, ServerHost, Node, From, ItemId, Payload); publish_item(Host, ServerHost, Node, From, ItemId, Payload);
[] -> [] ->
%% Publisher attempts to publish to persistent node with no item %% Publisher attempts to publish to persistent node with no item
@ -1105,14 +1105,14 @@ iq_pubsub(Host, ServerHost, From, IQType, SubEl, Lang, Access, Plugins) ->
"invalid-payload")} "invalid-payload")}
end; end;
{set, 'retract'} -> {set, 'retract'} ->
ForceNotify = case exmpp_xml:get_attribute_from_list_as_list(Attrs, 'notify', "") of ForceNotify = case exmpp_xml:get_attribute_from_list_as_list(Attrs, <<"notify">>, "") of
"1" -> true; "1" -> true;
"true" -> true; "true" -> true;
_ -> false _ -> false
end, end,
case exmpp_xml:remove_cdata_from_list(Els) of case exmpp_xml:remove_cdata_from_list(Els) of
[#xmlel{name = 'item', attrs = ItemAttrs}] -> [#xmlel{name = 'item', attrs = ItemAttrs}] ->
ItemId = exmpp_xml:get_attribute_from_list_as_list(ItemAttrs, 'id', ""), ItemId = exmpp_xml:get_attribute_from_list_as_list(ItemAttrs, <<"id">>, ""),
delete_item(Host, Node, From, ItemId, ForceNotify); delete_item(Host, Node, From, ItemId, ForceNotify);
_ -> _ ->
%% Request does not specify an item %% Request does not specify an item
@ -1124,18 +1124,18 @@ iq_pubsub(Host, ServerHost, From, IQType, SubEl, Lang, Access, Plugins) ->
[#xmlel{name = 'options', children = C}] -> C; [#xmlel{name = 'options', children = C}] -> C;
_ -> [] _ -> []
end, end,
JID = exmpp_xml:get_attribute_from_list_as_list(Attrs, 'jid', ""), JID = exmpp_xml:get_attribute_from_list_as_list(Attrs, <<"jid">>, ""),
subscribe_node(Host, Node, From, JID, Config); subscribe_node(Host, Node, From, JID, Config);
{set, 'unsubscribe'} -> {set, 'unsubscribe'} ->
JID = exmpp_xml:get_attribute_from_list_as_list(Attrs, 'jid', ""), JID = exmpp_xml:get_attribute_from_list_as_list(Attrs, <<"jid">>, ""),
SubId = exmpp_xml:get_attribute_from_list_as_list(Attrs, 'subid', ""), SubId = exmpp_xml:get_attribute_from_list_as_list(Attrs, <<"subid">>, ""),
unsubscribe_node(Host, Node, From, JID, SubId); unsubscribe_node(Host, Node, From, JID, SubId);
{get, 'items'} -> {get, 'items'} ->
MaxItems = exmpp_xml:get_attribute_from_list_as_list(Attrs, 'max_items', ""), MaxItems = exmpp_xml:get_attribute_from_list_as_list(Attrs, <<"max_items">>, ""),
SubId = exmpp_xml:get_attribute_from_list_as_list(Attrs, 'subid', ""), SubId = exmpp_xml:get_attribute_from_list_as_list(Attrs, <<"subid">>, ""),
ItemIds = lists:foldl(fun ItemIds = lists:foldl(fun
(#xmlel{name = 'item', attrs = ItemAttrs}, Acc) -> (#xmlel{name = 'item', attrs = ItemAttrs}, Acc) ->
case exmpp_xml:get_attribute_from_list_as_list(ItemAttrs, 'id', "") of case exmpp_xml:get_attribute_from_list_as_list(ItemAttrs, <<"id">>, "") of
"" -> Acc; "" -> Acc;
ItemId -> [ItemId|Acc] ItemId -> [ItemId|Acc]
end; end;
@ -1148,12 +1148,12 @@ iq_pubsub(Host, ServerHost, From, IQType, SubEl, Lang, Access, Plugins) ->
{get, 'affiliations'} -> {get, 'affiliations'} ->
get_affiliations(Host, From, Plugins); get_affiliations(Host, From, Plugins);
{get, 'options'} -> {get, 'options'} ->
SubId = exmpp_xml:get_attribute_from_list_as_list(Attrs, 'subid', ""), SubId = exmpp_xml:get_attribute_from_list_as_list(Attrs, <<"subid">>, ""),
JID = exmpp_xml:get_attribute_from_list_as_list(Attrs, 'jid', ""), JID = exmpp_xml:get_attribute_from_list_as_list(Attrs, <<"jid">>, ""),
get_options(Host, Node, JID, SubId, Lang); get_options(Host, Node, JID, SubId, Lang);
{set, 'options'} -> {set, 'options'} ->
SubId = exmpp_xml:get_attribute_from_list_as_list(Attrs, 'subid', ""), SubId = exmpp_xml:get_attribute_from_list_as_list(Attrs, <<"subid">>, ""),
JID = exmpp_xml:get_attribute_from_list_as_list(Attrs, 'jid', ""), JID = exmpp_xml:get_attribute_from_list_as_list(Attrs, <<"jid">>, ""),
set_options(Host, Node, JID, SubId, Els); set_options(Host, Node, JID, SubId, Els);
_ -> _ ->
{error, 'feature-not-implemented'} {error, 'feature-not-implemented'}
@ -1168,7 +1168,7 @@ iq_pubsub_owner(Host, ServerHost, From, IQType, SubEl, Lang) ->
Action = exmpp_xml:remove_cdata_from_list(SubEls), Action = exmpp_xml:remove_cdata_from_list(SubEls),
case Action of case Action of
[#xmlel{name = Name, attrs = Attrs, children = Els}] -> [#xmlel{name = Name, attrs = Attrs, children = Els}] ->
Node = string_to_node(exmpp_xml:get_attribute_from_list_as_list(Attrs, 'node', "")), Node = string_to_node(exmpp_xml:get_attribute_from_list_as_list(Attrs, <<"node">>, "")),
case {IQType, Name} of case {IQType, Name} of
{get, 'configure'} -> {get, 'configure'} ->
get_configure(Host, ServerHost, Node, From, Lang); get_configure(Host, ServerHost, Node, From, Lang);
@ -1280,11 +1280,11 @@ send_pending_node_form(Host, Owner, _Lang, Plugins) ->
children = [ children = [
exmpp_xml:cdata(node_to_string(Node))]}]} exmpp_xml:cdata(node_to_string(Node))]}]}
end, get_pending_nodes(Host, Owner, Ps)), end, get_pending_nodes(Host, Owner, Ps)),
XForm = #xmlel{ns = ?NS_DATA_FORMS, name ='x', attrs = [?XMLATTR('type', <<"form">>)], XForm = #xmlel{ns = ?NS_DATA_FORMS, name ='x', attrs = [?XMLATTR(<<"type">>, <<"form">>)],
children = [ children = [
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', #xmlel{ns = ?NS_DATA_FORMS, name = 'field',
attrs = [?XMLATTR('type', <<"list-single">>), attrs = [?XMLATTR(<<"type">>, <<"list-single">>),
?XMLATTR('var', <<"pubsub#node">>)], ?XMLATTR(<<"var">>, <<"pubsub#node">>)],
children = lists:usort(XOpts)}]}, children = lists:usort(XOpts)}]},
#adhoc_response{status = executing, #adhoc_response{status = executing,
defaultaction = "execute", defaultaction = "execute",
@ -1348,28 +1348,28 @@ send_authorization_request(#pubsub_node{id = {Host, Node}, type = Type, idx = Ni
Lang = <<"en">>, %% TODO fix Lang = <<"en">>, %% TODO fix
{U, S, R} = Subscriber, {U, S, R} = Subscriber,
Stanza = #xmlel{ns = ?NS_JABBER_CLIENT, name = 'message', children = Stanza = #xmlel{ns = ?NS_JABBER_CLIENT, name = 'message', children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs = [?XMLATTR('type', <<"form">>)], children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs = [?XMLATTR(<<"type">>, <<"form">>)], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
[#xmlcdata{cdata = list_to_binary(translate:translate(Lang, "PubSub subscriber request"))}]}, [#xmlcdata{cdata = list_to_binary(translate:translate(Lang, "PubSub subscriber request"))}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'instructions', children = #xmlel{ns = ?NS_DATA_FORMS, name = 'instructions', children =
[#xmlcdata{cdata = list_to_binary(translate:translate(Lang, "Choose whether to approve this entity's subscription."))}]}, [#xmlcdata{cdata = list_to_binary(translate:translate(Lang, "Choose whether to approve this entity's subscription."))}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[?XMLATTR('var', <<"FORM_TYPE">>), ?XMLATTR('type', <<"hidden">>)], children = [?XMLATTR(<<"var">>, <<"FORM_TYPE">>), ?XMLATTR(<<"type">>, <<"hidden">>)], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(?NS_PUBSUB_SUBSCRIBE_AUTH_s)}]}]}, [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(?NS_PUBSUB_SUBSCRIBE_AUTH_s)}]}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[?XMLATTR('var', <<"pubsub#node">>), ?XMLATTR('type', <<"text-single">>), [?XMLATTR(<<"var">>, <<"pubsub#node">>), ?XMLATTR(<<"type">>, <<"text-single">>),
?XMLATTR('label', translate:translate(Lang, "Node ID"))], children = ?XMLATTR(<<"label">>, translate:translate(Lang, "Node ID"))], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children =
[#xmlcdata{cdata = Node}]}]}, [#xmlcdata{cdata = Node}]}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [?XMLATTR('var', <<"pubsub#subscriber_jid">>), #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [?XMLATTR(<<"var">>, <<"pubsub#subscriber_jid">>),
?XMLATTR('type', <<"jid-single">>), ?XMLATTR(<<"type">>, <<"jid-single">>),
?XMLATTR('label', translate:translate(Lang, "Subscriber Address"))], children = ?XMLATTR(<<"label">>, translate:translate(Lang, "Subscriber Address"))], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children =
[#xmlcdata{cdata = exmpp_jid:to_binary(U, S, R)}]}]}, [#xmlcdata{cdata = exmpp_jid:to_binary(U, S, R)}]}]},
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[?XMLATTR('var', <<"pubsub#allow">>), [?XMLATTR(<<"var">>, <<"pubsub#allow">>),
?XMLATTR('type', <<"boolean">>), ?XMLATTR(<<"type">>, <<"boolean">>),
?XMLATTR('label', translate:translate(Lang, "Allow this Jabber ID to subscribe to this pubsub node?"))], children = ?XMLATTR(<<"label">>, translate:translate(Lang, "Allow this Jabber ID to subscribe to this pubsub node?"))], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = <<"false">>}]}]}]}]}, [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = <<"false">>}]}]}]}]},
lists:foreach(fun(Owner) -> lists:foreach(fun(Owner) ->
{U, S, R} = Owner, {U, S, R} = Owner,
@ -1379,7 +1379,7 @@ send_authorization_request(#pubsub_node{id = {Host, Node}, type = Type, idx = Ni
find_authorization_response(Packet) -> find_authorization_response(Packet) ->
Els = Packet#xmlel.children, Els = Packet#xmlel.children,
XData1 = lists:map(fun(#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs = XAttrs} = XEl) -> XData1 = lists:map(fun(#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs = XAttrs} = XEl) ->
case exmpp_xml:get_attribute_from_list_as_list(XAttrs, 'type', "") of case exmpp_xml:get_attribute_from_list_as_list(XAttrs, <<"type">>, "") of
"cancel" -> "cancel" ->
none; none;
_ -> _ ->
@ -1410,13 +1410,13 @@ find_authorization_response(Packet) ->
%% @doc Send a message to JID with the supplied Subscription %% @doc Send a message to JID with the supplied Subscription
send_authorization_approval(Host, JID, SNode, Subscription) -> send_authorization_approval(Host, JID, SNode, Subscription) ->
SubAttrs = case Subscription of SubAttrs = case Subscription of
{S, SID} -> [?XMLATTR('subscription', subscription_to_string(S)), {S, SID} -> [?XMLATTR(<<"subscription">>, subscription_to_string(S)),
?XMLATTR('subid', SID)]; ?XMLATTR(<<"subid">>, SID)];
S -> [?XMLATTR('subscription', subscription_to_string(S))] S -> [?XMLATTR(<<"subscription">>, subscription_to_string(S))]
end, end,
Stanza = event_stanza( Stanza = event_stanza(
[#xmlel{ns = ?NS_PUBSUB_EVENT, name = 'subscription', attrs = [#xmlel{ns = ?NS_PUBSUB_EVENT, name = 'subscription', attrs =
[?XMLATTR('jid', exmpp_jid:to_binary(JID)) | nodeAttr(SNode)] ++ SubAttrs [?XMLATTR(<<"jid">>, exmpp_jid:to_binary(JID)) | nodeAttr(SNode)] ++ SubAttrs
}]), }]),
ejabberd_router:route(service_jid(Host), JID, Stanza). ejabberd_router:route(service_jid(Host), JID, Stanza).
@ -1481,9 +1481,9 @@ update_auth(Host, Node, Type, Nidx, Subscriber,
end. end.
-define(XFIELD(Type, Label, Var, Val), -define(XFIELD(Type, Label, Var, Val),
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [?XMLATTR('type', Type), #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [?XMLATTR(<<"type">>, Type),
?XMLATTR('label', translate:translate(Lang, Label)), ?XMLATTR(<<"label">>, translate:translate(Lang, Label)),
?XMLATTR('var', Var)], children = ?XMLATTR(<<"var">>, Var)], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(Val)}]}]}). [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(Val)}]}]}).
-define(BOOLXFIELD(Label, Var, Val), -define(BOOLXFIELD(Label, Var, Val),
@ -1499,17 +1499,17 @@ update_auth(Host, Node, Type, Nidx, Subscriber,
-define(STRINGMXFIELD(Label, Var, Vals), -define(STRINGMXFIELD(Label, Var, Vals),
#xmlel{ns = ?NS_DATA_FORMS, #xmlel{ns = ?NS_DATA_FORMS,
name = 'field', name = 'field',
attrs = [?XMLATTR('type', <<"text-multi">>), attrs = [?XMLATTR(<<"type">>, <<"text-multi">>),
?XMLATTR('label', translate:translate(Lang, Label)), ?XMLATTR(<<"label">>, translate:translate(Lang, Label)),
?XMLATTR('var', Var) ?XMLATTR(<<"var">>, Var)
], ],
children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value',
children = [?XMLCDATA(V)]} || V <- Vals]}). children = [?XMLCDATA(V)]} || V <- Vals]}).
-define(XFIELDOPT(Type, Label, Var, Val, Opts), -define(XFIELDOPT(Type, Label, Var, Val, Opts),
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [?XMLATTR('type', Type), #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [?XMLATTR(<<"type">>, Type),
?XMLATTR('label', translate:translate(Lang, Label)), ?XMLATTR(<<"label">>, translate:translate(Lang, Label)),
?XMLATTR('var', Var)], children = ?XMLATTR(<<"var">>, Var)], children =
lists:map(fun(Opt) -> lists:map(fun(Opt) ->
#xmlel{ns = ?NS_DATA_FORMS, name = 'option', children = #xmlel{ns = ?NS_DATA_FORMS, name = 'option', children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children =
@ -1521,9 +1521,9 @@ update_auth(Host, Node, Type, Nidx, Subscriber,
?XFIELDOPT("list-single", Label, Var, Val, Opts)). ?XFIELDOPT("list-single", Label, Var, Val, Opts)).
-define(LISTMXFIELD(Label, Var, Vals, Opts), -define(LISTMXFIELD(Label, Var, Vals, Opts),
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [?XMLATTR('type', <<"list-multi">>), #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [?XMLATTR(<<"type">>, <<"list-multi">>),
?XMLATTR('label', translate:translate(Lang, Label)), ?XMLATTR(<<"label">>, translate:translate(Lang, Label)),
?XMLATTR('var', Var)], children = ?XMLATTR(<<"var">>, Var)], children =
lists:map(fun(Opt) -> lists:map(fun(Opt) ->
#xmlel{ns = ?NS_DATA_FORMS, name = 'option', children = #xmlel{ns = ?NS_DATA_FORMS, name = 'option', children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children =
@ -1783,13 +1783,13 @@ subscribe_node(Host, Node, From, JID, Configuration) ->
%% TODO, this is subscription-notification, should depends on node features %% TODO, this is subscription-notification, should depends on node features
SubAttrs = case Subscription of SubAttrs = case Subscription of
{subscribed, SubId} -> {subscribed, SubId} ->
[?XMLATTR("subscription", subscription_to_string(subscribed)), [?XMLATTR(<<"subscription">>, subscription_to_string(subscribed)),
?XMLATTR("subid", SubId)]; ?XMLATTR(<<"subid">>, SubId)];
Other -> Other ->
[?XMLATTR("subscription", subscription_to_string(Other))] [?XMLATTR(<<"subscription">>, subscription_to_string(Other))]
end, end,
Fields = Fields =
[ ?XMLATTR('jid', JID) | SubAttrs], [ ?XMLATTR(<<"jid">>, JID) | SubAttrs],
#xmlel{ns = ?NS_PUBSUB, name = 'pubsub', children = #xmlel{ns = ?NS_PUBSUB, name = 'pubsub', children =
[#xmlel{ns = ?NS_PUBSUB, name = 'subscription', attrs = Fields}]} [#xmlel{ns = ?NS_PUBSUB, name = 'subscription', attrs = Fields}]}
end, end,
@ -2271,8 +2271,8 @@ get_affiliations(Host, JID, Plugins) when is_list(Plugins) ->
fun({_, none}) -> []; fun({_, none}) -> [];
({#pubsub_node{id = {_, Node}}, Affiliation}) -> ({#pubsub_node{id = {_, Node}}, Affiliation}) ->
[#xmlel{ns = ?NS_PUBSUB, name = 'affiliation', attrs = [#xmlel{ns = ?NS_PUBSUB, name = 'affiliation', attrs =
[?XMLATTR('node', node_to_string(Node)), [?XMLATTR(<<"node">>, node_to_string(Node)),
?XMLATTR('affiliation', affiliation_to_string(Affiliation))]}] ?XMLATTR(<<"affiliation">>, affiliation_to_string(Affiliation))]}]
end, lists:usort(lists:flatten(Affiliations))), end, lists:usort(lists:flatten(Affiliations))),
{result, #xmlel{ns = ?NS_PUBSUB, name = 'pubsub', children = {result, #xmlel{ns = ?NS_PUBSUB, name = 'pubsub', children =
[#xmlel{ns = ?NS_PUBSUB, name = 'affiliations', children = [#xmlel{ns = ?NS_PUBSUB, name = 'affiliations', children =
@ -2302,8 +2302,8 @@ get_affiliations(Host, Node, JID) ->
fun({_, none}) -> []; fun({_, none}) -> [];
({{AU, AS, AR}, Affiliation}) -> ({{AU, AS, AR}, Affiliation}) ->
[#xmlel{ns = ?NS_PUBSUB_OWNER, name = 'affiliation', attrs = [#xmlel{ns = ?NS_PUBSUB_OWNER, name = 'affiliation', attrs =
[?XMLATTR('jid', exmpp_jid:to_binary(AU, AS, AR)), [?XMLATTR(<<"jid">>, exmpp_jid:to_binary(AU, AS, AR)),
?XMLATTR('affiliation', affiliation_to_string(Affiliation))]}] ?XMLATTR(<<"affiliation">>, affiliation_to_string(Affiliation))]}]
end, Affiliations), end, Affiliations),
{result, #xmlel{ns = ?NS_PUBSUB_OWNER, name = 'pubsub', children = {result, #xmlel{ns = ?NS_PUBSUB_OWNER, name = 'pubsub', children =
[#xmlel{ns = ?NS_PUBSUB_OWNER, name = 'affiliations', attrs = nodeAttr(Node), children = [#xmlel{ns = ?NS_PUBSUB_OWNER, name = 'affiliations', attrs = nodeAttr(Node), children =
@ -2325,12 +2325,12 @@ set_affiliations(Host, Node, From, EntitiesEls) ->
#xmlel{name = 'affiliation', attrs = Attrs} -> #xmlel{name = 'affiliation', attrs = Attrs} ->
JID = try JID = try
exmpp_jid:parse( exmpp_jid:parse(
exmpp_xml:get_attribute_from_list(Attrs, 'jid', "")) exmpp_xml:get_attribute_from_list(Attrs, <<"jid">>, ""))
catch catch
_:_ -> error _:_ -> error
end, end,
Affiliation = string_to_affiliation( Affiliation = string_to_affiliation(
exmpp_xml:get_attribute_from_list_as_list(Attrs, 'affiliation', "")), exmpp_xml:get_attribute_from_list_as_list(Attrs, <<"affiliation">>, "")),
if if
(JID == error) or (JID == error) or
(Affiliation == false) -> (Affiliation == false) ->
@ -2418,8 +2418,8 @@ read_sub(Subscriber, Node, NodeId, SubId, Lang) ->
{result, #pubsub_subscription{options = Options}} -> {result, #pubsub_subscription{options = Options}} ->
{result, XdataEl} = pubsub_subscription_odbc:get_options_xform(Lang, Options), {result, XdataEl} = pubsub_subscription_odbc:get_options_xform(Lang, Options),
OptionsEl = #xmlel{ns = ?NS_PUBSUB, name = 'options', OptionsEl = #xmlel{ns = ?NS_PUBSUB, name = 'options',
attrs = [ ?XMLATTR('jid', exmpp_jid:to_binary(Subscriber)), attrs = [ ?XMLATTR(<<"jid">>, exmpp_jid:to_binary(Subscriber)),
?XMLATTR('subid', SubId) | nodeAttr(Node)], ?XMLATTR(<<"subid">>, SubId) | nodeAttr(Node)],
children = [XdataEl]}, children = [XdataEl]},
PubsubEl = #xmlel{ns = ?NS_PUBSUB, name = 'pubsub', children = [OptionsEl]}, PubsubEl = #xmlel{ns = ?NS_PUBSUB, name = 'pubsub', children = [OptionsEl]},
{result, PubsubEl} {result, PubsubEl}
@ -2512,11 +2512,11 @@ get_subscriptions(Host, Node, JID, Plugins) when is_list(Plugins) ->
case Node of case Node of
<<>> -> <<>> ->
[#xmlel{ns = ?NS_PUBSUB, name = 'subscription', attrs = [#xmlel{ns = ?NS_PUBSUB, name = 'subscription', attrs =
[?XMLATTR('node', node_to_string(SubsNode)), [?XMLATTR(<<"node">>, node_to_string(SubsNode)),
?XMLATTR('subscription', subscription_to_string(Subscription))]}]; ?XMLATTR(<<"subscription">>, subscription_to_string(Subscription))]}];
SubsNode -> SubsNode ->
[#xmlel{ns = ?NS_PUBSUB, name = 'subscription', attrs = [#xmlel{ns = ?NS_PUBSUB, name = 'subscription', attrs =
[?XMLATTR('subscription', subscription_to_string(Subscription))]}]; [?XMLATTR(<<"subscription">>, subscription_to_string(Subscription))]}];
_ -> _ ->
[] []
end; end;
@ -2526,14 +2526,14 @@ get_subscriptions(Host, Node, JID, Plugins) when is_list(Plugins) ->
case Node of case Node of
<<>> -> <<>> ->
[#xmlel{ns = ?NS_PUBSUB, name='subscription', [#xmlel{ns = ?NS_PUBSUB, name='subscription',
attrs = [?XMLATTR('jid', exmpp_jid:to_binary(SubJID)), attrs = [?XMLATTR(<<"jid">>, exmpp_jid:to_binary(SubJID)),
?XMLATTR('subid', SubId), ?XMLATTR(<<"subid">>, SubId),
?XMLATTR('subscription', subscription_to_string(Subscription)) | nodeAttr(SubsNode)]}]; ?XMLATTR(<<"subscription">>, subscription_to_string(Subscription)) | nodeAttr(SubsNode)]}];
SubsNode -> SubsNode ->
[#xmlel{ns = ?NS_PUBSUB, name = 'subscription', [#xmlel{ns = ?NS_PUBSUB, name = 'subscription',
attrs = [?XMLATTR('jid', exmpp_jid:to_binary(SubJID)), attrs = [?XMLATTR(<<"jid">>, exmpp_jid:to_binary(SubJID)),
?XMLATTR('subid', SubId), ?XMLATTR(<<"subid">>, SubId),
?XMLATTR('subscription', subscription_to_string(Subscription))]}]; ?XMLATTR(<<"subscription">>, subscription_to_string(Subscription))]}];
_ -> _ ->
[] []
end; end;
@ -2541,13 +2541,13 @@ get_subscriptions(Host, Node, JID, Plugins) when is_list(Plugins) ->
case Node of case Node of
<<>> -> <<>> ->
[#xmlel{ns = ?NS_PUBSUB, name = 'subscription', attrs = [#xmlel{ns = ?NS_PUBSUB, name = 'subscription', attrs =
[?XMLATTR('node', node_to_string(SubsNode)), [?XMLATTR(<<"node">>, node_to_string(SubsNode)),
?XMLATTR('jid', exmpp_jid:to_binary(SubJID)), ?XMLATTR(<<"jid">>, exmpp_jid:to_binary(SubJID)),
?XMLATTR('subscription', subscription_to_string(Subscription))]}]; ?XMLATTR(<<"subscription">>, subscription_to_string(Subscription))]}];
SubsNode -> SubsNode ->
[#xmlel{ns = ?NS_PUBSUB, name = 'subscription', attrs = [#xmlel{ns = ?NS_PUBSUB, name = 'subscription', attrs =
[?XMLATTR('jid', exmpp_jid:to_binary(SubJID)), [?XMLATTR(<<"jid">>, exmpp_jid:to_binary(SubJID)),
?XMLATTR('subscription', subscription_to_string(Subscription))]}]; ?XMLATTR(<<"subscription">>, subscription_to_string(Subscription))]}];
_ -> _ ->
[] []
end end
@ -2584,13 +2584,13 @@ get_subscriptions(Host, Node, JID) ->
({_, pending, _}) -> []; ({_, pending, _}) -> [];
({{AU, AS, AR}, Subscription}) -> ({{AU, AS, AR}, Subscription}) ->
[#xmlel{ns = ?NS_PUBSUB_OWNER, name = 'subscription', attrs = [#xmlel{ns = ?NS_PUBSUB_OWNER, name = 'subscription', attrs =
[?XMLATTR('jid', exmpp_jid:to_binary(AU, AS, AR)), [?XMLATTR(<<"jid">>, exmpp_jid:to_binary(AU, AS, AR)),
?XMLATTR('subscription', subscription_to_string(Subscription))]}]; ?XMLATTR(<<"subscription">>, subscription_to_string(Subscription))]}];
({{AU, AS, AR}, Subscription, SubId}) -> ({{AU, AS, AR}, Subscription, SubId}) ->
[#xmlel{ns = ?NS_PUBSUB_OWNER, name = 'subscription', attrs = [#xmlel{ns = ?NS_PUBSUB_OWNER, name = 'subscription', attrs =
[?XMLATTR('jid', exmpp_jid:to_binary(AU, AS, AR)), [?XMLATTR(<<"jid">>, exmpp_jid:to_binary(AU, AS, AR)),
?XMLATTR('subscription', subscription_to_string(Subscription)), ?XMLATTR(<<"subscription">>, subscription_to_string(Subscription)),
?XMLATTR('subid', SubId)]}] ?XMLATTR(<<"subid">>, SubId)]}]
end, Subscriptions), end, Subscriptions),
{result, #xmlel{ns = ?NS_PUBSUB_OWNER, name = 'pubsub', children = {result, #xmlel{ns = ?NS_PUBSUB_OWNER, name = 'pubsub', children =
[#xmlel{ns = ?NS_PUBSUB_OWNER, name = 'subscriptions', attrs = nodeAttr(Node), children = [#xmlel{ns = ?NS_PUBSUB_OWNER, name = 'subscriptions', attrs = nodeAttr(Node), children =
@ -2612,14 +2612,14 @@ set_subscriptions(Host, Node, From, EntitiesEls) ->
#xmlel{name = 'subscription', attrs = Attrs} -> #xmlel{name = 'subscription', attrs = Attrs} ->
JID = try JID = try
exmpp_jid:parse( exmpp_jid:parse(
exmpp_xml:get_attribute_from_list(Attrs, 'jid', "")) exmpp_xml:get_attribute_from_list(Attrs, <<"jid">>, ""))
catch catch
_:_ -> _:_ ->
error error
end, end,
Subscription = string_to_subscription( Subscription = string_to_subscription(
exmpp_xml:get_attribute_from_list_as_list(Attrs, 'subscription', false)), exmpp_xml:get_attribute_from_list_as_list(Attrs, <<"subscription">>, false)),
SubId = exmpp_xml:get_attribute_from_list_as_list(Attrs, "subid", false), SubId = exmpp_xml:get_attribute_from_list_as_list(Attrs, <<"subid">>, false),
if if
(JID == error) or (JID == error) or
(Subscription == false) -> (Subscription == false) ->
@ -2643,8 +2643,8 @@ set_subscriptions(Host, Node, From, EntitiesEls) ->
children = children =
[#xmlel{ns = ?NS_PUBSUB, [#xmlel{ns = ?NS_PUBSUB,
name = 'subscription', name = 'subscription',
attrs = [?XMLATTR('jid', exmpp_jid:to_binary(JID)), attrs = [?XMLATTR(<<"jid">>, exmpp_jid:to_binary(JID)),
?XMLATTR('subsription', subscription_to_string(Sub)) | nodeAttr(Node)]}]}]}, ?XMLATTR(<<"subsription">>, subscription_to_string(Sub)) | nodeAttr(Node)]}]}]},
ejabberd_router:route(service_jid(Host), JID, Stanza) ejabberd_router:route(service_jid(Host), JID, Stanza)
end, end,
Action = fun(#pubsub_node{type = Type, idx = Nidx}) -> Action = fun(#pubsub_node{type = Type, idx = Nidx}) ->
@ -2973,14 +2973,14 @@ broadcast_config_notification(Host, Node, NodeId, Type, NodeOptions, Lang) ->
SubsByDepth when is_list(SubsByDepth) -> SubsByDepth when is_list(SubsByDepth) ->
Content = case get_option(NodeOptions, deliver_payloads) of Content = case get_option(NodeOptions, deliver_payloads) of
true -> true ->
[#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs = [?XMLATTR('type', <<"form">>)], children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs = [?XMLATTR(<<"type">>, <<"form">>)], children =
get_configure_xfields(Type, NodeOptions, Lang, [])}]; get_configure_xfields(Type, NodeOptions, Lang, [])}];
false -> false ->
[] []
end, end,
Stanza = event_stanza( Stanza = event_stanza(
[#xmlel{ns = ?NS_PUBSUB_EVENT, name = 'items', attrs = nodeAttr(Node), children = [#xmlel{ns = ?NS_PUBSUB_EVENT, name = 'items', attrs = nodeAttr(Node), children =
[#xmlel{ns = ?NS_PUBSUB_EVENT, name = 'item', attrs = [?XMLATTR('id', <<"configuration">>)], children = [#xmlel{ns = ?NS_PUBSUB_EVENT, name = 'item', attrs = [?XMLATTR(<<"id">>, <<"configuration">>)], children =
Content}]}]), Content}]}]),
broadcast_stanza(Host, Node, NodeId, Type, NodeOptions, SubsByDepth, nodes, Stanza, false), broadcast_stanza(Host, Node, NodeId, Type, NodeOptions, SubsByDepth, nodes, Stanza, false),
{result, true}; {result, true};
@ -3191,7 +3191,7 @@ get_configure(Host, ServerHost, Node, From, Lang) ->
[#xmlel{ns = ?NS_PUBSUB_OWNER, name = 'configure', attrs = [#xmlel{ns = ?NS_PUBSUB_OWNER, name = 'configure', attrs =
nodeAttr(Node), children = nodeAttr(Node), children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs = [#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs =
[?XMLATTR('type', <<"form">>)], children = [?XMLATTR(<<"type">>, <<"form">>)], children =
get_configure_xfields(Type, Options, Lang, Groups) get_configure_xfields(Type, Options, Lang, Groups)
}]}]}}; }]}]}};
_ -> _ ->
@ -3208,7 +3208,7 @@ get_default(Host, Node, _From, Lang) ->
Options = node_options(Type), Options = node_options(Type),
{result, #xmlel{ns = ?NS_PUBSUB_OWNER, name = 'pubsub', children = {result, #xmlel{ns = ?NS_PUBSUB_OWNER, name = 'pubsub', children =
[#xmlel{ns = ?NS_PUBSUB_OWNER, name = 'default', children = [#xmlel{ns = ?NS_PUBSUB_OWNER, name = 'default', children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs = [?XMLATTR('type', <<"form">>)], children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs = [?XMLATTR(<<"type">>, <<"form">>)], children =
get_configure_xfields(Type, Options, Lang, []) get_configure_xfields(Type, Options, Lang, [])
}]}]}}. }]}]}}.
@ -3359,7 +3359,7 @@ get_configure_xfields(_Type, Options, Lang, Groups) ->
set_configure(Host, Node, From, Els, Lang) -> set_configure(Host, Node, From, Els, Lang) ->
case exmpp_xml:remove_cdata_from_list(Els) of case exmpp_xml:remove_cdata_from_list(Els) of
[#xmlel{ns = ?NS_DATA_FORMS, name = 'x'} = XEl] -> [#xmlel{ns = ?NS_DATA_FORMS, name = 'x'} = XEl] ->
case exmpp_xml:get_attribute_as_list(XEl, 'type', undefined) of case exmpp_xml:get_attribute_as_list(XEl, <<"type">>, undefined) of
"cancel" -> "cancel" ->
{result, []}; {result, []};
"submit" -> "submit" ->
@ -3761,7 +3761,7 @@ extended_error(Error, Ext) ->
extended_error(Error, Ext, []). extended_error(Error, Ext, []).
extended_error(Error, unsupported, Feature) -> extended_error(Error, unsupported, Feature) ->
extended_error(Error, unsupported, extended_error(Error, unsupported,
[?XMLATTR('feature', Feature)]); [?XMLATTR(<<"feature">>, Feature)]);
extended_error(Error, Ext, ExtAttrs) -> extended_error(Error, Ext, ExtAttrs) ->
Pubsub_Err = #xmlel{ns = ?NS_PUBSUB_ERRORS, name = Ext, attrs = ExtAttrs}, Pubsub_Err = #xmlel{ns = ?NS_PUBSUB_ERRORS, name = Ext, attrs = ExtAttrs},
exmpp_xml:append_child(exmpp_stanza:error(?NS_JABBER_CLIENT, Error), exmpp_xml:append_child(exmpp_stanza:error(?NS_JABBER_CLIENT, Error),
@ -3774,13 +3774,13 @@ uniqid() ->
% node attributes % node attributes
nodeAttr(Node) when is_list(Node) -> nodeAttr(Node) when is_list(Node) ->
[?XMLATTR('node', Node)]; [?XMLATTR(<<"node">>, Node)];
nodeAttr(Node) -> nodeAttr(Node) ->
[?XMLATTR('node', node_to_string(Node))]. [?XMLATTR(<<"node">>, node_to_string(Node))].
% item attributes % item attributes
itemAttr([]) -> []; itemAttr([]) -> [];
itemAttr(ItemId) -> [?XMLATTR('id', ItemId)]. itemAttr(ItemId) -> [?XMLATTR(<<"id">>, ItemId)].
% build item elements from item list % build item elements from item list
itemsEls(Items) -> itemsEls(Items) ->
@ -3821,19 +3821,19 @@ add_headers(#xmlel{children = Els} = Stanza, HeaderName, HeaderNS, HeaderEls) ->
%% identifier of the collection". %% identifier of the collection".
collection_shim(Node) -> collection_shim(Node) ->
[#xmlel{ns = ?NS_PUBSUB, name ='header', [#xmlel{ns = ?NS_PUBSUB, name ='header',
attrs = [?XMLATTR('name', <<"Collection">>)], attrs = [?XMLATTR(<<"name">>, <<"Collection">>)],
children = [?XMLCDATA(node_to_string(Node))]}]. children = [?XMLCDATA(node_to_string(Node))]}].
subid_shim(SubIds) -> subid_shim(SubIds) ->
[#xmlel{ns = ?NS_PUBSUB, name ='header', [#xmlel{ns = ?NS_PUBSUB, name ='header',
attrs = [?XMLATTR('name', <<"SubId">>)], attrs = [?XMLATTR(<<"name">>, <<"SubId">>)],
children = [?XMLCDATA(SubId)]} children = [?XMLCDATA(SubId)]}
|| SubId <- SubIds]. || SubId <- SubIds].
extended_headers(JIDs) -> extended_headers(JIDs) ->
[#xmlel{ns = ?NS_ADDRESS, name = 'address', [#xmlel{ns = ?NS_ADDRESS, name = 'address',
attrs = [?XMLATTR('type', <<"replyto">>), ?XMLATTR('jid', JID)]} attrs = [?XMLATTR(<<"type">>, <<"replyto">>), ?XMLATTR(<<"jid">>, JID)]}
|| JID <- JIDs]. || JID <- JIDs].
feature_check_packet(allow, _User, Server, Pres, {From, _To, El}, in) -> feature_check_packet(allow, _User, Server, Pres, {From, _To, El}, in) ->
@ -3846,7 +3846,7 @@ feature_check_packet(allow, _User, Server, Pres, {From, _To, El}, in) ->
case exmpp_xml:get_element(El, 'event') of case exmpp_xml:get_element(El, 'event') of
#xmlel{name = 'event', ns = ?NS_PUBSUB_EVENT} = Event -> #xmlel{name = 'event', ns = ?NS_PUBSUB_EVENT} = Event ->
Items = exmpp_xml:get_element(Event, ?NS_PUBSUB_EVENT, 'items'), Items = exmpp_xml:get_element(Event, ?NS_PUBSUB_EVENT, 'items'),
Feature = exmpp_xml:get_attribute_as_list(Items, "node", ""), Feature = exmpp_xml:get_attribute_as_list(Items, <<"node">>, ""),
case is_feature_supported(Pres, Feature) of case is_feature_supported(Pres, Feature) of
true -> allow; true -> allow;
false -> deny false -> deny
@ -3937,9 +3937,9 @@ notify_owners(true, JID, Host, Node, Owners, State) ->
Message = #xmlel{name = 'message', ns = ?NS_JABBER_CLIENT, Message = #xmlel{name = 'message', ns = ?NS_JABBER_CLIENT,
children = [#xmlel{name = 'pubsub', ns = ?NS_PUBSUB, children = [#xmlel{name = 'pubsub', ns = ?NS_PUBSUB,
children = [#xmlel{name = 'subscription', ns = ?NS_PUBSUB, children = [#xmlel{name = 'subscription', ns = ?NS_PUBSUB,
attrs = [?XMLATTR('node', Node), attrs = [?XMLATTR(<<"node">>, Node),
?XMLATTR('jid', exmpp_jid:prep_to_binary(exmpp_jid:make(JID))), ?XMLATTR(<<"jid">>, exmpp_jid:prep_to_binary(exmpp_jid:make(JID))),
?XMLATTR('subscription', State)]}]}]}, ?XMLATTR(<<"subscription">>, State)]}]}]},
lists:foreach( lists:foreach(
fun(Owner) -> fun(Owner) ->
ejabberd_router:route(exmpp_jid:make(Host), exmpp_jid:make(Owner), Message) ejabberd_router:route(exmpp_jid:make(Host), exmpp_jid:make(Owner), Message)

View File

@ -276,7 +276,7 @@
if (SubJID == LJID) or (SubJID == BJID) -> if (SubJID == LJID) or (SubJID == BJID) ->
@@ -616,7 +422,8 @@ @@ -616,7 +422,8 @@
[#xmlel{name = 'identity', ns = ?NS_DISCO_INFO, [#xmlel{name = 'identity', ns = ?NS_DISCO_INFO,
attrs = [?XMLATTR('category', <<"pubsub">>), ?XMLATTR('type', <<"pep">>)]}]; attrs = [?XMLATTR(<<"category">>, <<"pubsub">>), ?XMLATTR('type', <<"pep">>)]}];
disco_identity(Host, Node, From) -> disco_identity(Host, Node, From) ->
- Action = fun(#pubsub_node{idx = Nidx, type = Type, options = Options, owners = Owners}) -> - Action = fun(#pubsub_node{idx = Nidx, type = Type, options = Options, owners = Owners}) ->
+ Action = fun(#pubsub_node{idx = Nidx, type = Type, options = Options}) -> + Action = fun(#pubsub_node{idx = Nidx, type = Type, options = Options}) ->
@ -360,24 +360,24 @@
@@ -1106,8 +917,9 @@ @@ -1106,8 +917,9 @@
[]; [];
true -> true ->
[#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR('var', ?NS_PUBSUB_s)]} | [#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR(<<"var">>, ?NS_PUBSUB_s)]} |
- lists:map(fun(T) -> - lists:map(fun(T) ->
- #xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR('var', ?NS_PUBSUB_s++"#"++T)]} - #xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR(<<"var">>, ?NS_PUBSUB_s++"#"++T)]}
+ lists:map(fun + lists:map(fun
+ ("rsm") -> #xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR('var', ?NS_RSM_s)]}; + ("rsm") -> #xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR(<<"var">>, ?NS_RSM_s)]};
+ (T) -> #xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR('var', ?NS_PUBSUB_s++"#"++T)]} + (T) -> #xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR(<<"var">>, ?NS_PUBSUB_s++"#"++T)]}
end, features(Type))] end, features(Type))]
end, end,
%% TODO: add meta-data info (spec section 5.4) %% TODO: add meta-data info (spec section 5.4)
@@ -1136,8 +948,9 @@ @@ -1136,8 +948,9 @@
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR('var', ?NS_PUBSUB_s)]}, #xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR(<<"var">>, ?NS_PUBSUB_s)]},
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR('var', ?NS_ADHOC_s)]}, #xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR(<<"var">>, ?NS_ADHOC_s)]},
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR('var', ?NS_VCARD_s)]}] ++ #xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR(<<"var">>, ?NS_VCARD_s)]}] ++
- lists:map(fun(Feature) -> - lists:map(fun(Feature) ->
- #xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR('var', ?NS_PUBSUB_s++"#"++Feature)]} - #xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR(<<"var">>, ?NS_PUBSUB_s++"#"++Feature)]}
+ lists:map(fun + lists:map(fun
+ ("rsm") -> #xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR('var', ?NS_RSM_s)]}; + ("rsm") -> #xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR(<<"var">>, ?NS_RSM_s)]};
+ (Feature) -> #xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR('var', ?NS_PUBSUB_s++"#"++Feature)]} + (Feature) -> #xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [?XMLATTR(<<"var">>, ?NS_PUBSUB_s++"#"++Feature)]}
end, features(Host, Node))}; end, features(Host, Node))};
?NS_ADHOC_b -> ?NS_ADHOC_b ->
command_disco_info(Host, Node, From); command_disco_info(Host, Node, From);
@ -400,7 +400,7 @@
CommandItems = [ CommandItems = [
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', #xmlel{ns = ?NS_DISCO_ITEMS, name = 'item',
@@ -1173,19 +986,20 @@ @@ -1173,19 +986,20 @@
?XMLATTR('name', "Get Pending") ?XMLATTR(<<"name">>, "Get Pending")
]}], ]}],
{result, CommandItems}; {result, CommandItems};
-iq_disco_items(_Host, ?NS_PUBSUB_GET_PENDING, _From) -> -iq_disco_items(_Host, ?NS_PUBSUB_GET_PENDING, _From) ->
@ -427,7 +427,7 @@
fun(#pubsub_node{id = {_, SubNode}, options = SubOptions}) -> fun(#pubsub_node{id = {_, SubNode}, options = SubOptions}) ->
@@ -1203,7 +1017,7 @@ @@ -1203,7 +1017,7 @@
{result, Name} = node_call(Type, get_item_name, [Host, Node, RN]), {result, Name} = node_call(Type, get_item_name, [Host, Node, RN]),
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs = [?XMLATTR('jid', Host), ?XMLATTR('name', Name)]} #xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs = [?XMLATTR(<<"jid">>, Host), ?XMLATTR('name', Name)]}
end, NodeItems), end, NodeItems),
- {result, Nodes ++ Items} - {result, Nodes ++ Items}
+ {result, Nodes ++ Items ++ jlib:rsm_encode(RsmOut)} + {result, Nodes ++ Items ++ jlib:rsm_encode(RsmOut)}
@ -680,8 +680,8 @@
- {result, XdataEl} = pubsub_subscription:get_options_xform(Lang, Options), - {result, XdataEl} = pubsub_subscription:get_options_xform(Lang, Options),
+ {result, XdataEl} = pubsub_subscription_odbc:get_options_xform(Lang, Options), + {result, XdataEl} = pubsub_subscription_odbc:get_options_xform(Lang, Options),
OptionsEl = #xmlel{ns = ?NS_PUBSUB, name = 'options', OptionsEl = #xmlel{ns = ?NS_PUBSUB, name = 'options',
attrs = [ ?XMLATTR('jid', exmpp_jid:to_binary(Subscriber)), attrs = [ ?XMLATTR(<<"jid">>, exmpp_jid:to_binary(Subscriber)),
?XMLATTR('subid', SubId) | nodeAttr(Node)], ?XMLATTR(<<"subid">>, SubId) | nodeAttr(Node)],
@@ -2623,7 +2443,7 @@ @@ -2623,7 +2443,7 @@
end. end.
@ -701,7 +701,7 @@
{error, extended_error('not-acceptable', "invalid-subid")}; {error, extended_error('not-acceptable', "invalid-subid")};
{result, _} -> {result, _} ->
@@ -2827,8 +2647,8 @@ @@ -2827,8 +2647,8 @@
?XMLATTR('subsription', subscription_to_string(Sub)) | nodeAttr(Node)]}]}]}, ?XMLATTR(<<"subsription">>, subscription_to_string(Sub)) | nodeAttr(Node)]}]}]},
ejabberd_router:route(service_jid(Host), JID, Stanza) ejabberd_router:route(service_jid(Host), JID, Stanza)
end, end,
- Action = fun(#pubsub_node{owners = Owners, type = Type, idx = Nidx}) -> - Action = fun(#pubsub_node{owners = Owners, type = Type, idx = Nidx}) ->

View File

@ -170,10 +170,10 @@ get_options_xform(Lang, Options) ->
Keys = [deliver, digest, digest_frequency, expire, include_body, show_values, subscription_type, subscription_depth], Keys = [deliver, digest, digest_frequency, expire, include_body, show_values, subscription_type, subscription_depth],
XFields = [get_option_xfield(Lang, Key, Options) || Key <- Keys], XFields = [get_option_xfield(Lang, Key, Options) || Key <- Keys],
{result, #xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs = [?XMLATTR('type', <<"form">>)], children = {result, #xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs = [?XMLATTR(<<"type">>, <<"form">>)], children =
[#xmlel{ns = ?NS_DATA_FORMS, [#xmlel{ns = ?NS_DATA_FORMS,
name = 'field', name = 'field',
attrs = [?XMLATTR('var', <<"FORM_TYPE">>), ?XMLATTR('type', <<"hidden">>)], attrs = [?XMLATTR(<<"var">>, <<"FORM_TYPE">>), ?XMLATTR(<<"type">>, <<"hidden">>)],
children = [#xmlel{ns = ?NS_DATA_FORMS, children = [#xmlel{ns = ?NS_DATA_FORMS,
name = 'value', name = 'value',
children = [?XMLCDATA(?NS_PUBSUB_SUBSCRIBE_OPTIONS_s)]}]}] ++ XFields}}. children = [?XMLCDATA(?NS_PUBSUB_SUBSCRIBE_OPTIONS_s)]}]}] ++ XFields}}.
@ -349,7 +349,7 @@ get_option_xfield(Lang, Key, Options) ->
end, end,
#xmlel{ns = ?NS_DATA_FORMS, #xmlel{ns = ?NS_DATA_FORMS,
name = 'field', name = 'field',
attrs = [?XMLATTR('var', Var), ?XMLATTR('type', Type), ?XMLATTR('label', translate:translate(Lang, Label))], attrs = [?XMLATTR(<<"var">>, Var), ?XMLATTR(<<"type">>, Type), ?XMLATTR(<<"label">>, translate:translate(Lang, Label))],
children = OptEls ++ Vals}. children = OptEls ++ Vals}.
%% TODO : check input type data %% TODO : check input type data
@ -362,7 +362,7 @@ type_and_options(Type, _Lang) ->
tr_xfield_options({Value, Label}, Lang) -> tr_xfield_options({Value, Label}, Lang) ->
#xmlel{ns = ?NS_DATA_FORMS, #xmlel{ns = ?NS_DATA_FORMS,
name = 'option', name = 'option',
attrs = [?XMLATTR('label', translate:translate(Lang, Label))], attrs = [?XMLATTR(<<"label">>, translate:translate(Lang, Label))],
children = [#xmlel{ns = ?NS_DATA_FORMS, children = [#xmlel{ns = ?NS_DATA_FORMS,
name = 'value', name = 'value',
children = [?XMLCDATA(Value)]}]}. children = [?XMLCDATA(Value)]}]}.

View File

@ -125,7 +125,7 @@ get_options_xform(Lang, Options) ->
{result, #xmlel{ns = ?NS_DATA_FORMS, name = 'x', children = {result, #xmlel{ns = ?NS_DATA_FORMS, name = 'x', children =
[#xmlel{ns = ?NS_DATA_FORMS, [#xmlel{ns = ?NS_DATA_FORMS,
name = 'field', name = 'field',
attrs = [?XMLATTR('var', <<"FORM_TYPE">>), ?XMLATTR('type', <<"hidden">>)], attrs = [?XMLATTR(<<"var">>, <<"FORM_TYPE">>), ?XMLATTR(<<"type">>, <<"hidden">>)],
children = [#xmlel{ns = ?NS_DATA_FORMS, children = [#xmlel{ns = ?NS_DATA_FORMS,
name = 'value', name = 'value',
children = [?XMLCDATA(?NS_PUBSUB_SUBSCRIBE_OPTIONS_s)]}]}] ++ XFields}}. children = [?XMLCDATA(?NS_PUBSUB_SUBSCRIBE_OPTIONS_s)]}]}] ++ XFields}}.
@ -226,7 +226,7 @@ get_option_xfield(Lang, Key, Options) ->
end, end,
#xmlel{ns = ?NS_DATA_FORMS, #xmlel{ns = ?NS_DATA_FORMS,
name = 'field', name = 'field',
attrs = [?XMLATTR('var', Var), ?XMLATTR('type', Type), ?XMLATTR('label', translate:translate(Lang, Label))], attrs = [?XMLATTR(<<"var">>, Var), ?XMLATTR(<<"type">>, Type), ?XMLATTR('label', translate:translate(Lang, Label))],
children = OptEls ++ Vals}. children = OptEls ++ Vals}.
type_and_options({Type, Options}, Lang) -> type_and_options({Type, Options}, Lang) ->
@ -237,7 +237,7 @@ type_and_options(Type, _Lang) ->
tr_xfield_options({Value, Label}, Lang) -> tr_xfield_options({Value, Label}, Lang) ->
#xmlel{ns = ?NS_DATA_FORMS, #xmlel{ns = ?NS_DATA_FORMS,
name = 'option', name = 'option',
attrs = [?XMLATTR('label', translate:translate(Lang, Label))], attrs = [?XMLATTR(<<"label">>, translate:translate(Lang, Label))],
children = [#xmlel{ns = ?NS_DATA_FORMS, children = [#xmlel{ns = ?NS_DATA_FORMS,
name = 'value', name = 'value',
children = [?XMLCDATA(Value)]}]}. children = [?XMLCDATA(Value)]}]}.

View File

@ -221,16 +221,16 @@ process_iq(From, To,
"Choose a username and password " "Choose a username and password "
"to register with this server"))}]}, "to register with this server"))}]},
UField = #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = UField = #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[?XMLATTR('var', <<"username">>), [?XMLATTR(<<"var">>, <<"username">>),
?XMLATTR('type', <<"text-single">>), ?XMLATTR(<<"type">>, <<"text-single">>),
?XMLATTR('label', translate:translate(Lang, "User"))], ?XMLATTR(<<"label">>, translate:translate(Lang, "User"))],
children = children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]}, [#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]},
PField = PField =
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[?XMLATTR('var', <<"password">>), [?XMLATTR(<<"var">>, <<"password">>),
?XMLATTR('type', <<"text-private">>), ?XMLATTR(<<"type">>, <<"text-private">>),
?XMLATTR('label', translate:translate(Lang, "Password"))], ?XMLATTR(<<"label">>, translate:translate(Lang, "Password"))],
children = [ children = [
#xmlel{ns = ?NS_DATA_FORMS, name = 'required'} #xmlel{ns = ?NS_DATA_FORMS, name = 'required'}
] ]

View File

@ -291,7 +291,7 @@ process_iq_get(From, To, IQ_Rec) ->
US = {_, LServer} = {exmpp_jid:prep_node(From), exmpp_jid:prep_domain(From)}, US = {_, LServer} = {exmpp_jid:prep_node(From), exmpp_jid:prep_domain(From)},
try try
{ItemsToSend, VersionToSend} = {ItemsToSend, VersionToSend} =
case {exmpp_xml:get_attribute_as_list(exmpp_iq:get_request(IQ_Rec), ver, not_found), case {exmpp_xml:get_attribute_as_list(exmpp_iq:get_request(IQ_Rec), <<"ver">>, not_found),
roster_versioning_enabled(LServer), roster_versioning_enabled(LServer),
roster_version_on_db(LServer)} of roster_version_on_db(LServer)} of
{not_found, _ , _} -> {not_found, _ , _} ->
@ -332,7 +332,7 @@ process_iq_get(From, To, IQ_Rec) ->
{Items, false} -> {Items, false} ->
exmpp_iq:result(IQ_Rec, exmpp_xml:element(?NS_ROSTER, 'query', [] , Items)); exmpp_iq:result(IQ_Rec, exmpp_xml:element(?NS_ROSTER, 'query', [] , Items));
{Items, Version} -> {Items, Version} ->
exmpp_iq:result(IQ_Rec, exmpp_xml:element(?NS_ROSTER, 'query', [?XMLATTR('ver', Version)], Items)) exmpp_iq:result(IQ_Rec, exmpp_xml:element(?NS_ROSTER, 'query', [?XMLATTR(<<"ver">>, Version)], Items))
end end
catch catch
_:_ -> _:_ ->
@ -408,22 +408,22 @@ convert_to_string(A) when is_list(A) -> A.
item_to_xml(Item) -> item_to_xml(Item) ->
{U, S, R} = Item#roster.jid, {U, S, R} = Item#roster.jid,
Attrs1 = exmpp_xml:set_attribute_in_list([], Attrs1 = exmpp_xml:set_attribute_in_list([],
'jid', exmpp_jid:to_binary(U, S, R)), <<"jid">>, exmpp_jid:to_binary(U, S, R)),
Attrs2 = case Item#roster.name of Attrs2 = case Item#roster.name of
<<>> -> <<>> ->
Attrs1; Attrs1;
Name -> Name ->
exmpp_xml:set_attribute_in_list(Attrs1, 'name', Name) exmpp_xml:set_attribute_in_list(Attrs1, <<"name">>, Name)
end, end,
Attrs3 = exmpp_xml:set_attribute_in_list(Attrs2, Attrs3 = exmpp_xml:set_attribute_in_list(Attrs2,
'subscription', Item#roster.subscription), <<"subscription">>, Item#roster.subscription),
Attrs4 = case ask_to_pending(Item#roster.ask) of Attrs4 = case ask_to_pending(Item#roster.ask) of
out -> out ->
exmpp_xml:set_attribute_in_list(Attrs3, exmpp_xml:set_attribute_in_list(Attrs3,
'ask', <<"subscribe">>); <<"ask">>, <<"subscribe">>);
both -> both ->
exmpp_xml:set_attribute_in_list(Attrs3, exmpp_xml:set_attribute_in_list(Attrs3,
'ask', <<"subscribe">>); <<"ask">>, <<"subscribe">>);
_ -> _ ->
Attrs3 Attrs3
end, end,
@ -466,7 +466,7 @@ try_process_iq_set(From, To, IQ) ->
process_item_set(From, To, #xmlel{} = El) -> process_item_set(From, To, #xmlel{} = El) ->
try try
JID1 = exmpp_jid:parse(exmpp_xml:get_attribute_as_binary(El, 'jid', <<>>)), JID1 = exmpp_jid:parse(exmpp_xml:get_attribute_as_binary(El, <<"jid">>, <<>>)),
User = exmpp_jid:node(From), User = exmpp_jid:node(From),
LUser = exmpp_jid:prep_node(From), LUser = exmpp_jid:prep_node(From),
LServer = exmpp_jid:prep_domain(From), LServer = exmpp_jid:prep_domain(From),
@ -577,9 +577,9 @@ process_item_set(_From, _To, _) ->
process_item_attrs(Item, [#xmlattr{name = Attr, value = Val} | Attrs]) -> process_item_attrs(Item, [#xmlattr{name = Attr, value = Val} | Attrs]) ->
case Attr of case Attr of
'name' -> <<"name">> ->
process_item_attrs(Item#roster{name = Val}, Attrs); process_item_attrs(Item#roster{name = Val}, Attrs);
'subscription' -> <<"subscription">> ->
case Val of case Val of
<<"remove">> -> <<"remove">> ->
process_item_attrs(Item#roster{subscription = remove}, process_item_attrs(Item#roster{subscription = remove},
@ -587,7 +587,7 @@ process_item_attrs(Item, [#xmlattr{name = Attr, value = Val} | Attrs]) ->
_ -> _ ->
process_item_attrs(Item, Attrs) process_item_attrs(Item, Attrs)
end; end;
'ask' -> <<"ask">> ->
process_item_attrs(Item, Attrs); process_item_attrs(Item, Attrs);
_ -> _ ->
process_item_attrs(Item, Attrs) process_item_attrs(Item, Attrs)
@ -631,10 +631,10 @@ push_item(User, Server, From, Item)
ejabberd_sm:route(exmpp_jid:make(), ejabberd_sm:route(exmpp_jid:make(),
exmpp_jid:make(User, Server), exmpp_jid:make(User, Server),
#xmlel{name = 'broadcast', ns = roster_item, attrs = #xmlel{name = 'broadcast', ns = roster_item, attrs =
[exmpp_xml:attribute(u, U), [?XMLATTR(<<"u">>, U),
exmpp_xml:attribute(s, S), ?XMLATTR(<<"s">>, S),
exmpp_xml:attribute(r, R), ?XMLATTR(<<"r">>, R),
exmpp_xml:attribute(subs, Item#roster.subscription)]}), ?XMLATTR(<<"subs">>, Item#roster.subscription)]}),
case roster_versioning_enabled(Server) of case roster_versioning_enabled(Server) of
true -> true ->
@ -673,7 +673,7 @@ push_item_version(Server, User, From, Item, RosterVersion) ->
end, ejabberd_sm:get_user_resources(User, Server)). end, ejabberd_sm:get_user_resources(User, Server)).
push_item_version(User, Server, Resource, From, Item, RosterVersion) -> push_item_version(User, Server, Resource, From, Item, RosterVersion) ->
Request = #xmlel{ns = ?NS_ROSTER, name = 'query', attrs = [?XMLATTR('ver', RosterVersion)], Request = #xmlel{ns = ?NS_ROSTER, name = 'query', attrs = [?XMLATTR(<<"ver">>, RosterVersion)],
children = [mod_roster:item_to_xml(Item)]}, children = [mod_roster:item_to_xml(Item)]},
ResIQ = exmpp_iq:set(?NS_JABBER_CLIENT, Request, ResIQ = exmpp_iq:set(?NS_JABBER_CLIENT, Request,
"push" ++ randoms:get_string()), "push" ++ randoms:get_string()),
@ -1053,7 +1053,7 @@ set_items(User, Server, #xmlel{children = Els})
process_item_set_t(LUser, LServer, #xmlel{} = El) -> process_item_set_t(LUser, LServer, #xmlel{} = El) ->
try try
JID1 = exmpp_jid:parse(exmpp_xml:get_attribute_as_list(El, 'jid', <<>>)), JID1 = exmpp_jid:parse(exmpp_xml:get_attribute_as_list(El, <<"jid">>, <<>>)),
JID = jlib:short_jid(JID1), JID = jlib:short_jid(JID1),
LJID = jlib:short_prepd_jid(JID1), LJID = jlib:short_prepd_jid(JID1),
Item = #roster{usj = {LUser, LServer, LJID}, Item = #roster{usj = {LUser, LServer, LJID},
@ -1097,9 +1097,9 @@ process_item_set_t(_LUser, _LServer, _) ->
process_item_attrs_ws(Item, [#xmlattr{name = Attr, value = Val} | Attrs]) -> process_item_attrs_ws(Item, [#xmlattr{name = Attr, value = Val} | Attrs]) ->
case Attr of case Attr of
'name' -> <<"name">> ->
process_item_attrs_ws(Item#roster{name = Val}, Attrs); process_item_attrs_ws(Item#roster{name = Val}, Attrs);
'subscription' -> <<"subscription">> ->
case Val of case Val of
<<"remove">> -> <<"remove">> ->
process_item_attrs_ws(Item#roster{subscription = remove}, process_item_attrs_ws(Item#roster{subscription = remove},
@ -1119,7 +1119,7 @@ process_item_attrs_ws(Item, [#xmlattr{name = Attr, value = Val} | Attrs]) ->
_ -> _ ->
process_item_attrs_ws(Item, Attrs) process_item_attrs_ws(Item, Attrs)
end; end;
'ask' -> <<"ask">> ->
process_item_attrs_ws(Item, Attrs); process_item_attrs_ws(Item, Attrs);
_ -> _ ->
process_item_attrs_ws(Item, Attrs) process_item_attrs_ws(Item, Attrs)
@ -1363,16 +1363,16 @@ user_roster(User, Server, Query, Lang) ->
TDJID = build_contact_jid_td(R#roster.jid), TDJID = build_contact_jid_td(R#roster.jid),
?XE("tr", ?XE("tr",
[TDJID, [TDJID,
?XAC("td", [?XMLATTR('class', <<"valign">>)], ?XAC("td", [?XMLATTR(<<"class">>, <<"valign">>)],
R#roster.name), R#roster.name),
?XAC("td", [?XMLATTR('class', <<"valign">>)], ?XAC("td", [?XMLATTR(<<"class">>, <<"valign">>)],
atom_to_list(R#roster.subscription)), atom_to_list(R#roster.subscription)),
?XAC("td", [?XMLATTR('class', <<"valign">>)], ?XAC("td", [?XMLATTR(<<"class">>, <<"valign">>)],
atom_to_list(Pending)), atom_to_list(Pending)),
?XAE("td", [?XMLATTR('class', <<"valign">>)], Groups), ?XAE("td", [?XMLATTR(<<"class">>, <<"valign">>)], Groups),
if if
Pending == in -> Pending == in ->
?XAE("td", [?XMLATTR('class', <<"valign">>)], ?XAE("td", [?XMLATTR(<<"class">>, <<"valign">>)],
[?INPUTT("submit", [?INPUTT("submit",
"validate" ++ "validate" ++
ejabberd_web_admin:term_to_id(R#roster.jid), ejabberd_web_admin:term_to_id(R#roster.jid),
@ -1380,7 +1380,7 @@ user_roster(User, Server, Query, Lang) ->
true -> true ->
?X("td") ?X("td")
end, end,
?XAE("td", [?XMLATTR('class', <<"valign">>)], ?XAE("td", [?XMLATTR(<<"class">>, <<"valign">>)],
[?INPUTT("submit", [?INPUTT("submit",
"remove" ++ "remove" ++
ejabberd_web_admin:term_to_id(R#roster.jid), ejabberd_web_admin:term_to_id(R#roster.jid),
@ -1393,7 +1393,7 @@ user_roster(User, Server, Query, Lang) ->
error -> [?XREST("Bad format")]; error -> [?XREST("Bad format")];
nothing -> [] nothing -> []
end ++ end ++
[?XAE("form", [?XMLATTR('action', <<"">>), ?XMLATTR('method', <<"post">>)], [?XAE("form", [?XMLATTR(<<"action">>, <<"">>), ?XMLATTR(<<"method">>, <<"post">>)],
FItems ++ FItems ++
[?P, [?P,
?INPUT("text", "newjid", ""), ?C(" "), ?INPUT("text", "newjid", ""), ?C(" "),
@ -1403,7 +1403,7 @@ user_roster(User, Server, Query, Lang) ->
_ -> _ ->
[?XC("h1", ?T("Roster of ") ++ us_to_list({User, Server}))] ++ [?XC("h1", ?T("Roster of ") ++ us_to_list({User, Server}))] ++
[?CT("Bad format"), ?P] ++ [?CT("Bad format"), ?P] ++
[?XAE("form", [?XMLATTR('action', <<"">>), ?XMLATTR('method', <<"post">>)], [?XAE("form", [?XMLATTR(<<"action">>, <<"">>), ?XMLATTR(<<"method">>, <<"post">>)],
[?P, [?P,
?INPUT("text", "newjid", ""), ?C(" "), ?INPUT("text", "newjid", ""), ?C(" "),
?INPUTT("submit", "addjid", "Add Jabber ID") ?INPUTT("submit", "addjid", "Add Jabber ID")
@ -1429,9 +1429,9 @@ build_contact_jid_td({U, S, R}) ->
end, end,
case JIDURI of case JIDURI of
[] -> [] ->
?XAC('td', [?XMLATTR('class', <<"valign">>)], exmpp_jid:to_list(ContactJID)); ?XAC('td', [?XMLATTR(<<"class">>, <<"valign">>)], exmpp_jid:to_list(ContactJID));
URI when is_list(URI) -> URI when is_list(URI) ->
?XAE('td', [?XMLATTR('class', <<"valign">>)], [?AC(JIDURI, exmpp_jid:to_list(ContactJID))]) ?XAE('td', [?XMLATTR(<<"class">>, <<"valign">>)], [?AC(JIDURI, exmpp_jid:to_list(ContactJID))])
end. end.
%% @spec (User, Server, Items, Query) -> ok | nothing | error %% @spec (User, Server, Items, Query) -> ok | nothing | error
@ -1509,9 +1509,9 @@ user_roster_item_parse_query(User, Server, Items, Query) ->
{U, S, R} = JID, {U, S, R} = JID,
UJID = exmpp_jid:make(User, Server), UJID = exmpp_jid:make(User, Server),
Attrs1 = exmpp_xml:set_attribute_in_list([], Attrs1 = exmpp_xml:set_attribute_in_list([],
'jid', exmpp_jid:to_list(U, S, R)), <<"jid">>, exmpp_jid:to_list(U, S, R)),
Attrs2 = exmpp_xml:set_attribute_in_list(Attrs1, Attrs2 = exmpp_xml:set_attribute_in_list(Attrs1,
'subscription', "remove"), <<"subscription">>, "remove"),
Item = #xmlel{ns = ?NS_ROSTER, name = 'item', Item = #xmlel{ns = ?NS_ROSTER, name = 'item',
attrs = Attrs2}, attrs = Attrs2},
Request = #xmlel{ Request = #xmlel{

View File

@ -178,7 +178,7 @@ process_iq_get(From, To, IQ_Rec) ->
US = {LUser, LServer} = {exmpp_jid:prep_node(From), exmpp_jid:prep_domain(From)}, US = {LUser, LServer} = {exmpp_jid:prep_node(From), exmpp_jid:prep_domain(From)},
try try
{ItemsToSend, VersionToSend} = {ItemsToSend, VersionToSend} =
case {exmpp_xml:get_attribute_as_list(exmpp_iq:get_request(IQ_Rec), ver, not_found), case {exmpp_xml:get_attribute_as_list(exmpp_iq:get_request(IQ_Rec), <<"ver">>, not_found),
roster_versioning_enabled(LServer), roster_versioning_enabled(LServer),
roster_version_on_db(LServer)} of roster_version_on_db(LServer)} of
{not_found, _ , _} -> {not_found, _ , _} ->
@ -222,7 +222,7 @@ process_iq_get(From, To, IQ_Rec) ->
{Items, false} -> {Items, false} ->
exmpp_iq:result(IQ_Rec, exmpp_xml:element(?NS_ROSTER, 'query', [] , Items)); exmpp_iq:result(IQ_Rec, exmpp_xml:element(?NS_ROSTER, 'query', [] , Items));
{Items, Version} -> {Items, Version} ->
exmpp_iq:result(IQ_Rec, exmpp_xml:element(?NS_ROSTER, 'query', [?XMLATTR('ver', Version)], Items)) exmpp_iq:result(IQ_Rec, exmpp_xml:element(?NS_ROSTER, 'query', [?XMLATTR(<<"ver">>, Version)], Items))
end end
catch catch
_:_ -> _:_ ->
@ -278,22 +278,22 @@ get_roster(LUser, LServer) when is_binary(LUser), is_binary(LServer)->
item_to_xml(Item) -> item_to_xml(Item) ->
{U, S, R} = Item#roster.jid, {U, S, R} = Item#roster.jid,
Attrs1 = exmpp_xml:set_attribute_in_list([], Attrs1 = exmpp_xml:set_attribute_in_list([],
'jid', exmpp_jid:to_binary(U, S, R)), <<"jid">>, exmpp_jid:to_binary(U, S, R)),
Attrs2 = case Item#roster.name of Attrs2 = case Item#roster.name of
<<>> -> <<>> ->
Attrs1; Attrs1;
Name -> Name ->
exmpp_xml:set_attribute_in_list(Attrs1, 'name', Name) exmpp_xml:set_attribute_in_list(Attrs1, <<"name">>, Name)
end, end,
Attrs3 = exmpp_xml:set_attribute_in_list(Attrs2, Attrs3 = exmpp_xml:set_attribute_in_list(Attrs2,
'subscription', Item#roster.subscription), <<"subscription">>, Item#roster.subscription),
Attrs = case ask_to_pending(Item#roster.ask) of Attrs = case ask_to_pending(Item#roster.ask) of
out -> out ->
exmpp_xml:set_attribute_in_list(Attrs3, exmpp_xml:set_attribute_in_list(Attrs3,
'ask', <<"subscribe">>); <<"ask">>, <<"subscribe">>);
both -> both ->
exmpp_xml:set_attribute_in_list(Attrs3, exmpp_xml:set_attribute_in_list(Attrs3,
'ask', <<"subscribe">>); <<"ask">>, <<"subscribe">>);
_ -> _ ->
Attrs3 Attrs3
end, end,
@ -315,7 +315,7 @@ process_iq_set(From, To, #iq{payload = Request} = IQ_Rec) ->
process_item_set(From, To, #xmlel{} = El) -> process_item_set(From, To, #xmlel{} = El) ->
try try
JID1 = exmpp_jid:parse(exmpp_xml:get_attribute_as_binary(El, 'jid', <<>>)), JID1 = exmpp_jid:parse(exmpp_xml:get_attribute_as_binary(El, <<"jid">>, <<>>)),
User = exmpp_jid:prep_node(From), User = exmpp_jid:prep_node(From),
Server = exmpp_jid:prep_domain(From), Server = exmpp_jid:prep_domain(From),
LServer = binary_to_list(Server), LServer = binary_to_list(Server),
@ -416,9 +416,9 @@ process_item_set(_From, _To, _) ->
process_item_attrs(Item, [#xmlattr{name = Attr, value = Val} | Attrs]) -> process_item_attrs(Item, [#xmlattr{name = Attr, value = Val} | Attrs]) ->
case Attr of case Attr of
'name' -> <<"name">> ->
process_item_attrs(Item#roster{name = Val}, Attrs); process_item_attrs(Item#roster{name = Val}, Attrs);
'subscription' -> <<"subscription">> ->
case Val of case Val of
<<"remove">> -> <<"remove">> ->
process_item_attrs(Item#roster{subscription = remove}, process_item_attrs(Item#roster{subscription = remove},
@ -426,7 +426,7 @@ process_item_attrs(Item, [#xmlattr{name = Attr, value = Val} | Attrs]) ->
_ -> _ ->
process_item_attrs(Item, Attrs) process_item_attrs(Item, Attrs)
end; end;
'ask' -> <<"ask">> ->
process_item_attrs(Item, Attrs); process_item_attrs(Item, Attrs);
_ -> _ ->
process_item_attrs(Item, Attrs) process_item_attrs(Item, Attrs)
@ -454,10 +454,10 @@ push_item(User, Server, From, Item) when is_binary(User), is_binary(Server) ->
ejabberd_sm:route(exmpp_jid:make(), ejabberd_sm:route(exmpp_jid:make(),
exmpp_jid:make(User, Server), exmpp_jid:make(User, Server),
#xmlel{name = 'broadcast', ns = roster_item, attrs = #xmlel{name = 'broadcast', ns = roster_item, attrs =
[exmpp_xml:attribute(u, U), [?XMLATTR(<<"u">>, U),
exmpp_xml:attribute(s, S), ?XMLATTR(<<"s">>, S),
exmpp_xml:attribute(r, R), ?XMLATTR(<<"r">>, R),
exmpp_xml:attribute(subs, Item#roster.subscription)]}), ?XMLATTR(<<"subs">>, Item#roster.subscription)]}),
case roster_versioning_enabled(Server) of case roster_versioning_enabled(Server) of
true -> true ->
push_item_version(Server, User, From, Item, roster_version(Server, User)); push_item_version(Server, User, From, Item, roster_version(Server, User));
@ -487,7 +487,7 @@ push_item_version(Server, User, From, Item, RosterVersion) ->
end, ejabberd_sm:get_user_resources(User, Server)). end, ejabberd_sm:get_user_resources(User, Server)).
push_item_version(User, Server, Resource, From, Item, RosterVersion) -> push_item_version(User, Server, Resource, From, Item, RosterVersion) ->
Request = #xmlel{ns = ?NS_ROSTER, name = 'query', attrs = [?XMLATTR('ver', RosterVersion)], Request = #xmlel{ns = ?NS_ROSTER, name = 'query', attrs = [?XMLATTR(<<"ver">>, RosterVersion)],
children = [mod_roster:item_to_xml(Item)]}, children = [mod_roster:item_to_xml(Item)]},
ResIQ = exmpp_iq:set(?NS_JABBER_CLIENT, Request, ResIQ = exmpp_iq:set(?NS_JABBER_CLIENT, Request,
"push" ++ randoms:get_string()), "push" ++ randoms:get_string()),
@ -827,7 +827,7 @@ set_items(User, Server, #xmlel{children = Els}) when is_binary(User), is_binary(
process_item_set_t(LUser, LServer, #xmlel{} = El) -> process_item_set_t(LUser, LServer, #xmlel{} = El) ->
try try
JID1 = exmpp_jid:parse(exmpp_xml:get_attribute_as_binary(El, 'jid', <<>>)), JID1 = exmpp_jid:parse(exmpp_xml:get_attribute_as_binary(El, <<"jid">>, <<>>)),
{U0, S0, R0} = LJID = jlib:short_prepd_jid(JID1), {U0, S0, R0} = LJID = jlib:short_prepd_jid(JID1),
Username = ejabberd_odbc:escape(LUser), Username = ejabberd_odbc:escape(LUser),
SJID = ejabberd_odbc:escape(exmpp_jid:to_binary(U0, S0, R0)), SJID = ejabberd_odbc:escape(exmpp_jid:to_binary(U0, S0, R0)),
@ -853,9 +853,9 @@ process_item_set_t(_LUser, _LServer, _) ->
process_item_attrs_ws(Item, [#xmlattr{name = Attr, value = Val} | Attrs]) -> process_item_attrs_ws(Item, [#xmlattr{name = Attr, value = Val} | Attrs]) ->
case Attr of case Attr of
'name' -> <<"name">> ->
process_item_attrs_ws(Item#roster{name = Val}, Attrs); process_item_attrs_ws(Item#roster{name = Val}, Attrs);
'subscription' -> <<"subscription">> ->
case Val of case Val of
<<"remove">> -> <<"remove">> ->
process_item_attrs_ws(Item#roster{subscription = remove}, process_item_attrs_ws(Item#roster{subscription = remove},
@ -1103,16 +1103,16 @@ user_roster(User, Server, Query, Lang) ->
TDJID = build_contact_jid_td(R#roster.jid), TDJID = build_contact_jid_td(R#roster.jid),
?XE("tr", ?XE("tr",
[TDJID, [TDJID,
?XAC("td", [?XMLATTR('class', <<"valign">>)], ?XAC("td", [?XMLATTR(<<"class">>, <<"valign">>)],
binary_to_list(R#roster.name)), binary_to_list(R#roster.name)),
?XAC("td", [?XMLATTR('class', <<"valign">>)], ?XAC("td", [?XMLATTR(<<"class">>, <<"valign">>)],
atom_to_list(R#roster.subscription)), atom_to_list(R#roster.subscription)),
?XAC("td", [?XMLATTR('class', <<"valign">>)], ?XAC("td", [?XMLATTR(<<"class">>, <<"valign">>)],
atom_to_list(Pending)), atom_to_list(Pending)),
?XAE("td", [?XMLATTR('class', <<"valign">>)], Groups), ?XAE("td", [?XMLATTR(<<"class">>, <<"valign">>)], Groups),
if if
Pending == in -> Pending == in ->
?XAE("td", [?XMLATTR('class', <<"valign">>)], ?XAE("td", [?XMLATTR(<<"class">>, <<"valign">>)],
[?INPUTT("submit", [?INPUTT("submit",
"validate" ++ "validate" ++
ejabberd_web_admin:term_to_id(R#roster.jid), ejabberd_web_admin:term_to_id(R#roster.jid),
@ -1120,7 +1120,7 @@ user_roster(User, Server, Query, Lang) ->
true -> true ->
?X("td") ?X("td")
end, end,
?XAE("td", [?XMLATTR('class', <<"valign">>)], ?XAE("td", [?XMLATTR(<<"class">>, <<"valign">>)],
[?INPUTT("submit", [?INPUTT("submit",
"remove" ++ "remove" ++
ejabberd_web_admin:term_to_id(R#roster.jid), ejabberd_web_admin:term_to_id(R#roster.jid),
@ -1133,7 +1133,7 @@ user_roster(User, Server, Query, Lang) ->
error -> [?XREST("Bad format")]; error -> [?XREST("Bad format")];
nothing -> [] nothing -> []
end ++ end ++
[?XAE("form", [?XMLATTR('action', <<"">>), ?XMLATTR('method', <<"post">>)], [?XAE("form", [?XMLATTR(<<"action">>, <<"">>), ?XMLATTR(<<"method">>, <<"post">>)],
FItems ++ FItems ++
[?P, [?P,
?INPUT("text", "newjid", ""), ?C(" "), ?INPUT("text", "newjid", ""), ?C(" "),
@ -1143,7 +1143,7 @@ user_roster(User, Server, Query, Lang) ->
_ -> _ ->
[?XC("h1", ?T("Roster of ") ++ us_to_list({User, Server}))] ++ [?XC("h1", ?T("Roster of ") ++ us_to_list({User, Server}))] ++
[?CT("Bad format"), ?P] ++ [?CT("Bad format"), ?P] ++
[?XAE("form", [?XMLATTR('action', <<"">>), ?XMLATTR('method', <<"post">>)], [?XAE("form", [?XMLATTR(<<"action">>, <<"">>), ?XMLATTR(<<"method">>, <<"post">>)],
[?P, [?P,
?INPUT("text", "newjid", ""), ?C(" "), ?INPUT("text", "newjid", ""), ?C(" "),
?INPUTT("submit", "addjid", "Add Jabber ID") ?INPUTT("submit", "addjid", "Add Jabber ID")
@ -1165,9 +1165,9 @@ build_contact_jid_td({U, S, R}) ->
end, end,
case JIDURI of case JIDURI of
[] -> [] ->
?XAC('td', [?XMLATTR('class', <<"valign">>)], exmpp_jid:to_list(ContactJID)); ?XAC('td', [?XMLATTR(<<"class">>, <<"valign">>)], exmpp_jid:to_list(ContactJID));
URI when is_list(URI) -> URI when is_list(URI) ->
?XAE('td', [?XMLATTR('class', <<"valign">>)], [?AC(JIDURI, exmpp_jid:to_list(ContactJID))]) ?XAE('td', [?XMLATTR(<<"class">>, <<"valign">>)], [?AC(JIDURI, exmpp_jid:to_list(ContactJID))])
end. end.
user_roster_parse_query(User, Server, Items, Query) -> user_roster_parse_query(User, Server, Items, Query) ->
@ -1228,9 +1228,9 @@ user_roster_item_parse_query(User, Server, Items, Query) ->
{value, _} -> {value, _} ->
UJID = exmpp_jid:make(User, Server), UJID = exmpp_jid:make(User, Server),
Attrs1 = exmpp_xml:set_attribute_in_list([], Attrs1 = exmpp_xml:set_attribute_in_list([],
'jid', exmpp_jid:to_list(JID)), <<"jid">>, exmpp_jid:to_list(JID)),
Attrs2 = exmpp_xml:set_attribute_in_list(Attrs1, Attrs2 = exmpp_xml:set_attribute_in_list(Attrs1,
'subscription', "remove"), <<"subscription">>, "remove"),
Item = #xmlel{ns = ?NS_ROSTER, name = 'item', Item = #xmlel{ns = ?NS_ROSTER, name = 'item',
attrs = Attrs2}, attrs = Attrs2},
Request = #xmlel{ Request = #xmlel{

View File

@ -740,10 +740,10 @@ push_item(User, Server, From, Item) ->
{U, S, R} = Item#roster.jid, {U, S, R} = Item#roster.jid,
ejabberd_sm:route(From, exmpp_jid:make(User, Server), ejabberd_sm:route(From, exmpp_jid:make(User, Server),
#xmlel{name = 'broadcast', ns = roster_item, attrs = #xmlel{name = 'broadcast', ns = roster_item, attrs =
[exmpp_xml:attribute(u, U), [?XMLATTR(<<"u">>, U),
exmpp_xml:attribute(s, S), ?XMLATTR(<<"s">>, S),
exmpp_xml:attribute(r, R), ?XMLATTR(<<"r">>, R),
exmpp_xml:attribute(subs, Item#roster.subscription)]}), ?XMLATTR(<<"subs">>, Item#roster.subscription)]}),
Request = #xmlel{ns = ?NS_ROSTER, name = 'query', Request = #xmlel{ns = ?NS_ROSTER, name = 'query',
children = [mod_roster:item_to_xml(Item)]}, children = [mod_roster:item_to_xml(Item)]},
Stanza = exmpp_iq:set(?NS_JABBER_CLIENT, Request, Stanza = exmpp_iq:set(?NS_JABBER_CLIENT, Request,
@ -817,7 +817,7 @@ list_shared_roster_groups(Host, Query, Lang) ->
error -> [?XREST("Bad format")]; error -> [?XREST("Bad format")];
nothing -> [] nothing -> []
end ++ end ++
[?XAE("form", [?XMLATTR('action', <<"">>), ?XMLATTR('method', <<"post">>)], [?XAE("form", [?XMLATTR(<<"action">>, <<"">>), ?XMLATTR(<<"method">>, <<"post">>)],
[FGroups, [FGroups,
?BR, ?BR,
?INPUTT("submit", "delete", "Delete Selected") ?INPUTT("submit", "delete", "Delete Selected")
@ -879,7 +879,7 @@ shared_roster_group(Host, Group, Query, Lang) ->
FDisplayedGroups = [[DG, $\n] || DG <- DisplayedGroups], FDisplayedGroups = [[DG, $\n] || DG <- DisplayedGroups],
DescNL = length(re:split(Description, "\n", [{return, list}])), DescNL = length(re:split(Description, "\n", [{return, list}])),
FGroup = FGroup =
?XAE("table", [?XMLATTR('class', <<"withtextareas">>)], ?XAE("table", [?XMLATTR(<<"class">>, <<"withtextareas">>)],
[?XE("tbody", [?XE("tbody",
[?XE("tr", [?XE("tr",
[?XCT("td", "Group ID:"), [?XCT("td", "Group ID:"),
@ -923,7 +923,7 @@ shared_roster_group(Host, Group, Query, Lang) ->
error -> [?XREST("Bad format")]; error -> [?XREST("Bad format")];
nothing -> [] nothing -> []
end ++ end ++
[?XAE("form", [?XMLATTR('action', <<"">>), ?XMLATTR('method', <<"post">>)], [?XAE("form", [?XMLATTR(<<"action">>, <<"">>), ?XMLATTR(<<"method">>, <<"post">>)],
[FGroup, [FGroup,
?BR, ?BR,
?INPUTT("submit", "submit", "Submit") ?INPUTT("submit", "submit", "Submit")

View File

@ -46,7 +46,7 @@ stop(Host) ->
process_local_iq(_From, To, #iq{type = get, process_local_iq(_From, To, #iq{type = get,
ns = XMLNS, payload = SubEl} = IQ_Rec) -> ns = XMLNS, payload = SubEl} = IQ_Rec) ->
Node = string:tokens(exmpp_xml:get_attribute_as_list(SubEl, 'node', ""), "/"), Node = string:tokens(exmpp_xml:get_attribute_as_list(SubEl, <<"node">>, ""), "/"),
Names = get_names(exmpp_xml:get_child_elements(SubEl), []), Names = get_names(exmpp_xml:get_child_elements(SubEl), []),
case get_local_stats(exmpp_jid:domain(To), Node, Names) of case get_local_stats(exmpp_jid:domain(To), Node, Names) of
@ -63,7 +63,7 @@ process_local_iq(_From, _To, #iq{type = set} = IQ_Rec) ->
get_names([], Res) -> get_names([], Res) ->
Res; Res;
get_names([#xmlel{name = "stat", attrs = Attrs} | Els], Res) -> get_names([#xmlel{name = "stat", attrs = Attrs} | Els], Res) ->
Name = exmpp_xml:get_attribute_from_list_as_binary(Attrs, 'name', <<>>), Name = exmpp_xml:get_attribute_from_list_as_binary(Attrs, <<"name">>, <<>>),
case Name of case Name of
<<>> -> <<>> ->
get_names(Els, Res); get_names(Els, Res);
@ -74,7 +74,7 @@ get_names([_ | Els], Res) ->
get_names(Els, Res). get_names(Els, Res).
-define(STAT(Name), #xmlel{ns = ?NS_STATS_s, name = 'stat', attrs = [?XMLATTR('name', Name)]}). -define(STAT(Name), #xmlel{ns = ?NS_STATS_s, name = 'stat', attrs = [?XMLATTR(<<"name">>, Name)]}).
get_local_stats(_Server, [], []) -> get_local_stats(_Server, [], []) ->
{result, {result,
@ -116,16 +116,16 @@ get_local_stats(_Server, _, _) ->
-define(STATVAL(Val, Unit), -define(STATVAL(Val, Unit),
#xmlel{ns = ?NS_STATS_s, name = 'stat', attrs = #xmlel{ns = ?NS_STATS_s, name = 'stat', attrs =
[?XMLATTR('name', Name), [?XMLATTR(<<"name">>, Name),
?XMLATTR('units', Unit), ?XMLATTR(<<"units">>, Unit),
?XMLATTR('value', Val) ?XMLATTR(<<"value">>, Val)
]}). ]}).
-define(STATERR(Code, Desc), -define(STATERR(Code, Desc),
#xmlel{ns = ?NS_STATS_s, name = 'stat', attrs= #xmlel{ns = ?NS_STATS_s, name = 'stat', attrs=
[?XMLATTR('name', Name)], children = [?XMLATTR(<<"name">>, Name)], children =
[#xmlel{ns = ?NS_STATS_s, name = 'error', attrs = [#xmlel{ns = ?NS_STATS_s, name = 'error', attrs =
[?XMLATTR('code', Code)], children = [?XMLATTR(<<"code">>, Code)], children =
[#xmlcdata{cdata = Desc}]}]}). [#xmlcdata{cdata = Desc}]}]}).

View File

@ -339,16 +339,16 @@ set_vcard(User, LServer, LServerB, VCARD) ->
-define(TLFIELD(Type, Label, Var), -define(TLFIELD(Type, Label, Var),
#xmlel{ns = ?NS_VCARD, name = 'field', attrs = [ #xmlel{ns = ?NS_VCARD, name = 'field', attrs = [
?XMLATTR('type', Type), ?XMLATTR(<<"type">>, Type),
?XMLATTR('label', translate:translate(Lang, Label)), ?XMLATTR(<<"label">>, translate:translate(Lang, Label)),
?XMLATTR('var', Var)]}). ?XMLATTR(<<"var">>, Var)]}).
-define(FORM(JID), -define(FORM(JID),
[#xmlel{ns = ?NS_SEARCH, name = 'instructions', children = [#xmlel{ns = ?NS_SEARCH, name = 'instructions', children =
[#xmlcdata{cdata = list_to_binary(translate:translate(Lang, "You need an x:data capable client to search"))}]}, [#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 = #xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs =
[?XMLATTR('type', <<"form">>)], children = [?XMLATTR(<<"type">>, <<"form">>)], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
[#xmlcdata{cdata = list_to_binary(translate:translate(Lang, "Search users in ") ++ exmpp_jid:to_list(JID))}]}, [#xmlcdata{cdata = list_to_binary(translate:translate(Lang, "Search users in ") ++ exmpp_jid:to_list(JID))}]},
#xmlel{ns = ?NS_SEARCH, name = 'instructions', children = #xmlel{ns = ?NS_SEARCH, name = 'instructions', children =
@ -410,7 +410,7 @@ do_route(ServerHost, From, To, Packet) ->
children = children =
[#xmlel{ns = ?NS_DATA_FORMS, [#xmlel{ns = ?NS_DATA_FORMS,
name = 'x', name = 'x',
attrs = [?XMLATTR('type', attrs = [?XMLATTR(<<"type">>,
<<"result">>)], <<"result">>)],
children = search_result(Lang, children = search_result(Lang,
To, ServerHost, XData)}]}, To, ServerHost, XData)}]},
@ -439,19 +439,19 @@ do_route(ServerHost, From, To, Packet) ->
children = Info ++ [ children = Info ++ [
#xmlel{ns = ?NS_DISCO_INFO, name = 'identity', #xmlel{ns = ?NS_DISCO_INFO, name = 'identity',
attrs = [ attrs = [
?XMLATTR('category', <<"directory">>), ?XMLATTR(<<"category">>, <<"directory">>),
?XMLATTR('type', <<"user">>), ?XMLATTR(<<"type">>, <<"user">>),
?XMLATTR('name', translate:translate(Lang, ?XMLATTR(<<"name">>, translate:translate(Lang,
"vCard User Search"))]}, "vCard User Search"))]},
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', #xmlel{ns = ?NS_DISCO_INFO, name = 'feature',
attrs = [ attrs = [
?XMLATTR('var', ?NS_DISCO_INFO_s)]}, ?XMLATTR(<<"var">>, ?NS_DISCO_INFO_s)]},
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', #xmlel{ns = ?NS_DISCO_INFO, name = 'feature',
attrs = [ attrs = [
?XMLATTR('var', ?NS_SEARCH_s)]}, ?XMLATTR(<<"var">>, ?NS_SEARCH_s)]},
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', #xmlel{ns = ?NS_DISCO_INFO, name = 'feature',
attrs = [ attrs = [
?XMLATTR('var', ?NS_VCARD_s)]} ?XMLATTR(<<"var">>, ?NS_VCARD_s)]}
]}, ]},
ResIQ = exmpp_iq:result(Packet, Result), ResIQ = exmpp_iq:result(Packet, Result),
ejabberd_router:route(To, ejabberd_router:route(To,
@ -528,7 +528,7 @@ search_result(Lang, JID, ServerHost, Data) ->
-define(FIELD(Var, Val), -define(FIELD(Var, Val),
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[?XMLATTR('var', Var)], children = [?XMLATTR(<<"var">>, Var)], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children =
[#xmlcdata{cdata = Val}]}]}). [#xmlcdata{cdata = Val}]}]}).
@ -862,9 +862,9 @@ user_vcard(User, Server, Query, Lang) ->
{error, M} -> [?XREST(M)]; {error, M} -> [?XREST(M)];
nothing -> [] nothing -> []
end ++ end ++
[?XAE('form', [?XMLATTR('action', <<"">>), ?XMLATTR('method', <<"post">>)], [?XAE('form', [?XMLATTR(<<"action">>, <<"">>), ?XMLATTR(<<"method">>, <<"post">>)],
[?XCT('h3', "vCard Photo:"), [?XCT('h3', "vCard Photo:"),
?XAE('img', [?XMLATTR('src', <<"photo">>), ?XMLATTR('border', <<"1px">>)], []), ?XAE('img', [?XMLATTR(<<"src">>, <<"photo">>), ?XMLATTR(<<"border">>, <<"1px">>)], []),
?XC('h3', ?T("vCard")++":"), ?XC('h3', ?T("vCard")++":"),
?XE('pre', [?C(VcardString)]), ?XE('pre', [?C(VcardString)]),
?INPUTT("submit", "removevcard", "Remove vCard") ?INPUTT("submit", "removevcard", "Remove vCard")

View File

@ -387,15 +387,15 @@ ldap_attribute_to_vcard(_, _) ->
-define(TLFIELD(Type, Label, Var), -define(TLFIELD(Type, Label, Var),
#xmlel{ns = ?NS_VCARD, name = 'field', attrs = [ #xmlel{ns = ?NS_VCARD, name = 'field', attrs = [
?XMLATTR('type', Type), ?XMLATTR(<<"type">>, Type),
?XMLATTR('label', translate:translate(Lang, Label)), ?XMLATTR(<<"label">>, translate:translate(Lang, Label)),
?XMLATTR('var', Var)]}). ?XMLATTR(<<"var">>, Var)]}).
-define(FORM(JID, SearchFields), -define(FORM(JID, SearchFields),
[#xmlel{ns = ?NS_SEARCH, name = 'instructions', children = [#xmlel{ns = ?NS_SEARCH, name = 'instructions', children =
[#xmlcdata{cdata = list_to_binary(translate:translate(Lang, "You need an x:data capable client to search"))}]}, [#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 = #xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs =
[?XMLATTR('type', <<"form">>)], children = [?XMLATTR(<<"type">>, <<"form">>)], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
[#xmlcdata{cdata = list_to_binary(translate:translate(Lang, "Search users in ") ++ [#xmlcdata{cdata = list_to_binary(translate:translate(Lang, "Search users in ") ++
exmpp_jid:to_list(JID))}]}, exmpp_jid:to_list(JID))}]},
@ -442,7 +442,7 @@ route(State, From, To, Packet) ->
children = children =
[#xmlel{ns = ?NS_DATA_FORMS, [#xmlel{ns = ?NS_DATA_FORMS,
name = 'x', name = 'x',
attrs = [?XMLATTR('type', attrs = [?XMLATTR(<<"type">>,
<<"result">>)], <<"result">>)],
children = search_result(Lang, To, State, XData)}]}, children = search_result(Lang, To, State, XData)}]},
ResIQ = exmpp_iq:result(Packet, ResIQ = exmpp_iq:result(Packet,
@ -471,16 +471,16 @@ route(State, From, To, Packet) ->
children = Info ++ [ children = Info ++ [
#xmlel{ns = ?NS_DISCO_INFO, name = 'identity', #xmlel{ns = ?NS_DISCO_INFO, name = 'identity',
attrs = [ attrs = [
?XMLATTR('category', <<"directory">>), ?XMLATTR(<<"category">>, <<"directory">>),
?XMLATTR('type', <<"user">>), ?XMLATTR(<<"type">>, <<"user">>),
?XMLATTR('name', translate:translate(Lang, ?XMLATTR(<<"name">>, translate:translate(Lang,
"vCard User Search"))]}, "vCard User Search"))]},
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', #xmlel{ns = ?NS_DISCO_INFO, name = 'feature',
attrs = [ attrs = [
?XMLATTR('var', ?NS_SEARCH_s)]}, ?XMLATTR(<<"var">>, ?NS_SEARCH_s)]},
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', #xmlel{ns = ?NS_DISCO_INFO, name = 'feature',
attrs = [ attrs = [
?XMLATTR('var', ?NS_VCARD_s)]} ?XMLATTR(<<"var">>, ?NS_VCARD_s)]}
]}, ]},
ResIQ = exmpp_iq:result(Packet, Result), ResIQ = exmpp_iq:result(Packet, Result),
ejabberd_router:route(To, ejabberd_router:route(To,
@ -545,7 +545,7 @@ search_result(Lang, JID, State, Data) ->
-define(FIELD(Var, Val), -define(FIELD(Var, Val),
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[?XMLATTR('var', Var)], children = [?XMLATTR(<<"var">>, Var)], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children =
[#xmlcdata{cdata = Val}]}]}). [#xmlcdata{cdata = Val}]}]}).

View File

@ -138,7 +138,7 @@ process_sm_iq(_From, To, #iq{type = get} = IQ_Rec) ->
{selected, ["vcard"], [{SVCARD}]} -> {selected, ["vcard"], [{SVCARD}]} ->
try exmpp_xml:parse_document(SVCARD, try exmpp_xml:parse_document(SVCARD,
[names_as_atom, {check_elems, xmpp}, [names_as_atom, {check_elems, xmpp},
{check_nss,xmpp}, {check_attrs,xmpp}]) of {check_nss,xmpp} ]) of
[VCARD] -> [VCARD] ->
exmpp_iq:result(IQ_Rec, VCARD) exmpp_iq:result(IQ_Rec, VCARD)
catch catch
@ -253,16 +253,16 @@ set_vcard(User, LServer, VCARD) ->
-define(TLFIELD(Type, Label, Var), -define(TLFIELD(Type, Label, Var),
#xmlel{ns = ?NS_VCARD, name = 'field', attrs = [ #xmlel{ns = ?NS_VCARD, name = 'field', attrs = [
?XMLATTR('type', Type), ?XMLATTR(<<"type">>, Type),
?XMLATTR('label', translate:translate(Lang, Label)), ?XMLATTR(<<"label">>, translate:translate(Lang, Label)),
?XMLATTR('var', Var)]}). ?XMLATTR(<<"var">>, Var)]}).
-define(FORM(JID), -define(FORM(JID),
[#xmlel{ns = ?NS_SEARCH, name = 'instructions', children = [#xmlel{ns = ?NS_SEARCH, name = 'instructions', children =
[#xmlcdata{cdata = list_to_binary(translate:translate(Lang, "You need an x:data capable client to search"))}]}, [#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 = #xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs =
[?XMLATTR('type', <<"form">>)], children = [?XMLATTR(<<"type">>, <<"form">>)], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
[#xmlcdata{cdata = list_to_binary(translate:translate(Lang, "Search users in ") ++ exmpp_jid:to_list(JID))}]}, [#xmlcdata{cdata = list_to_binary(translate:translate(Lang, "Search users in ") ++ exmpp_jid:to_list(JID))}]},
#xmlel{ns = ?NS_SEARCH, name = 'instructions', children = #xmlel{ns = ?NS_SEARCH, name = 'instructions', children =
@ -321,7 +321,7 @@ do_route(ServerHost, From, To, Packet) ->
#xmlel{ns = ?NS_DATA_FORMS, #xmlel{ns = ?NS_DATA_FORMS,
name = 'x', name = 'x',
attrs = [ attrs = [
?XMLATTR('type', ?XMLATTR(<<"type">>,
<<"result">>)], <<"result">>)],
children = search_result(Lang, children = search_result(Lang,
To, ServerHost, XData)}]}, To, ServerHost, XData)}]},
@ -349,16 +349,16 @@ do_route(ServerHost, From, To, Packet) ->
children = Info ++ [ children = Info ++ [
#xmlel{ns = ?NS_DISCO_INFO, name = 'identity', #xmlel{ns = ?NS_DISCO_INFO, name = 'identity',
attrs = [ attrs = [
?XMLATTR('category', <<"directory">>), ?XMLATTR(<<"category">>, <<"directory">>),
?XMLATTR('type', <<"user">>), ?XMLATTR(<<"type">>, <<"user">>),
?XMLATTR('name', translate:translate(Lang, ?XMLATTR(<<"name">>, translate:translate(Lang,
"vCard User Search"))]}, "vCard User Search"))]},
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', #xmlel{ns = ?NS_DISCO_INFO, name = 'feature',
attrs = [ attrs = [
?XMLATTR('var', ?NS_SEARCH_s)]}, ?XMLATTR(<<"var">>, ?NS_SEARCH_s)]},
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', #xmlel{ns = ?NS_DISCO_INFO, name = 'feature',
attrs = [ attrs = [
?XMLATTR('var', ?NS_VCARD_s)]} ?XMLATTR(<<"var">>, ?NS_VCARD_s)]}
]}, ]},
ResIQ = exmpp_iq:result(Packet, Result), ResIQ = exmpp_iq:result(Packet, Result),
ejabberd_router:route(To, ejabberd_router:route(To,
@ -436,7 +436,7 @@ search_result(Lang, JID, ServerHost, Data) ->
-define(FIELD(Var, Val), -define(FIELD(Var, Val),
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = #xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
[?XMLATTR('var', Var)], children = [?XMLATTR(<<"var">>, Var)], children =
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children =
[#xmlcdata{cdata = Val}]}]}). [#xmlcdata{cdata = Val}]}]}).

View File

@ -51,7 +51,7 @@ stop(Host) ->
update_presence(Packet, User, Host) -> update_presence(Packet, User, Host) ->
case exmpp_presence:is_presence(Packet) andalso case exmpp_presence:is_presence(Packet) andalso
exmpp_xml:get_attribute_as_binary(Packet, type, undefined) exmpp_xml:get_attribute_as_binary(Packet, <<"type">>, undefined)
== undefined of == undefined of
true -> true ->
presence_with_xupdate(Packet, User, Host); presence_with_xupdate(Packet, User, Host);

View File

@ -207,7 +207,7 @@ process_request(Data, IP) ->
case catch parse_request(Data, PayloadSize, MaxStanzaSize) of case catch parse_request(Data, PayloadSize, MaxStanzaSize) of
%% No existing session: %% No existing session:
{ok, {"", Rid, Attrs, Payload}} -> {ok, {"", Rid, Attrs, Payload}} ->
case exmpp_xml:get_attribute_from_list_as_list(Attrs, "to", "") of case exmpp_xml:get_attribute_from_list_as_list(Attrs, <<"to">>, "") of
"" -> "" ->
?DEBUG("Session not created (Improper addressing)", []), ?DEBUG("Session not created (Improper addressing)", []),
{200, ?HEADER, "<body type='terminate' " {200, ?HEADER, "<body type='terminate' "
@ -231,13 +231,13 @@ process_request(Data, IP) ->
%% Existing session %% Existing session
{ok, {Sid, Rid, Attrs, Payload1}} -> {ok, {Sid, Rid, Attrs, Payload1}} ->
StreamStart = StreamStart =
case exmpp_xml:get_attribute_from_list_as_list(Attrs, ?NS_BOSH, restart, "") of case exmpp_xml:get_attribute_from_list_as_list(Attrs, ?NS_BOSH, <<"restart">>, "") of
"true" -> "true" ->
true; true;
_ -> _ ->
false false
end, end,
Payload2 = case exmpp_xml:get_attribute_from_list_as_list(Attrs, "type", "") of Payload2 = case exmpp_xml:get_attribute_from_list_as_list(Attrs, <<"type">>, "") of
"terminate" -> "terminate" ->
%% close stream %% close stream
Payload1 ++ [{xmlstreamend, "stream:stream"}]; Payload1 ++ [{xmlstreamend, "stream:stream"}];
@ -264,7 +264,7 @@ process_request(Data, IP) ->
handle_session_start(Pid, XmppDomain, Sid, Rid, Attrs, handle_session_start(Pid, XmppDomain, Sid, Rid, Attrs,
Payload, PayloadSize, IP) -> Payload, PayloadSize, IP) ->
?DEBUG("got pid: ~p", [Pid]), ?DEBUG("got pid: ~p", [Pid]),
Wait = case string:to_integer(exmpp_xml:get_attribute_from_list_as_list(Attrs, "wait", "")) of Wait = case string:to_integer(exmpp_xml:get_attribute_from_list_as_list(Attrs, <<"wait">>, "")) of
{error, _} -> {error, _} ->
?MAX_WAIT; ?MAX_WAIT;
{CWait, _} -> {CWait, _} ->
@ -275,7 +275,7 @@ handle_session_start(Pid, XmppDomain, Sid, Rid, Attrs,
CWait CWait
end end
end, end,
Hold = case string:to_integer(exmpp_xml:get_attribute_from_list_as_list(Attrs, "hold", "")) of Hold = case string:to_integer(exmpp_xml:get_attribute_from_list_as_list(Attrs, <<"hold">>, "")) of
{error, _} -> {error, _} ->
(?MAX_REQUESTS - 1); (?MAX_REQUESTS - 1);
{CHold, _} -> {CHold, _} ->
@ -286,7 +286,7 @@ handle_session_start(Pid, XmppDomain, Sid, Rid, Attrs,
CHold CHold
end end
end, end,
Pdelay = case string:to_integer(exmpp_xml:get_attribute_from_list_as_list(Attrs, "process-delay", "")) of Pdelay = case string:to_integer(exmpp_xml:get_attribute_from_list_as_list(Attrs, <<"process-delay">>, "")) of
{error, _} -> {error, _} ->
?PROCESS_DELAY_DEFAULT; ?PROCESS_DELAY_DEFAULT;
{CPdelay, _} when {CPdelay, _} when
@ -298,11 +298,11 @@ handle_session_start(Pid, XmppDomain, Sid, Rid, Attrs,
end, end,
Version = Version =
case catch list_to_float( case catch list_to_float(
exmpp_xml:get_attribute_from_list_as_list(Attrs, "ver", "")) of exmpp_xml:get_attribute_from_list_as_list(Attrs, <<"ver">>, "")) of
{'EXIT', _} -> 0.0; {'EXIT', _} -> 0.0;
V -> V V -> V
end, end,
XmppVersion = exmpp_xml:get_attribute_from_list_as_list(Attrs, ?NS_BOSH, version, ""), XmppVersion = exmpp_xml:get_attribute_from_list_as_list(Attrs, ?NS_BOSH, <<"version">>, ""),
?DEBUG("Create session: ~p", [Sid]), ?DEBUG("Create session: ~p", [Sid]),
mnesia:async_dirty( mnesia:async_dirty(
fun() -> fun() ->
@ -638,8 +638,8 @@ process_http_put(#http_put{rid = Rid, attrs = Attrs, payload = Payload,
StateName, StateData, RidAllow) -> StateName, StateData, RidAllow) ->
?DEBUG("Actually processing request: ~p", [Request]), ?DEBUG("Actually processing request: ~p", [Request]),
%% Check if key valid %% Check if key valid
Key = exmpp_xml:get_attribute_from_list_as_list(Attrs, "key", ""), Key = exmpp_xml:get_attribute_from_list_as_list(Attrs, <<"key">>, ""),
NewKey = exmpp_xml:get_attribute_from_list_as_list(Attrs, "newkey", ""), NewKey = exmpp_xml:get_attribute_from_list_as_list(Attrs, <<"newkey">>, ""),
KeyAllow = KeyAllow =
case RidAllow of case RidAllow of
repeat -> repeat ->
@ -746,7 +746,7 @@ process_http_put(#http_put{rid = Rid, attrs = Attrs, payload = Payload,
{To, ""} -> {To, ""} ->
DecNs = [{?NS_XMPP, "stream"}, DecNs = [{?NS_XMPP, "stream"},
{?NS_JABBER_CLIENT, none}], {?NS_JABBER_CLIENT, none}],
StreamAttrs = [#xmlattr{name = 'to', value = list_to_binary(To)}], StreamAttrs = [#xmlattr{name = <<"to">>, value = list_to_binary(To)}],
StreamEl = #xmlel{name = stream, ns = ?NS_XMPP, declared_ns = DecNs, StreamEl = #xmlel{name = stream, ns = ?NS_XMPP, declared_ns = DecNs,
attrs = StreamAttrs}, attrs = StreamAttrs},
gen_fsm:send_event( gen_fsm:send_event(
@ -755,8 +755,8 @@ process_http_put(#http_put{rid = Rid, attrs = Attrs, payload = Payload,
{To, Version} -> {To, Version} ->
DecNs = [{?NS_XMPP, "stream"}, DecNs = [{?NS_XMPP, "stream"},
{?NS_JABBER_CLIENT, none}], {?NS_JABBER_CLIENT, none}],
StreamAttrs = [#xmlattr{name = 'to', value = list_to_binary(To)}, StreamAttrs = [?XMLATTR(<<"to">>, list_to_binary(To)),
#xmlattr{name = 'version', value = list_to_binary(Version)}], ?XMLATTR(<<"version">>, list_to_binary(Version))],
StreamEl = #xmlel{name = stream, ns = ?NS_XMPP, declared_ns = DecNs, StreamEl = #xmlel{name = stream, ns = ?NS_XMPP, declared_ns = DecNs,
attrs = StreamAttrs}, attrs = StreamAttrs},
gen_fsm:send_event( gen_fsm:send_event(
@ -869,11 +869,11 @@ handle_http_put_error(Reason, #http_bind{pid=FsmRef, version=Version})
#xmlel{name = 'body', #xmlel{name = 'body',
ns = ?NS_HTTP_BIND_s, ns = ?NS_HTTP_BIND_s,
attrs = [ attrs = [
#xmlattr{name = 'type', #xmlattr{name = <<"type">>,
ns = ?NS_HTTP_BIND_s, ns = ?NS_HTTP_BIND_s,
value = <<"terminate">> value = <<"terminate">>
}, },
#xmlattr{name = 'type', #xmlattr{name = <<"type">>,
ns = ?NS_HTTP_BIND_s, ns = ?NS_HTTP_BIND_s,
value = <<"item-not-found">> value = <<"item-not-found">>
} }
@ -885,11 +885,11 @@ handle_http_put_error(Reason, #http_bind{pid=FsmRef, version=Version})
#xmlel{name = 'body', #xmlel{name = 'body',
ns = ?NS_HTTP_BIND_s, ns = ?NS_HTTP_BIND_s,
attrs = [ attrs = [
#xmlattr{name = 'type', #xmlattr{name = <<"type">>,
ns = ?NS_HTTP_BIND_s, ns = ?NS_HTTP_BIND_s,
value = <<"terminate">> value = <<"terminate">>
}, },
#xmlattr{name = 'type', #xmlattr{name = <<"type">>,
ns = ?NS_HTTP_BIND_s, ns = ?NS_HTTP_BIND_s,
value = <<"item-not-found">> value = <<"item-not-found">>
} }
@ -901,11 +901,11 @@ handle_http_put_error(Reason, #http_bind{pid=FsmRef, version=Version})
#xmlel{name = 'body', #xmlel{name = 'body',
ns = ?NS_HTTP_BIND_s, ns = ?NS_HTTP_BIND_s,
attrs = [ attrs = [
#xmlattr{name = 'type', #xmlattr{name = <<"type">>,
ns = ?NS_HTTP_BIND_s, ns = ?NS_HTTP_BIND_s,
value = <<"terminate">> value = <<"terminate">>
}, },
#xmlattr{name = 'type', #xmlattr{name = <<"type">>,
ns = ?NS_HTTP_BIND_s, ns = ?NS_HTTP_BIND_s,
value = <<"policy-violation">> value = <<"policy-violation">>
} }
@ -936,7 +936,7 @@ rid_allow(OldRid, NewRid, Attrs, Hold, MaxPause) ->
%% We did not miss any packet, we can process it immediately: %% We did not miss any packet, we can process it immediately:
NewRid == OldRid + 1 -> NewRid == OldRid + 1 ->
case catch list_to_integer( case catch list_to_integer(
exmpp_xml:get_attribute_from_list_as_list(Attrs, "pause", "")) of exmpp_xml:get_attribute_from_list_as_list(Attrs, <<"pause">>, "")) of
{'EXIT', _} -> {'EXIT', _} ->
{true, 0}; {true, 0};
Pause1 when Pause1 =< MaxPause -> Pause1 when Pause1 =< MaxPause ->
@ -1004,9 +1004,9 @@ prepare_outpacket_response(#http_bind{id=Sid, wait=Wait,
Rid, OutPacket, true) -> Rid, OutPacket, true) ->
case OutPacket of case OutPacket of
[{xmlstreamstart, _, OutAttrs} | Els] -> [{xmlstreamstart, _, OutAttrs} | Els] ->
AuthID = exmpp_xml:get_attribute_from_list_as_list(OutAttrs, "id", ""), AuthID = exmpp_xml:get_attribute_from_list_as_list(OutAttrs, <<"id">>, ""),
FromB = exmpp_xml:get_attribute_from_list_as_binary(OutAttrs, "from", ""), FromB = exmpp_xml:get_attribute_from_list_as_binary(OutAttrs, <<"from">>, <<>>),
Version = exmpp_xml:get_attribute_from_list_as_list(OutAttrs, "version", ""), Version = exmpp_xml:get_attribute_from_list_as_list(OutAttrs, <<"version">>, ""),
OutEls = OutEls =
case Els of case Els of
[] -> [] ->
@ -1045,9 +1045,9 @@ prepare_outpacket_response(#http_bind{id=Sid, wait=Wait,
"xmlns='"++?NS_HTTP_BIND_s++"'/>"}; "xmlns='"++?NS_HTTP_BIND_s++"'/>"};
_ -> _ ->
BOSH_attribs = BOSH_attribs =
[#xmlattr{name = 'authid', value = list_to_binary(AuthID)}, [#xmlattr{name = <<"authid">>, value = list_to_binary(AuthID)},
#xmlattr{name = 'xmlns:stream', value = ?NS_XMPP_b}] ++ #xmlattr{name = <<"xmlns:stream">>, value = ?NS_XMPP_b}] ++
[#xmlattr{name = 'version', ns = ?NS_BOSH_s, value = list_to_binary(Version)}], [#xmlattr{name = <<"version">>, ns = ?NS_BOSH_s, value = list_to_binary(Version)}],
MaxInactivity = get_max_inactivity(To, ?MAX_INACTIVITY), MaxInactivity = get_max_inactivity(To, ?MAX_INACTIVITY),
MaxPause = get_max_pause(To), MaxPause = get_max_pause(To),
{200, ?HEADER, {200, ?HEADER,
@ -1056,31 +1056,31 @@ prepare_outpacket_response(#http_bind{id=Sid, wait=Wait,
ns = ?NS_HTTP_BIND_s, ns = ?NS_HTTP_BIND_s,
declared_ns = [{?NS_XBOSH_s, ?NS_XBOSH_pfx}], declared_ns = [{?NS_XBOSH_s, ?NS_XBOSH_pfx}],
attrs = [ attrs = [
#xmlattr{name = 'sid', #xmlattr{name = <<"sid">>,
value = list_to_binary(Sid) value = list_to_binary(Sid)
}, },
#xmlattr{name = 'wait', #xmlattr{name = <<"wait">>,
value = list_to_binary(integer_to_list(Wait)) value = list_to_binary(integer_to_list(Wait))
}, },
#xmlattr{name = 'requests', #xmlattr{name = <<"requests">>,
value = list_to_binary(integer_to_list(Hold+1)) value = list_to_binary(integer_to_list(Hold+1))
}, },
#xmlattr{name = 'inactivity', #xmlattr{name = <<"inactivity">>,
value = list_to_binary(integer_to_list(trunc(MaxInactivity/1000))) value = list_to_binary(integer_to_list(trunc(MaxInactivity/1000)))
}, },
#xmlattr{name = 'maxpause', #xmlattr{name = <<"maxpause">>,
value = list_to_binary(integer_to_list(MaxPause)) value = list_to_binary(integer_to_list(MaxPause))
}, },
#xmlattr{name = 'polling', #xmlattr{name = <<"polling">>,
value = list_to_binary(integer_to_list(trunc(?MIN_POLLING/1000000))) value = list_to_binary(integer_to_list(trunc(?MIN_POLLING/1000000)))
}, },
#xmlattr{name = 'ver', #xmlattr{name = <<"ver">>,
value = ?BOSH_VERSION_b value = ?BOSH_VERSION_b
}, },
#xmlattr{name = 'from', #xmlattr{name = <<"from">>,
value = FromB value = FromB
}, },
#xmlattr{name = 'secure', #xmlattr{name = <<"secure">>,
value = <<"true">> value = <<"true">>
} }
] ++ BOSH_attribs, ] ++ BOSH_attribs,
@ -1252,7 +1252,7 @@ parse_request(Data, PayloadSize, MaxStanzaSize) ->
{error, bad_request}; {error, bad_request};
true -> true ->
%case catch list_to_integer(xml:get_attr_s("rid", Attrs)) of %case catch list_to_integer(xml:get_attr_s("rid", Attrs)) of
case catch list_to_integer(exmpp_xml:get_attribute_as_list(Xml, "rid", "")) of case catch list_to_integer(exmpp_xml:get_attribute_as_list(Xml, <<"rid">>, "")) of
{'EXIT', _} -> {'EXIT', _} ->
{error, bad_request}; {error, bad_request};
@ -1269,7 +1269,7 @@ parse_request(Data, PayloadSize, MaxStanzaSize) ->
false false
end end
end, Els), end, Els),
Sid = exmpp_xml:get_attribute_as_list(Xml, "sid", ""), Sid = exmpp_xml:get_attribute_as_list(Xml, <<"sid">>, ""),
if if
PayloadSize =< MaxStanzaSize -> PayloadSize =< MaxStanzaSize ->
{ok, {Sid, Rid, Attrs, FixedEls}}; {ok, {Sid, Rid, Attrs, FixedEls}};

View File

@ -173,7 +173,7 @@ get_human_html_xmlel() ->
Par1 = #xmlel{name = p, children = Par1 = #xmlel{name = p, children =
[#xmlcdata{cdata = <<"An implementation of ">>}, [#xmlcdata{cdata = <<"An implementation of ">>},
#xmlel{name = a, #xmlel{name = a,
attrs = [#xmlattr{name=href, value = <<"http://xmpp.org/extensions/xep-0025.html">>}], attrs = [#xmlattr{name = <<"href">>, value = <<"http://xmpp.org/extensions/xep-0025.html">>}],
children = [#xmlcdata{cdata = <<"Jabber HTTP Polling (XEP-0025)">>}] children = [#xmlcdata{cdata = <<"Jabber HTTP Polling (XEP-0025)">>}]
} }
]}, ]},
@ -182,7 +182,7 @@ get_human_html_xmlel() ->
"To use HTTP-Poll you need a Jabber/XMPP client that supports it.">>} "To use HTTP-Poll you need a Jabber/XMPP client that supports it.">>}
]}, ]},
#xmlel{name = html, #xmlel{name = html,
attrs = [#xmlattr{name = xmlns, value= <<"http://www.w3.org/1999/xhtml">>}], attrs = [#xmlattr{name = <<"xmlns">>, value= <<"http://www.w3.org/1999/xhtml">>}],
children = children =
[#xmlel{name = head, children = [#xmlel{name = title, children = [#xmlcdata{cdata = Heading}]}]}, [#xmlel{name = head, children = [#xmlel{name = title, children = [#xmlcdata{cdata = Heading}]}]},
#xmlel{name = body, children = [H, Par1, Par2]}]}. #xmlel{name = body, children = [H, Par1, Par2]}]}.

View File

@ -48,12 +48,12 @@ make_xhtml(Els) ->
make_xhtml(HeadEls, Els) -> make_xhtml(HeadEls, Els) ->
#xmlel{ns = ?NS_XHTML, name = 'html', attrs = [ #xmlel{ns = ?NS_XHTML, name = 'html', attrs = [
exmpp_xml:attribute(?NS_XML, 'lang', <<"en">>), exmpp_xml:attribute(?NS_XML, <<"lang">>, <<"en">>),
?XMLATTR('lang', <<"en">>)], children = [ ?XMLATTR(<<"lang">>, <<"en">>)], children = [
#xmlel{ns = ?NS_XHTML, name = 'head', children = [ #xmlel{ns = ?NS_XHTML, name = 'head', children = [
#xmlel{ns = ?NS_XHTML, name = 'meta', attrs = [ #xmlel{ns = ?NS_XHTML, name = 'meta', attrs = [
?XMLATTR('http-equiv', <<"Content-Type">>), ?XMLATTR(<<"http-equiv">>, <<"Content-Type">>),
?XMLATTR('content', <<"text/html; charset=utf-8">>) ?XMLATTR(<<"content">>, <<"text/html; charset=utf-8">>)
]} ]}
| HeadEls | HeadEls
]}, ]},
@ -71,14 +71,14 @@ make_xhtml(HeadEls, Els) ->
-define(XAC(Name, Attrs, Text), ?XAE(Name, Attrs, [?C(Text)])). -define(XAC(Name, Attrs, Text), ?XAE(Name, Attrs, [?C(Text)])).
-define(LI(Els), ?XE('li', Els)). -define(LI(Els), ?XE('li', Els)).
-define(A(URL, Els), ?XAE('a', [?XMLATTR('href', URL)], Els)). -define(A(URL, Els), ?XAE('a', [?XMLATTR(<<"href">>, URL)], Els)).
-define(AC(URL, Text), ?A(URL, [?C(Text)])). -define(AC(URL, Text), ?A(URL, [?C(Text)])).
-define(P, ?X('p')). -define(P, ?X('p')).
-define(BR, ?X('br')). -define(BR, ?X('br')).
-define(INPUT(Type, Name, Value), -define(INPUT(Type, Name, Value),
?XA('input', [?XMLATTR('type', Type), ?XA('input', [?XMLATTR(<<"type">>, Type),
?XMLATTR('name', Name), ?XMLATTR(<<"name">>, Name),
?XMLATTR('value', Value)])). ?XMLATTR(<<"value">>, Value)])).
error(not_found) -> error(not_found) ->
{404, [], make_xhtml([?XC('h1', "404 Not Found")])}; {404, [], make_xhtml([?XC('h1', "404 Not Found")])};

View File

@ -43,9 +43,9 @@
-define(INPUTATTRS(Type, Name, Value, Attrs), -define(INPUTATTRS(Type, Name, Value, Attrs),
?XA("input", Attrs ++ ?XA("input", Attrs ++
[?XMLATTR('type', Type), [?XMLATTR(<<"type">>, Type),
?XMLATTR('name', Name), ?XMLATTR(<<"name">>, Name),
?XMLATTR('value', Value)])). ?XMLATTR(<<"value">>, Value)])).
%%%================================== %%%==================================
%%%% get_acl_access %%%% get_acl_access
@ -274,50 +274,50 @@ make_xhtml(Els, Host, Node, Lang, JID) ->
MenuItems = make_navigation(Host, Node, Lang, JID), MenuItems = make_navigation(Host, Node, Lang, JID),
{200, [html], {200, [html],
#xmlel{ns = ?NS_XHTML, name = 'html', attrs = [ #xmlel{ns = ?NS_XHTML, name = 'html', attrs = [
exmpp_xml:attribute(?NS_XML, 'lang', Lang), exmpp_xml:attribute(?NS_XML, <<"lang">>, Lang),
?XMLATTR('lang', Lang)], children = ?XMLATTR(<<"lang">>, Lang)], children =
[#xmlel{ns = ?NS_XHTML, name = 'head', children = [#xmlel{ns = ?NS_XHTML, name = 'head', children =
[?XCT('title', "ejabberd Web Admin"), [?XCT('title', "ejabberd Web Admin"),
#xmlel{ns = ?NS_XHTML, name = 'meta', attrs = [ #xmlel{ns = ?NS_XHTML, name = 'meta', attrs = [
?XMLATTR('http-equiv', <<"Content-Type">>), ?XMLATTR(<<"http-equiv">>, <<"Content-Type">>),
?XMLATTR('content', <<"text/html; charset=utf-8">>)]}, ?XMLATTR(<<"content">>, <<"text/html; charset=utf-8">>)]},
#xmlel{ns = ?NS_XHTML, name = 'script', #xmlel{ns = ?NS_XHTML, name = 'script',
%% This children is to ensure exmpp puts: <script ...></script> %% This children is to ensure exmpp puts: <script ...></script>
children = [?C(".")], children = [?C(".")],
attrs = [ attrs = [
?XMLATTR('src', Base ++ "additions.js"), ?XMLATTR(<<"src">>, Base ++ "additions.js"),
?XMLATTR('type', <<"text/javascript">>)]}, ?XMLATTR(<<"type">>, <<"text/javascript">>)]},
#xmlel{ns = ?NS_XHTML, name = 'link', attrs = [ #xmlel{ns = ?NS_XHTML, name = 'link', attrs = [
?XMLATTR('href', Base ++ "favicon.ico"), ?XMLATTR(<<"href">>, Base ++ "favicon.ico"),
?XMLATTR('type', <<"image/x-icon">>), ?XMLATTR(<<"type">>, <<"image/x-icon">>),
?XMLATTR('rel', <<"shortcut icon">>)]}, ?XMLATTR(<<"rel">>, <<"shortcut icon">>)]},
#xmlel{ns = ?NS_XHTML, name = 'link', attrs = [ #xmlel{ns = ?NS_XHTML, name = 'link', attrs = [
?XMLATTR('href', Base ++ "style.css"), ?XMLATTR(<<"href">>, Base ++ "style.css"),
?XMLATTR('type', <<"text/css">>), ?XMLATTR(<<"type">>, <<"text/css">>),
?XMLATTR('rel', <<"stylesheet">>)]}]}, ?XMLATTR(<<"rel">>, <<"stylesheet">>)]}]},
?XE('body', ?XE('body',
[?XAE('div', [?XAE('div',
[?XMLATTR('id', <<"container">>)], [?XMLATTR(<<"id">>, <<"container">>)],
[?XAE('div', [?XAE('div',
[?XMLATTR('id', <<"header">>)], [?XMLATTR(<<"id">>, <<"header">>)],
[?XE('h1', [?XE('h1',
[?ACT("/admin/", "ejabberd Web Admin")] [?ACT("/admin/", "ejabberd Web Admin")]
)]), )]),
?XAE('div', ?XAE('div',
[?XMLATTR('id', <<"navigation">>)], [?XMLATTR(<<"id">>, <<"navigation">>)],
[?XE('ul', [?XE('ul',
MenuItems MenuItems
)]), )]),
?XAE('div', ?XAE('div',
[?XMLATTR('id', <<"content">>)], [?XMLATTR(<<"id">>, <<"content">>)],
Els), Els),
?XAE('div', ?XAE('div',
[?XMLATTR('id', <<"clearcopyright">>)], [?XMLATTR(<<"id">>, <<"clearcopyright">>)],
[#xmlcdata{cdata = <<>>}])]), [#xmlcdata{cdata = <<>>}])]),
?XAE('div', ?XAE('div',
[?XMLATTR('id', <<"copyrightouter">>)], [?XMLATTR(<<"id">>, <<"copyrightouter">>)],
[?XAE('div', [?XAE('div',
[?XMLATTR('id', <<"copyright">>)], [?XMLATTR(<<"id">>, <<"copyright">>)],
[?XC('p', [?XC('p',
"ejabberd (c) 2002-2010 ProcessOne") "ejabberd (c) 2002-2010 ProcessOne")
])])]) ])])])
@ -837,7 +837,7 @@ process_admin(Host,
error -> [?XREST("Bad format")]; error -> [?XREST("Bad format")];
nothing -> [] nothing -> []
end ++ end ++
[?XAE('form', [?XMLATTR('action', <<>>), ?XMLATTR('method', <<"post">>)], [?XAE('form', [?XMLATTR(<<"action">>, <<>>), ?XMLATTR(<<"method">>, <<"post">>)],
[?TEXTAREA("acls", integer_to_list(lists:max([16, NumLines])), "80", ACLsP++"."), [?TEXTAREA("acls", integer_to_list(lists:max([16, NumLines])), "80", ACLsP++"."),
?BR, ?BR,
?INPUTT("submit", "submit", "Submit") ?INPUTT("submit", "submit", "Submit")
@ -879,7 +879,7 @@ process_admin(Host,
nothing -> [] nothing -> []
end ++ end ++
[?XE('p', [?ACT("../acls-raw/", "Raw")])] ++ [?XE('p', [?ACT("../acls-raw/", "Raw")])] ++
[?XAE('form', [?XMLATTR('action', <<>>), ?XMLATTR('method', <<"post">>)], [?XAE('form', [?XMLATTR(<<"action">>, <<>>), ?XMLATTR(<<"method">>, <<"post">>)],
[acls_to_xhtml(ACLs), [acls_to_xhtml(ACLs),
?BR, ?BR,
?INPUTT("submit", "delete", "Delete Selected"), ?INPUTT("submit", "delete", "Delete Selected"),
@ -946,7 +946,7 @@ process_admin(Host,
error -> [?XREST("Bad format")]; error -> [?XREST("Bad format")];
nothing -> [] nothing -> []
end ++ end ++
[?XAE('form', [?XMLATTR('action', <<>>), ?XMLATTR('method', <<"post">>)], [?XAE('form', [?XMLATTR(<<"action">>, <<>>), ?XMLATTR(<<"method">>, <<"post">>)],
[?TEXTAREA("access", integer_to_list(lists:max([16, NumLines])), "80", AccessP++"."), [?TEXTAREA("access", integer_to_list(lists:max([16, NumLines])), "80", AccessP++"."),
?BR, ?BR,
?INPUTT("submit", "submit", "Submit") ?INPUTT("submit", "submit", "Submit")
@ -983,7 +983,7 @@ process_admin(Host,
nothing -> [] nothing -> []
end ++ end ++
[?XE('p', [?ACT("../access-raw/", "Raw")])] ++ [?XE('p', [?ACT("../access-raw/", "Raw")])] ++
[?XAE('form', [?XMLATTR('action', <<>>), ?XMLATTR('method', <<"post">>)], [?XAE('form', [?XMLATTR(<<"action">>, <<>>), ?XMLATTR(<<"method">>, <<"post">>)],
[access_rules_to_xhtml(AccessRules, Lang), [access_rules_to_xhtml(AccessRules, Lang),
?BR, ?BR,
?INPUTT("submit", "delete", "Delete Selected") ?INPUTT("submit", "delete", "Delete Selected")
@ -1023,7 +1023,7 @@ process_admin(Host,
error -> [?XREST("Bad format")]; error -> [?XREST("Bad format")];
nothing -> [] nothing -> []
end ++ end ++
[?XAE('form', [?XMLATTR('action', <<>>), ?XMLATTR('method', <<"post">>)], [?XAE('form', [?XMLATTR(<<"action">>, <<>>), ?XMLATTR(<<"method">>, <<"post">>)],
[access_rule_to_xhtml(Rules), [access_rule_to_xhtml(Rules),
?BR, ?BR,
?INPUTT("submit", "submit", "Submit") ?INPUTT("submit", "submit", "Submit")
@ -1079,17 +1079,17 @@ process_admin(Host,
list_last_activity(Host, Lang, true, Month) list_last_activity(Host, Lang, true, Month)
end, end,
make_xhtml([?XCT('h1', "Users Last Activity")] ++ make_xhtml([?XCT('h1', "Users Last Activity")] ++
[?XAE('form', [?XMLATTR('action', <<>>), ?XMLATTR('method', <<"post">>)], [?XAE('form', [?XMLATTR(<<"action">>, <<>>), ?XMLATTR(<<"method">>, <<"post">>)],
[?CT("Period: "), [?CT("Period: "),
?XAE('select', [?XMLATTR('name', <<"period">>)], ?XAE('select', [?XMLATTR(<<"name">>, <<"period">>)],
lists:map( lists:map(
fun({O, V}) -> fun({O, V}) ->
Sel = if Sel = if
O == Month -> [?XMLATTR('selected', <<"selected">>)]; O == Month -> [?XMLATTR(<<"selected">>, <<"selected">>)];
true -> [] true -> []
end, end,
?XAC('option', ?XAC('option',
Sel ++ [?XMLATTR('value', O)], V) Sel ++ [?XMLATTR(<<"value">>, O)], V)
end, [{"month", ?T("Last month")}, end, [{"month", ?T("Last month")},
{"year", ?T("Last year")}, {"year", ?T("Last year")},
{"all", ?T("All activity")}])), {"all", ?T("All activity")}])),
@ -1245,15 +1245,15 @@ acl_spec_to_xhtml(ID, Spec) ->
acl_spec_select(ID, Opt) -> acl_spec_select(ID, Opt) ->
?XE('td', ?XE('td',
[?XAE('select', [?XMLATTR('name', "type" ++ ID)], [?XAE('select', [?XMLATTR(<<"name">>, "type" ++ ID)],
lists:map( lists:map(
fun(O) -> fun(O) ->
Sel = if Sel = if
O == Opt -> [?XMLATTR('selected', <<"selected">>)]; O == Opt -> [?XMLATTR(<<"selected">>, <<"selected">>)];
true -> [] true -> []
end, end,
?XAC('option', ?XAC('option',
Sel ++ [?XMLATTR('value', O)], Sel ++ [?XMLATTR(<<"value">>, O)],
atom_to_list(O)) atom_to_list(O))
end, [user, server, user_regexp, server_regexp, end, [user, server, user_regexp, server_regexp,
node_regexp, user_glob, server_glob, node_glob, all, raw]))]). node_regexp, user_glob, server_glob, node_glob, all, raw]))]).
@ -1454,9 +1454,9 @@ access_rule_to_xhtml(Rules) ->
SACL = atom_to_list(ACL), SACL = atom_to_list(ACL),
SAccess ++ "\s\t" ++ SACL ++ "\n" SAccess ++ "\s\t" ++ SACL ++ "\n"
end, Rules), end, Rules),
?XAC('textarea', [?XMLATTR('name', <<"rules">>), ?XAC('textarea', [?XMLATTR(<<"name">>, <<"rules">>),
?XMLATTR('rows', <<"16">>), ?XMLATTR(<<"rows">>, <<"16">>),
?XMLATTR('cols', <<"80">>)], ?XMLATTR(<<"cols">>, <<"80">>)],
Text). Text).
parse_access_rule(Text) -> parse_access_rule(Text) ->
@ -1546,7 +1546,7 @@ list_users(Host, Query, Lang, URLFunc) ->
error -> [?XREST("Bad format")]; error -> [?XREST("Bad format")];
nothing -> [] nothing -> []
end ++ end ++
[?XAE('form', [?XMLATTR('action', <<>>), ?XMLATTR('method', <<"post">>)], [?XAE('form', [?XMLATTR(<<"action">>, <<>>), ?XMLATTR(<<"method">>, <<"post">>)],
[?XE('table', [?XE('table',
[?XE('tr', [?XE('tr',
[?XC('td', ?T("User") ++ ":"), [?XC('td', ?T("User") ++ ":"),
@ -1560,7 +1560,7 @@ list_users(Host, Query, Lang, URLFunc) ->
]), ]),
?XE('tr', ?XE('tr',
[?X('td'), [?X('td'),
?XAE('td', [?XMLATTR('class', <<"alignright">>)], ?XAE('td', [?XMLATTR(<<"class">>, <<"alignright">>)],
[?INPUTT("submit", "addnewuser", "Add User")]), [?INPUTT("submit", "addnewuser", "Add User")]),
?X('td') ?X('td')
])]), ])]),
@ -1796,7 +1796,7 @@ user_info(User, Server, Query, Lang) ->
error -> [?XREST("Bad format")]; error -> [?XREST("Bad format")];
nothing -> [] nothing -> []
end ++ end ++
[?XAE('form', [?XMLATTR('action', <<>>), ?XMLATTR('method', <<"post">>)], [?XAE('form', [?XMLATTR(<<"action">>, <<>>), ?XMLATTR(<<"method">>, <<"post">>)],
[?XCT('h3', "Connected Resources:")] ++ FResources ++ [?XCT('h3', "Connected Resources:")] ++ FResources ++
[?XCT('h3', "Password:")] ++ FPassword ++ [?XCT('h3', "Password:")] ++ FPassword ++
[?XCT('h3', "Last Activity")] ++ [?C(LastActivity)] ++ [?XCT('h3', "Last Activity")] ++ [?C(LastActivity)] ++
@ -1876,9 +1876,9 @@ list_last_activity(Host, Lang, Integral, Period) ->
end, end,
Max = lists:max(Hist), Max = lists:max(Hist),
[?XAE('ol', [?XAE('ol',
[?XMLATTR('id', <<"lastactivity">>), ?XMLATTR('start', <<"0">>)], [?XMLATTR(<<"id">>, <<"lastactivity">>), ?XMLATTR(<<"start">>, <<"0">>)],
[?XAE('li', [?XAE('li',
[?XMLATTR('style', [?XMLATTR(<<"style">>,
"width:" ++ integer_to_list( "width:" ++ integer_to_list(
trunc(90 * V / Max)) ++ "%;")], trunc(90 * V / Max)) ++ "%;")],
[#xmlcdata{cdata = list_to_binary(pretty_string_int(V))}]) [#xmlcdata{cdata = list_to_binary(pretty_string_int(V))}])
@ -1934,13 +1934,13 @@ get_miscopts(Lang, Method, Query) ->
end ++ end ++
[ [
?XCT("h2", "Global"), ?XCT("h2", "Global"),
?XAE('form', [?XMLATTR('action', <<>>), ?XMLATTR('method', <<"post">>)], ?XAE('form', [?XMLATTR(<<"action">>, <<>>), ?XMLATTR(<<"method">>, <<"post">>)],
[options_to_xhtml("global", GlobalOptions, Lang), [options_to_xhtml("global", GlobalOptions, Lang),
?BR, ?BR,
?INPUTT("submit", "deleteglobal", "Delete Selected") ?INPUTT("submit", "deleteglobal", "Delete Selected")
]), ]),
?XCT("h2", "Local"), ?XCT("h2", "Local"),
?XAE('form', [?XMLATTR('action', <<>>), ?XMLATTR('method', <<"post">>)], ?XAE('form', [?XMLATTR(<<"action">>, <<>>), ?XMLATTR(<<"method">>, <<"post">>)],
[options_to_xhtml("local", LocalOptions, Lang), [options_to_xhtml("local", LocalOptions, Lang),
?BR, ?BR,
?INPUTT("submit", "deletelocal", "Delete Selected") ?INPUTT("submit", "deletelocal", "Delete Selected")
@ -2076,7 +2076,7 @@ get_miscopt(Lang, Query, SType, OldSKey) ->
nothing -> [] nothing -> []
end ++ end ++
[?XCT("h2", UpSType), [?XCT("h2", UpSType),
?XAE('form', [?XMLATTR('action', <<>>), ?XMLATTR('method', <<"post">>)], ?XAE('form', [?XMLATTR(<<"action">>, <<>>), ?XMLATTR(<<"method">>, <<"post">>)],
[?TEXTAREA("miscopt", integer_to_list(lists:max([16, NumLines])), [?TEXTAREA("miscopt", integer_to_list(lists:max([16, NumLines])),
"80", SOpt++"."), "80", SOpt++"."),
?BR, ?BR,
@ -2163,7 +2163,7 @@ get_node(global, Node, [], Query, Lang) ->
?LI([?ACT(Base ++ "stats/", "Statistics")]), ?LI([?ACT(Base ++ "stats/", "Statistics")]),
?LI([?ACT(Base ++ "update/", "Update")]) ?LI([?ACT(Base ++ "update/", "Update")])
] ++ MenuItems2), ] ++ MenuItems2),
?XAE('form', [?XMLATTR('action', <<>>), ?XMLATTR('method', <<"post">>)], ?XAE('form', [?XMLATTR(<<"action">>, <<>>), ?XMLATTR(<<"method">>, <<"post">>)],
[?INPUTT('submit', "restart", "Restart"), [?INPUTT('submit', "restart", "Restart"),
?C(" "), ?C(" "),
?INPUTT('submit', "stop", "Stop")]) ?INPUTT('submit', "stop", "Stop")])
@ -2215,15 +2215,15 @@ get_node(global, Node, ["db"], Query, Lang) ->
[?XC('td', STable), [?XC('td', STable),
?XE('td', [db_storage_select( ?XE('td', [db_storage_select(
STable, Type, Lang)]), STable, Type, Lang)]),
?XAC('td', [?XMLATTR('class', <<"alignright">>)], ?XAC('td', [?XMLATTR(<<"class">>, <<"alignright">>)],
pretty_string_int(Size)), pretty_string_int(Size)),
?XAC('td', [?XMLATTR('class', <<"alignright">>)], ?XAC('td', [?XMLATTR(<<"class">>, <<"alignright">>)],
pretty_string_int(Memory)) pretty_string_int(Memory))
]) ])
end, STables), end, STables),
[?XC('h1', ?T("Database Tables at ") ++ atom_to_list(Node))] ++ [?XC('h1', ?T("Database Tables at ") ++ atom_to_list(Node))] ++
ResS ++ ResS ++
[?XAE('form', [?XMLATTR('action', <<>>), ?XMLATTR('method', <<"post">>)], [?XAE('form', [?XMLATTR(<<"action">>, <<>>), ?XMLATTR(<<"method">>, <<"post">>)],
[?XAE('table', [], [?XAE('table', [],
[?XE('thead', [?XE('thead',
[?XE('tr', [?XE('tr',
@ -2235,8 +2235,8 @@ get_node(global, Node, ["db"], Query, Lang) ->
?XE('tbody', ?XE('tbody',
Rows ++ Rows ++
[?XE('tr', [?XE('tr',
[?XAE('td', [?XMLATTR('colspan', <<"4">>), [?XAE('td', [?XMLATTR(<<"colspan">>, <<"4">>),
?XMLATTR('class', <<"alignright">>)], ?XMLATTR(<<"class">>, <<"alignright">>)],
[?INPUTT("submit", "submit", [?INPUTT("submit", "submit",
"Submit")]) "Submit")])
])] ])]
@ -2258,7 +2258,7 @@ get_node(global, Node, ["backup"], Query, Lang) ->
[?XC('h1', ?T("Backup of ") ++ atom_to_list(Node))] ++ [?XC('h1', ?T("Backup of ") ++ atom_to_list(Node))] ++
ResS ++ ResS ++
[?XCT('p', "Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately."), [?XCT('p', "Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately."),
?XAE('form', [?XMLATTR('action', <<>>), ?XMLATTR('method', <<"post">>)], ?XAE('form', [?XMLATTR(<<"action">>, <<>>), ?XMLATTR(<<"method">>, <<"post">>)],
[?XAE('table', [], [?XAE('table', [],
[?XE('tbody', [?XE('tbody',
[?XE('tr', [?XE('tr',
@ -2351,7 +2351,7 @@ get_node(global, Node, ["pid"], _Query, Lang) ->
?XAE('table', [], ?XAE('table', [],
[?XE('tbody', [?XE('tbody',
[?XE('tr', [?XCT('td', "Number of processes:"), [?XE('tr', [?XCT('td', "Number of processes:"),
?XAC('td', [?XMLATTR('class', <<"alignright">>)], ?XAC('td', [?XMLATTR(<<"class">>, <<"alignright">>)],
pretty_string_int(ProcessesNumber))]) pretty_string_int(ProcessesNumber))])
]) ])
]), ]),
@ -2426,7 +2426,7 @@ get_node(global, Node, ["ports"], Query, Lang) ->
{error, ReasonT} -> [?XRES(?T("Error") ++ ": " ++ ReasonT)]; {error, ReasonT} -> [?XRES(?T("Error") ++ ": " ++ ReasonT)];
nothing -> [] nothing -> []
end ++ end ++
[?XAE('form', [?XMLATTR('action', <<>>), ?XMLATTR('method', <<"post">>)], [?XAE('form', [?XMLATTR(<<"action">>, <<>>), ?XMLATTR(<<"method">>, <<"post">>)],
[node_ports_to_xhtml(NewPorts, Lang)]) [node_ports_to_xhtml(NewPorts, Lang)])
]; ];
@ -2450,7 +2450,7 @@ get_node(Host, Node, ["modules"], Query, Lang) when is_list(Host) ->
error -> [?XREST("Bad format")]; error -> [?XREST("Bad format")];
nothing -> [] nothing -> []
end ++ end ++
[?XAE('form', [?XMLATTR('action', <<>>), ?XMLATTR('method', <<"post">>)], [?XAE('form', [?XMLATTR(<<"action">>, <<>>), ?XMLATTR(<<"method">>, <<"post">>)],
[node_modules_to_xhtml(NewModules, Lang)]) [node_modules_to_xhtml(NewModules, Lang)])
]; ];
@ -2473,25 +2473,25 @@ get_node(global, Node, ["stats"], _Query, Lang) ->
?XAE('table', [], ?XAE('table', [],
[?XE('tbody', [?XE('tbody',
[?XE('tr', [?XCT('td', "Uptime:"), [?XE('tr', [?XCT('td', "Uptime:"),
?XAC('td', [?XMLATTR('class', <<"alignright">>)], ?XAC('td', [?XMLATTR(<<"class">>, <<"alignright">>)],
UpTimeS)]), UpTimeS)]),
?XE('tr', [?XCT('td', "CPU Time:"), ?XE('tr', [?XCT('td', "CPU Time:"),
?XAC('td', [?XMLATTR('class', <<"alignright">>)], ?XAC('td', [?XMLATTR(<<"class">>, <<"alignright">>)],
CPUTimeS)]), CPUTimeS)]),
?XE('tr', [?XCT('td', "Online Users:"), ?XE('tr', [?XCT('td', "Online Users:"),
?XAC('td', [?XMLATTR('class', <<"alignright">>)], ?XAC('td', [?XMLATTR(<<"class">>, <<"alignright">>)],
pretty_string_int(OnlineUsers))]), pretty_string_int(OnlineUsers))]),
?XE('tr', [?XCT('td', "Transactions Committed:"), ?XE('tr', [?XCT('td', "Transactions Committed:"),
?XAC('td', [?XMLATTR('class', <<"alignright">>)], ?XAC('td', [?XMLATTR(<<"class">>, <<"alignright">>)],
pretty_string_int(TransactionsCommitted))]), pretty_string_int(TransactionsCommitted))]),
?XE('tr', [?XCT('td', "Transactions Aborted:"), ?XE('tr', [?XCT('td', "Transactions Aborted:"),
?XAC('td', [?XMLATTR('class', <<"alignright">>)], ?XAC('td', [?XMLATTR(<<"class">>, <<"alignright">>)],
pretty_string_int(TransactionsAborted))]), pretty_string_int(TransactionsAborted))]),
?XE('tr', [?XCT('td', "Transactions Restarted:"), ?XE('tr', [?XCT('td', "Transactions Restarted:"),
?XAC('td', [?XMLATTR('class', <<"alignright">>)], ?XAC('td', [?XMLATTR(<<"class">>, <<"alignright">>)],
pretty_string_int(TransactionsRestarted))]), pretty_string_int(TransactionsRestarted))]),
?XE('tr', [?XCT('td', "Transactions Logged:"), ?XE('tr', [?XCT('td', "Transactions Logged:"),
?XAC('td', [?XMLATTR('class', <<"alignright">>)], ?XAC('td', [?XMLATTR(<<"class">>, <<"alignright">>)],
pretty_string_int(TransactionsLogged))]) pretty_string_int(TransactionsLogged))])
]) ])
])]; ])];
@ -2525,13 +2525,13 @@ get_node(global, Node, ["update"], Query, Lang) ->
[?BR, [?BR,
?INPUTATTRS(<<"button">>, <<"selectall">>, ?INPUTATTRS(<<"button">>, <<"selectall">>,
<<"Select All">>, <<"Select All">>,
[?XMLATTR('onClick', <<"selectAll()">>)]), [?XMLATTR(<<"onClick">>, <<"selectAll()">>)]),
?C(" "), ?C(" "),
?INPUTATTRS(<<"button">>, <<"unselectall">>, ?INPUTATTRS(<<"button">>, <<"unselectall">>,
<<"Unselect All">>, <<"Unselect All">>,
[?XMLATTR('onClick', <<"unSelectAll()">>)])], [?XMLATTR(<<"onClick">>, <<"unSelectAll()">>)])],
%%?XE("ul", BeamsLis) %%?XE("ul", BeamsLis)
?XAE('ul', [?XMLATTR('class', <<"noliststyle">>)], ?XAE('ul', [?XMLATTR(<<"class">>, <<"noliststyle">>)],
BeamsLis ++ SelectButtons) BeamsLis ++ SelectButtons)
end, end,
FmtScript = ?XC('pre', io_lib:format("~p", [Script])), FmtScript = ?XC('pre', io_lib:format("~p", [Script])),
@ -2542,7 +2542,7 @@ get_node(global, Node, ["update"], Query, Lang) ->
{error, ErrorText} -> [?XREST("Error: " ++ ErrorText)]; {error, ErrorText} -> [?XREST("Error: " ++ ErrorText)];
nothing -> [] nothing -> []
end ++ end ++
[?XAE('form', [?XMLATTR('action', <<>>), ?XMLATTR('method', <<"post">>)], [?XAE('form', [?XMLATTR(<<"action">>, <<>>), ?XMLATTR(<<"method">>, <<"post">>)],
[ [
?XCT('h2', "Update plan"), ?XCT('h2', "Update plan"),
?XCT('h3', "Modified modules"), Mods, ?XCT('h3', "Modified modules"), Mods,
@ -2592,15 +2592,15 @@ node_parse_query(Node, Query) ->
db_storage_select(ID, Opt, Lang) -> db_storage_select(ID, Opt, Lang) ->
?XAE('select', [?XMLATTR('name', "table" ++ ID)], ?XAE('select', [?XMLATTR(<<"name">>, "table" ++ ID)],
lists:map( lists:map(
fun({O, Desc}) -> fun({O, Desc}) ->
Sel = if Sel = if
O == Opt -> [?XMLATTR('selected', <<"selected">>)]; O == Opt -> [?XMLATTR(<<"selected">>, <<"selected">>)];
true -> [] true -> []
end, end,
?XACT('option', ?XACT('option',
Sel ++ [?XMLATTR('value', O)], Sel ++ [?XMLATTR(<<"value">>, O)],
Desc) Desc)
end, [{ram_copies, "RAM copy"}, end, [{ram_copies, "RAM copy"},
{disc_copies, "RAM and disc copy"}, {disc_copies, "RAM and disc copy"},
@ -2713,7 +2713,7 @@ node_backup_parse_query(Node, Query) ->
"import_piefxis_file", "export_piefxis_dir", "export_piefxis_host_dir"]). "import_piefxis_file", "export_piefxis_dir", "export_piefxis_host_dir"]).
node_ports_to_xhtml(Ports, Lang) -> node_ports_to_xhtml(Ports, Lang) ->
?XAE('table', [?XMLATTR('class', <<"withtextareas">>)], ?XAE('table', [?XMLATTR(<<"class">>, <<"withtextareas">>)],
[?XE('thead', [?XE('thead',
[?XE('tr', [?XE('tr',
[?XCT('td', "Port"), [?XCT('td', "Port"),
@ -2731,9 +2731,9 @@ node_ports_to_xhtml(Ports, Lang) ->
{NumLines, SOptsClean} = term_to_paragraph(OptsClean, 40), {NumLines, SOptsClean} = term_to_paragraph(OptsClean, 40),
%%ID = term_to_id(E), %%ID = term_to_id(E),
?XE('tr', ?XE('tr',
[?XAE('td', [?XMLATTR('size', <<"6">>)], [?C(SPort)]), [?XAE('td', [?XMLATTR(<<"size">>, <<"6">>)], [?C(SPort)]),
?XAE('td', [?XMLATTR('size', <<"15">>)], [?C(SIP)]), ?XAE('td', [?XMLATTR(<<"size">>, <<"15">>)], [?C(SIP)]),
?XAE('td', [?XMLATTR('size', <<"4">>)], [?C(atom_to_list(NetProt))]), ?XAE('td', [?XMLATTR(<<"size">>, <<"4">>)], [?C(atom_to_list(NetProt))]),
?XE('td', [?INPUTS("text", "module" ++ SSPort, ?XE('td', [?INPUTS("text", "module" ++ SSPort,
SModule, "15")]), SModule, "15")]),
?XE('td', [?TEXTAREA("opts" ++ SSPort, integer_to_list(NumLines), "35", SOptsClean)]), ?XE('td', [?TEXTAREA("opts" ++ SSPort, integer_to_list(NumLines), "35", SOptsClean)]),
@ -2750,22 +2750,22 @@ node_ports_to_xhtml(Ports, Lang) ->
?XE("td", [make_netprot_html("tcp")]), ?XE("td", [make_netprot_html("tcp")]),
?XE('td', [?INPUTS("text", "modulenew", "", "15")]), ?XE('td', [?INPUTS("text", "modulenew", "", "15")]),
?XE('td', [?TEXTAREA("optsnew", "2", "35", "[]")]), ?XE('td', [?TEXTAREA("optsnew", "2", "35", "[]")]),
?XAE('td', [?XMLATTR("colspan", "2")], ?XAE('td', [?XMLATTR(<<"colspan">>, "2")],
[?INPUTT("submit", "addnew", "Add New")]) [?INPUTT("submit", "addnew", "Add New")])
] ]
)] )]
)]). )]).
make_netprot_html(NetProt) -> make_netprot_html(NetProt) ->
?XAE('select', [?XMLATTR('name', "netprotnew")], ?XAE('select', [?XMLATTR(<<"name">>, "netprotnew")],
lists:map( lists:map(
fun(O) -> fun(O) ->
Sel = if Sel = if
O == NetProt -> [?XMLATTR('selected', <<"selected">>)]; O == NetProt -> [?XMLATTR(<<"selected">>, <<"selected">>)];
true -> [] true -> []
end, end,
?XAC('option', ?XAC('option',
Sel ++ [?XMLATTR('value', O)], Sel ++ [?XMLATTR(<<"value">>, O)],
O) O)
end, ["tcp", "udp"])). end, ["tcp", "udp"])).
@ -2843,7 +2843,7 @@ node_ports_parse_query(Node, Ports, Query) ->
end. end.
node_modules_to_xhtml(Modules, Lang) -> node_modules_to_xhtml(Modules, Lang) ->
?XAE('table', [?XMLATTR('class', <<"withtextareas">>)], ?XAE('table', [?XMLATTR(<<"class">>, <<"withtextareas">>)],
[?XE('thead', [?XE('thead',
[?XE('tr', [?XE('tr',
[?XCT('td', "Module"), [?XCT('td', "Module"),
@ -2868,7 +2868,7 @@ node_modules_to_xhtml(Modules, Lang) ->
[?XE('tr', [?XE('tr',
[?XE('td', [?INPUT("text", "modulenew", "")]), [?XE('td', [?INPUT("text", "modulenew", "")]),
?XE('td', [?TEXTAREA("optsnew", "2", "40", "[]")]), ?XE('td', [?TEXTAREA("optsnew", "2", "40", "[]")]),
?XAE('td', [?XMLATTR("colspan", "2")], ?XAE('td', [?XMLATTR(<<"colspan">>, "2")],
[?INPUTT("submit", "start", "Start")]) [?INPUTT("submit", "start", "Start")])
] ]
)] )]
@ -3103,17 +3103,17 @@ make_menu_items2(Lang, Deep, {MURI, MName, [Item | Items]}, Res) ->
make_menu_items2(Lang, Deep, {MURI, MName, Items}, Res2). make_menu_items2(Lang, Deep, {MURI, MName, Items}, Res2).
make_menu_item(header, 1, URI, Name, _Lang) -> make_menu_item(header, 1, URI, Name, _Lang) ->
?LI([?XAE('div', [?XMLATTR('id', <<"navhead">>)], [?AC(URI, Name)] )]); ?LI([?XAE('div', [?XMLATTR(<<"id">>, <<"navhead">>)], [?AC(URI, Name)] )]);
make_menu_item(header, 2, URI, Name, _Lang) -> make_menu_item(header, 2, URI, Name, _Lang) ->
?LI([?XAE('div', [?XMLATTR('id', <<"navheadsub">>)], [?AC(URI, Name)] )]); ?LI([?XAE('div', [?XMLATTR(<<"id">>, <<"navheadsub">>)], [?AC(URI, Name)] )]);
make_menu_item(header, 3, URI, Name, _Lang) -> make_menu_item(header, 3, URI, Name, _Lang) ->
?LI([?XAE('div', [?XMLATTR('id', <<"navheadsubsub">>)], [?AC(URI, Name)] )]); ?LI([?XAE('div', [?XMLATTR(<<"id">>, <<"navheadsubsub">>)], [?AC(URI, Name)] )]);
make_menu_item(item, 1, URI, Name, Lang) -> make_menu_item(item, 1, URI, Name, Lang) ->
?LI([?XAE('div', [?XMLATTR('id', <<"navitem">>)], [?ACT(URI, Name)] )]); ?LI([?XAE('div', [?XMLATTR(<<"id">>, <<"navitem">>)], [?ACT(URI, Name)] )]);
make_menu_item(item, 2, URI, Name, Lang) -> make_menu_item(item, 2, URI, Name, Lang) ->
?LI([?XAE('div', [?XMLATTR('id', <<"navitemsub">>)], [?ACT(URI, Name)] )]); ?LI([?XAE('div', [?XMLATTR(<<"id">>, <<"navitemsub">>)], [?ACT(URI, Name)] )]);
make_menu_item(item, 3, URI, Name, Lang) -> make_menu_item(item, 3, URI, Name, Lang) ->
?LI([?XAE('div', [?XMLATTR('id', <<"navitemsubsub">>)], [?ACT(URI, Name)] )]). ?LI([?XAE('div', [?XMLATTR(<<"id">>, <<"navitemsubsub">>)], [?ACT(URI, Name)] )]).
%%%================================== %%%==================================

View File

@ -86,7 +86,7 @@ get_human_html_xmlel() ->
Par1 = #xmlel{name = p, children = Par1 = #xmlel{name = p, children =
[#xmlcdata{cdata = <<"An implementation of ">>}, [#xmlcdata{cdata = <<"An implementation of ">>},
#xmlel{name = a, #xmlel{name = a,
attrs = [#xmlattr{name=href, value = <<"http://xmpp.org/extensions/xep-0206.html">>}], attrs = [#xmlattr{name = <<"href">>, value = <<"http://xmpp.org/extensions/xep-0206.html">>}],
children = [#xmlcdata{cdata = <<"XMPP over BOSH (XEP-0206)">>}] children = [#xmlcdata{cdata = <<"XMPP over BOSH (XEP-0206)">>}]
} }
]}, ]},
@ -95,7 +95,7 @@ get_human_html_xmlel() ->
"To use HTTP-Bind you need a Jabber/XMPP client that supports it.">>} "To use HTTP-Bind you need a Jabber/XMPP client that supports it.">>}
]}, ]},
#xmlel{name = html, #xmlel{name = html,
attrs = [#xmlattr{name = xmlns, value= <<"http://www.w3.org/1999/xhtml">>}], attrs = [#xmlattr{name = <<"xmlns">>, value= <<"http://www.w3.org/1999/xhtml">>}],
children = children =
[#xmlel{name = head, children = [#xmlel{name = title, children = [#xmlcdata{cdata = Heading}]}]}, [#xmlel{name = head, children = [#xmlel{name = title, children = [#xmlcdata{cdata = Heading}]}]},
#xmlel{name = body, children = [H, Par1, Par2]}]}. #xmlel{name = body, children = [H, Par1, Par2]}]}.

View File

@ -159,13 +159,13 @@ css() ->
%%%---------------------------------------------------------------------- %%%----------------------------------------------------------------------
make_xa_link_css() -> make_xa_link_css() ->
?XA('link', [?XMLATTR('href', <<"/register/register.css">>), ?XA('link', [?XMLATTR(<<"href">>, <<"/register/register.css">>),
?XMLATTR('type', <<"text/css">>), ?XMLATTR(<<"type">>, <<"text/css">>),
?XMLATTR('rel', <<"stylesheet">>)]). ?XMLATTR(<<"rel">>, <<"stylesheet">>)]).
make_h1_title(TextString, Lang) -> make_h1_title(TextString, Lang) ->
?XACT('h1', ?XACT('h1',
[?XMLATTR('class', <<"title">>), ?XMLATTR('style', <<"text-align:center;">>)], [?XMLATTR(<<"class">>, <<"title">>), ?XMLATTR(<<"style">>, <<"text-align:center;">>)],
TextString). TextString).
index_page(Lang) -> index_page(Lang) ->
@ -205,7 +205,7 @@ form_new_get(Host, Lang) ->
"Please read carefully the instructions to fill correctly the fields."), "Please read carefully the instructions to fill correctly the fields."),
%% <!-- JID's take the form of 'username@server.com'. For example, my JID is 'kirjava@jabber.org'. %% <!-- JID's take the form of 'username@server.com'. For example, my JID is 'kirjava@jabber.org'.
%% The maximum length for a JID is 255 characters. --> %% The maximum length for a JID is 255 characters. -->
?XAE('form', [?XMLATTR('action', <<"">>), ?XMLATTR('method', <<"post">>)], ?XAE('form', [?XMLATTR(<<"action">>, <<"">>), ?XMLATTR(<<"method">>, <<"post">>)],
[ [
?XE('ol', [ ?XE('ol', [
?XE('li', [ ?XE('li', [
@ -364,7 +364,7 @@ form_changepass_get(Host, Lang) ->
], ],
Els=[ Els=[
make_h1_title("Change Password", Lang), make_h1_title("Change Password", Lang),
?XAE('form', [?XMLATTR('action', <<"">>), ?XMLATTR('method', <<"post">>)], ?XAE('form', [?XMLATTR(<<"action">>, <<"">>), ?XMLATTR(<<"method">>, <<"post">>)],
[ [
?XE('ol', [ ?XE('ol', [
?XE('li', [ ?XE('li', [
@ -482,7 +482,7 @@ form_del_get(Host, Lang) ->
make_h1_title("Unregister a Jabber account", Lang), make_h1_title("Unregister a Jabber account", Lang),
?XCT('p', ?XCT('p',
"This page allows to unregister a Jabber account in this Jabber server."), "This page allows to unregister a Jabber account in this Jabber server."),
?XAE('form', [?XMLATTR('action', <<"">>), ?XMLATTR('method', <<"post">>)], ?XAE('form', [?XMLATTR(<<"action">>, <<"">>), ?XMLATTR(<<"method">>, <<"post">>)],
[ [
?XE('ol', [ ?XE('ol', [
?XE('li', [ ?XE('li', [