Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/processone/ejabberd.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--src/ejabberd_c2s.erl147
-rw-r--r--src/ejabberd_local.erl41
-rw-r--r--src/ejabberd_sm.erl4
-rw-r--r--src/jd2ejd.erl35
-rw-r--r--src/jlib.erl5
-rw-r--r--src/jlib.hrl5
-rw-r--r--src/mod_configure.erl95
-rw-r--r--src/mod_configure2.erl12
-rw-r--r--src/mod_disco.erl174
-rw-r--r--src/mod_irc/mod_irc.erl70
-rw-r--r--src/mod_irc/mod_irc_connection.erl34
-rw-r--r--src/mod_last.erl46
-rw-r--r--src/mod_muc/mod_muc.erl77
-rw-r--r--src/mod_muc/mod_muc_room.erl15
-rw-r--r--src/mod_privacy.erl39
-rw-r--r--src/mod_private.erl26
-rw-r--r--src/mod_pubsub/mod_pubsub.erl48
-rw-r--r--src/mod_register.erl71
-rw-r--r--src/mod_roster.erl62
-rw-r--r--src/mod_stats.erl14
-rw-r--r--src/mod_time.erl16
-rw-r--r--src/mod_vcard.erl116
-rw-r--r--src/mod_version.erl26
24 files changed, 605 insertions, 578 deletions
diff --git a/ChangeLog b/ChangeLog
index fedf0639a..02506a197 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2003-12-17 Alexey Shchepin <alexey@sevcom.net>
+
+ * src/jlib.hrl: Added declaration of "iq" record
+ * (all): Updated to use "iq" record
+
2003-12-14 Alexey Shchepin <alexey@sevcom.net>
* src/ejabberd_local.erl: Replaced register_local_route to
diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl
index d036ec0dd..cb886f63d 100644
--- a/src/ejabberd_c2s.erl
+++ b/src/ejabberd_c2s.erl
@@ -1,7 +1,7 @@
%%%----------------------------------------------------------------------
%%% File : ejabberd_c2s.erl
%%% Author : Alexey Shchepin <alexey@sevcom.net>
-%%% Purpose :
+%%% Purpose : Serve C2S connection
%%% Created : 16 Nov 2002 by Alexey Shchepin <alexey@sevcom.net>
%%% Id : $Id$
%%%----------------------------------------------------------------------
@@ -124,7 +124,7 @@ init([{SockMod, Socket}, Opts]) ->
%% {stop, Reason, NewStateData}
%%----------------------------------------------------------------------
-wait_for_stream({xmlstreamstart, Name, Attrs}, StateData) ->
+wait_for_stream({xmlstreamstart, _Name, Attrs}, StateData) ->
case xml:get_attr_s("xmlns:stream", Attrs) of
?NS_STREAM ->
case xml:get_attr_s("version", Attrs) of
@@ -195,12 +195,12 @@ wait_for_stream(closed, StateData) ->
wait_for_auth({xmlstreamelement, El}, StateData) ->
case is_auth_packet(El) of
- {auth, ID, get, {"", _, _, _}} ->
+ {auth, _ID, get, {"", _, _, _}} ->
Err = jlib:make_error_reply(El, ?ERR_BAD_REQUEST),
send_element(StateData, Err),
{next_state, wait_for_auth, StateData};
- {auth, ID, get, {U, _, _, _}} ->
- {xmlelement, Name, Attrs, Els} = jlib:make_result_iq_reply(El),
+ {auth, _ID, get, {U, _, _, _}} ->
+ {xmlelement, Name, Attrs, _Els} = jlib:make_result_iq_reply(El),
Res = case ejabberd_auth:plain_password_required() of
false ->
{xmlelement, Name, Attrs,
@@ -219,11 +219,11 @@ wait_for_auth({xmlstreamelement, El}, StateData) ->
end,
send_element(StateData, Res),
{next_state, wait_for_auth, StateData};
- {auth, ID, set, {U, P, D, ""}} ->
+ {auth, _ID, set, {U, P, D, ""}} ->
Err = jlib:make_error_reply(El, ?ERR_AUTH_NO_RESOURCE_PROVIDED),
send_element(StateData, Err),
{next_state, wait_for_auth, StateData};
- {auth, ID, set, {U, P, D, R}} ->
+ {auth, _ID, set, {U, P, D, R}} ->
io:format("AUTH: ~p~n", [{U, P, D, R}]),
JID = jlib:make_jid(U, StateData#state.server, R),
case (JID /= error) andalso
@@ -286,10 +286,9 @@ wait_for_auth({xmlstreamelement, El}, StateData) ->
end;
_ ->
case jlib:iq_query_info(El) of
- {iq, ID, Type, ?NS_REGISTER, SubEl} ->
+ #iq{xmlns = ?NS_REGISTER} = IQ ->
ResIQ = mod_register:process_iq(
- {"", "", ""}, {"", ?MYNAME, ""},
- {iq, ID, Type, ?NS_REGISTER, SubEl}),
+ {"", "", ""}, {"", ?MYNAME, ""}, IQ),
Res1 = jlib:replace_from_to({"", ?MYNAME, ""},
{"", "", ""},
jlib:iq_to_xml(ResIQ)),
@@ -301,7 +300,7 @@ wait_for_auth({xmlstreamelement, El}, StateData) ->
end
end;
-wait_for_auth({xmlstreamend, Name}, StateData) ->
+wait_for_auth({xmlstreamend, _Name}, StateData) ->
send_text(StateData, ?STREAM_TRAILER),
{stop, normal, StateData};
@@ -351,10 +350,9 @@ wait_for_sasl_auth({xmlstreamelement, El}, StateData) ->
end;
_ ->
case jlib:iq_query_info(El) of
- {iq, ID, Type, ?NS_REGISTER, SubEl} ->
+ #iq{xmlns = ?NS_REGISTER} = IQ ->
ResIQ = mod_register:process_iq(
- {"", "", ""}, {"", ?MYNAME, ""},
- {iq, ID, Type, ?NS_REGISTER, SubEl}),
+ {"", "", ""}, {"", ?MYNAME, ""}, IQ),
Res1 = jlib:replace_from_to({"", ?MYNAME, ""},
{"", "", ""},
jlib:iq_to_xml(ResIQ)),
@@ -366,7 +364,7 @@ wait_for_sasl_auth({xmlstreamelement, El}, StateData) ->
end
end;
-wait_for_sasl_auth({xmlstreamend, Name}, StateData) ->
+wait_for_sasl_auth({xmlstreamend, _Name}, StateData) ->
send_text(StateData, ?STREAM_TRAILER),
{stop, normal, StateData};
@@ -414,10 +412,9 @@ wait_for_sasl_response({xmlstreamelement, El}, StateData) ->
end;
_ ->
case jlib:iq_query_info(El) of
- {iq, ID, Type, ?NS_REGISTER, SubEl} ->
+ #iq{xmlns = ?NS_REGISTER} = IQ ->
ResIQ = mod_register:process_iq(
- {"", "", ""}, {"", ?MYNAME, ""},
- {iq, ID, Type, ?NS_REGISTER, SubEl}),
+ {"", "", ""}, {"", ?MYNAME, ""}, IQ),
Res1 = jlib:replace_from_to({"", ?MYNAME, ""},
{"", "", ""},
jlib:iq_to_xml(ResIQ)),
@@ -429,7 +426,7 @@ wait_for_sasl_response({xmlstreamelement, El}, StateData) ->
end
end;
-wait_for_sasl_response({xmlstreamend, Name}, StateData) ->
+wait_for_sasl_response({xmlstreamend, _Name}, StateData) ->
send_text(StateData, ?STREAM_TRAILER),
{stop, normal, StateData};
@@ -444,7 +441,7 @@ wait_for_sasl_response(closed, StateData) ->
wait_for_bind({xmlstreamelement, El}, StateData) ->
case jlib:iq_query_info(El) of
- {iq, ID, set, ?NS_BIND, SubEl} ->
+ #iq{type = set, xmlns = ?NS_BIND, sub_el = SubEl} = IQ ->
U = StateData#state.user,
R1 = xml:get_path_s(SubEl, [{elem, "resource"}, cdata]),
R = case jlib:resourceprep(R1) of
@@ -461,11 +458,12 @@ wait_for_bind({xmlstreamelement, El}, StateData) ->
{next_state, wait_for_bind, StateData};
_ ->
JID = jlib:make_jid(U, StateData#state.server, R),
- Res = {iq, ID, result, ?NS_BIND,
- [{xmlelement, "bind",
- [{"xmlns", ?NS_BIND}],
- [{xmlelement, "jid", [],
- [{xmlcdata, jlib:jid_to_string(JID)}]}]}]},
+ Res = IQ#iq{type = result,
+ sub_el = [{xmlelement, "bind",
+ [{"xmlns", ?NS_BIND}],
+ [{xmlelement, "jid", [],
+ [{xmlcdata,
+ jlib:jid_to_string(JID)}]}]}]},
send_element(StateData, jlib:iq_to_xml(Res)),
{next_state, wait_for_session,
StateData#state{resource = R, jid = JID}}
@@ -474,7 +472,7 @@ wait_for_bind({xmlstreamelement, El}, StateData) ->
{next_state, wait_for_bind, StateData}
end;
-wait_for_bind({xmlstreamend, Name}, StateData) ->
+wait_for_bind({xmlstreamend, _Name}, StateData) ->
send_text(StateData, ?STREAM_TRAILER),
{stop, normal, StateData};
@@ -489,7 +487,7 @@ wait_for_bind(closed, StateData) ->
wait_for_session({xmlstreamelement, El}, StateData) ->
case jlib:iq_query_info(El) of
- {iq, ID, set, ?NS_SESSION, SubEl} ->
+ #iq{type = set, xmlns = ?NS_SESSION} ->
U = StateData#state.user,
R = StateData#state.resource,
io:format("SASLAUTH: ~p~n", [{U, R}]),
@@ -521,22 +519,11 @@ wait_for_session({xmlstreamelement, El}, StateData) ->
send_element(StateData, Err),
{next_state, wait_for_session, StateData}
end;
- % TODO: is this needed?
- {iq, ID, Type, ?NS_REGISTER, SubEl} ->
- ResIQ = mod_register:process_iq(
- {"", "", ""}, {"", ?MYNAME, ""},
- {iq, ID, Type, ?NS_REGISTER, SubEl}),
- Res1 = jlib:replace_from_to({"", ?MYNAME, ""},
- {"", "", ""},
- jlib:iq_to_xml(ResIQ)),
- Res = jlib:remove_attr("to", Res1),
- send_element(StateData, Res),
- {next_state, wait_for_session, StateData};
_ ->
{next_state, wait_for_session, StateData}
end;
-wait_for_session({xmlstreamend, Name}, StateData) ->
+wait_for_session({xmlstreamend, _Name}, StateData) ->
send_text(StateData, ?STREAM_TRAILER),
{stop, normal, StateData};
@@ -551,7 +538,7 @@ wait_for_session(closed, StateData) ->
session_established({xmlstreamelement, El}, StateData) ->
- {xmlelement, Name, Attrs, Els} = El,
+ {xmlelement, Name, Attrs, _Els} = El,
User = StateData#state.user,
Server = StateData#state.server,
%FromJID = {User,
@@ -594,13 +581,14 @@ session_established({xmlstreamelement, El}, StateData) ->
none ->
ejabberd_router:route(FromJID, ToJID, El),
StateData;
- PrivList ->
+ _PrivList ->
case jlib:iq_query_info(El) of
- {iq, ID, Type, ?NS_PRIVACY = XMLNS, SubEl} = IQ ->
+ #iq{xmlns = ?NS_PRIVACY} = IQ ->
process_privacy_iq(
FromJID, ToJID, IQ, StateData);
_ ->
- ejabberd_router:route(FromJID, ToJID, El),
+ ejabberd_router:route(
+ FromJID, ToJID, El),
StateData
end
end;
@@ -613,7 +601,7 @@ session_established({xmlstreamelement, El}, StateData) ->
end,
{next_state, session_established, NewState};
-session_established({xmlstreamend, Name}, StateData) ->
+session_established({xmlstreamend, _Name}, StateData) ->
send_text(StateData, ?STREAM_TRAILER),
{stop, normal, StateData};
@@ -645,7 +633,7 @@ session_established(closed, StateData) ->
%% {next_state, NextStateName, NextStateData, Timeout} |
%% {stop, Reason, NewStateData}
%%----------------------------------------------------------------------
-handle_event(Event, StateName, StateData) ->
+handle_event(_Event, StateName, StateData) ->
{next_state, StateName, StateData}.
%%----------------------------------------------------------------------
@@ -657,11 +645,11 @@ handle_event(Event, StateName, StateData) ->
%% {stop, Reason, NewStateData} |
%% {stop, Reason, Reply, NewStateData}
%%----------------------------------------------------------------------
-handle_sync_event(Event, From, StateName, StateData) ->
+handle_sync_event(_Event, _From, StateName, StateData) ->
Reply = ok,
{reply, Reply, StateName, StateData}.
-code_change(OldVsn, StateName, StateData, Extra) ->
+code_change(_OldVsn, StateName, StateData, _Extra) ->
{ok, StateName, StateData}.
%%----------------------------------------------------------------------
@@ -673,7 +661,7 @@ code_change(OldVsn, StateName, StateData, Extra) ->
handle_info({send_text, Text}, StateName, StateData) ->
send_text(StateData, Text),
{next_state, StateName, StateData};
-handle_info(replaced, StateName, StateData) ->
+handle_info(replaced, _StateName, StateData) ->
% TODO
%send_text(StateData#state.sender, Text),
{stop, normal, StateData#state{authentificated = replaced}};
@@ -721,37 +709,37 @@ handle_info({route, From, To, Packet}, StateName, StateData) ->
end;
"broadcast" ->
?DEBUG("broadcast~n~p~n", [Els]),
- NewSt = case Els of
- [{item, IJID, ISubscription}] ->
- {false, Attrs,
- roster_change(IJID, ISubscription,
- StateData)};
- [{exit, Reason}] ->
- {exit, Attrs, Reason};
- [{privacy_list, PrivList}] ->
- {false, Attrs,
- case catch mod_privacy:updated_list(
- StateData#state.privacy_list,
- PrivList) of
- {'EXIT', _} ->
- {false, Attrs, StateData};
- NewPL ->
- StateData#state{privacy_list = NewPL}
- end};
- _ ->
- {false, Attrs, StateData}
- end;
+ case Els of
+ [{item, IJID, ISubscription}] ->
+ {false, Attrs,
+ roster_change(IJID, ISubscription,
+ StateData)};
+ [{exit, Reason}] ->
+ {exit, Attrs, Reason};
+ [{privacy_list, PrivList}] ->
+ {false, Attrs,
+ case catch mod_privacy:updated_list(
+ StateData#state.privacy_list,
+ PrivList) of
+ {'EXIT', _} ->
+ {false, Attrs, StateData};
+ NewPL ->
+ StateData#state{privacy_list = NewPL}
+ end};
+ _ ->
+ {false, Attrs, StateData}
+ end;
"iq" ->
IQ = jlib:iq_query_info(Packet),
case IQ of
- {iq, ID, Type, ?NS_VCARD, SubEl} ->
+ #iq{xmlns = ?NS_VCARD} ->
ResIQ = mod_vcard:process_sm_iq(From, To, IQ),
ejabberd_router:route(To,
From,
jlib:iq_to_xml(ResIQ)),
{false, Attrs, StateData};
%-ifdef(PRIVACY_SUPPORT).
- {iq, _ID, Type, _XMLNS, _SubEl} ->
+ #iq{} ->
case catch mod_privacy:check_packet(
StateData#state.user,
StateData#state.privacy_list,
@@ -808,7 +796,7 @@ handle_info({route, From, To, Packet}, StateName, StateData) ->
%% Purpose: Shutdown the fsm
%% Returns: any
%%----------------------------------------------------------------------
-terminate(Reason, StateName, StateData) ->
+terminate(_Reason, StateName, StateData) ->
case StateName of
session_established ->
case StateData#state.authentificated of
@@ -870,7 +858,7 @@ new_id() ->
is_auth_packet(El) ->
case jlib:iq_query_info(El) of
- {iq, ID, Type, ?NS_AUTH, SubEl} ->
+ #iq{id = ID, type = Type, xmlns = ?NS_AUTH, sub_el = SubEl} ->
{xmlelement, _, _, Els} = SubEl,
{auth, ID, Type,
get_auth_tags(Els, "", "", "", "")};
@@ -879,7 +867,7 @@ is_auth_packet(El) ->
end.
-get_auth_tags([{xmlelement, Name, Attrs, Els}| L], U, P, D, R) ->
+get_auth_tags([{xmlelement, Name, _Attrs, Els}| L], U, P, D, R) ->
CData = xml:get_cdata(Els),
case Name of
"username" ->
@@ -947,7 +935,7 @@ process_presence_probe(From, To, StateData) ->
end.
presence_update(From, Packet, StateData) ->
- {xmlelement, Name, Attrs, Els} = Packet,
+ {xmlelement, _Name, Attrs, _Els} = Packet,
case xml:get_attr_s("type", Attrs) of
"unavailable" ->
ejabberd_sm:unset_presence(StateData#state.user,
@@ -1019,7 +1007,7 @@ presence_update(From, Packet, StateData) ->
end.
presence_track(From, To, Packet, StateData) ->
- {xmlelement, Name, Attrs, Els} = Packet,
+ {xmlelement, _Name, Attrs, _Els} = Packet,
LTo = jlib:jid_tolower(To),
User = StateData#state.user,
case xml:get_attr_s("type", Attrs) of
@@ -1245,7 +1233,9 @@ update_priority(El, StateData) ->
-process_privacy_iq(From, To, {iq, ID, Type, XMLNS, SubEl} = IQ, StateData) ->
+process_privacy_iq(From, To,
+ #iq{type = Type, sub_el = SubEl} = IQ,
+ StateData) ->
{Res, NewStateData} =
case Type of
get ->
@@ -1272,10 +1262,9 @@ process_privacy_iq(From, To, {iq, ID, Type, XMLNS, SubEl} = IQ, StateData) ->
IQRes =
case Res of
{result, Result} ->
- {iq, ID, result, XMLNS, Result};
+ IQ#iq{type = result, sub_el = Result};
{error, Error} ->
- {iq, ID, error, XMLNS,
- [SubEl, Error]}
+ IQ#iq{type = error, sub_el = [SubEl, Error]}
end,
ejabberd_router:route(
To, From, jlib:iq_to_xml(IQRes)),
diff --git a/src/ejabberd_local.erl b/src/ejabberd_local.erl
index 95597bbc2..cf46e73fc 100644
--- a/src/ejabberd_local.erl
+++ b/src/ejabberd_local.erl
@@ -106,31 +106,24 @@ do_route(State, From, To, Packet) ->
process_iq(State, From, To, Packet) ->
IQ = jlib:iq_query_info(Packet),
case IQ of
- {iq, _ID, Type, XMLNS, _SubEl} ->
- case jlib:is_iq_request_type(Type) of
- true ->
- case ets:lookup(State#state.iqtable, XMLNS) of
- [{_, Module, Function}] ->
- ResIQ = apply(Module, Function, [From, To, IQ]),
- if
- ResIQ /= ignore ->
- ejabberd_router ! {route,
- To,
- From,
- jlib:iq_to_xml(ResIQ)};
- true ->
- ok
- end;
- [{_, Module, Function, Opts}] ->
- gen_iq_handler:handle(Module, Function, Opts,
- From, To, IQ);
- [] ->
- Err = jlib:make_error_reply(
- Packet, ?ERR_FEATURE_NOT_IMPLEMENTED),
- ejabberd_router:route(To, From, Err)
+ #iq{xmlns = XMLNS} ->
+ case ets:lookup(State#state.iqtable, XMLNS) of
+ [{_, Module, Function}] ->
+ ResIQ = Module:Function(From, To, IQ),
+ if
+ ResIQ /= ignore ->
+ ejabberd_router:route(
+ To, From, jlib:iq_to_xml(ResIQ));
+ true ->
+ ok
end;
- _ ->
- ok
+ [{_, Module, Function, Opts}] ->
+ gen_iq_handler:handle(Module, Function, Opts,
+ From, To, IQ);
+ [] ->
+ Err = jlib:make_error_reply(
+ Packet, ?ERR_FEATURE_NOT_IMPLEMENTED),
+ ejabberd_router:route(To, From, Err)
end;
reply ->
ok;
diff --git a/src/ejabberd_sm.erl b/src/ejabberd_sm.erl
index fbceab111..6fc8f1fd6 100644
--- a/src/ejabberd_sm.erl
+++ b/src/ejabberd_sm.erl
@@ -341,7 +341,7 @@ dirty_get_my_sessions_list() ->
process_iq(From, To, Packet) ->
IQ = jlib:iq_query_info(Packet),
case IQ of
- {iq, _ID, _Type, XMLNS, _SubEl} ->
+ #iq{xmlns = XMLNS} ->
case ets:lookup(sm_iqtable, XMLNS) of
[{_, Module, Function}] ->
ResIQ = Module:Function(From, To, IQ),
@@ -366,7 +366,7 @@ process_iq(From, To, Packet) ->
ok;
_ ->
Err = jlib:make_error_reply(Packet, ?ERR_BAD_REQUEST),
- ejabberd_router ! {route, To, From, Err},
+ ejabberd_router:route(To, From, Err),
ok
end.
diff --git a/src/jd2ejd.erl b/src/jd2ejd.erl
index d18249a5c..8bcbb30fe 100644
--- a/src/jd2ejd.erl
+++ b/src/jd2ejd.erl
@@ -82,7 +82,7 @@ init([File, User, Pid]) ->
%% {stop, Reason, NewStateData}
%%----------------------------------------------------------------------
-wait_for_xdb({xmlstreamstart, Name, Attrs}, StateData) ->
+wait_for_xdb({xmlstreamstart, Name, _Attrs}, StateData) ->
case Name of
"xdb" ->
{next_state, xdb_data, StateData};
@@ -95,7 +95,7 @@ wait_for_xdb(closed, StateData) ->
xdb_data({xmlstreamelement, El}, StateData) ->
- {xmlelement, Name, Attrs, Els} = El,
+ {xmlelement, _Name, Attrs, _Els} = El,
Server = StateData#state.server,
From = jlib:make_jid(StateData#state.user, Server, ""),
NewState =
@@ -107,13 +107,14 @@ xdb_data({xmlstreamelement, El}, StateData) ->
?NS_ROSTER ->
%mod_roster:process_iq(From,
% {"", ?MYNAME, ""},
- % {iq, "", set, ?NS_ROSTER, El}),
+ % #iq{type = set, xmlns = ?NS_ROSTER, sub_el = El}),
mod_roster:set_items(StateData#state.user, El),
StateData;
?NS_VCARD ->
- Res = mod_vcard:process_sm_iq(From,
- jlib:make_jid("", ?MYNAME, ""),
- {iq, "", set, ?NS_VCARD, El}),
+ mod_vcard:process_sm_iq(
+ From,
+ jlib:make_jid("", ?MYNAME, ""),
+ #iq{type = set, xmlns = ?NS_VCARD, sub_el = El}),
StateData;
"jabber:x:offline" ->
process_offline(From, El),
@@ -121,7 +122,7 @@ xdb_data({xmlstreamelement, El}, StateData) ->
%?NS_REGISTER ->
% mod_register:process_iq(
% {"", "", ""}, {"", ?MYNAME, ""},
- % {iq, "", set, ?NS_REGISTER, El}),
+ % #iq{type =set, xmlns = ?NS_REGISTER, xub_el = El}),
% User = xml:get_path_s(El, [{elem, "username"}, cdata]),
% io:format("user ~s~n", [User]),
% StateData;
@@ -131,11 +132,11 @@ xdb_data({xmlstreamelement, El}, StateData) ->
mod_private:process_local_iq(
From,
jlib:make_jid("", ?MYNAME, ""),
- {iq, "", set, ?NS_PRIVATE,
- {xmlelement, "query", [],
- [jlib:remove_attr(
- "j_private_flag",
- jlib:remove_attr("xdbns", El))]}}),
+ #iq{type = set, xmlns = ?NS_PRIVATE,
+ sub_el = {xmlelement, "query", [],
+ [jlib:remove_attr(
+ "j_private_flag",
+ jlib:remove_attr("xdbns", El))]}}),
StateData;
_ ->
io:format("jd2ejd: Unknown namespace \"~s\"~n",
@@ -145,7 +146,7 @@ xdb_data({xmlstreamelement, El}, StateData) ->
end,
{next_state, xdb_data, NewState};
-xdb_data({xmlstreamend, Name}, StateData) ->
+xdb_data({xmlstreamend, _Name}, StateData) ->
{stop, normal, StateData};
xdb_data(closed, StateData) ->
@@ -172,7 +173,7 @@ xdb_data(closed, StateData) ->
%% {next_state, NextStateName, NextStateData, Timeout} |
%% {stop, Reason, NewStateData}
%%----------------------------------------------------------------------
-handle_event(Event, StateName, StateData) ->
+handle_event(_Event, StateName, StateData) ->
{next_state, StateName, StateData}.
%%----------------------------------------------------------------------
@@ -184,11 +185,11 @@ handle_event(Event, StateName, StateData) ->
%% {stop, Reason, NewStateData} |
%% {stop, Reason, Reply, NewStateData}
%%----------------------------------------------------------------------
-handle_sync_event(Event, From, StateName, StateData) ->
+handle_sync_event(_Event, _From, StateName, StateData) ->
Reply = ok,
{reply, Reply, StateName, StateData}.
-code_change(OldVsn, StateName, StateData, Extra) ->
+code_change(_OldVsn, StateName, StateData, _Extra) ->
{ok, StateName, StateData}.
%%----------------------------------------------------------------------
@@ -205,7 +206,7 @@ handle_info(_, StateName, StateData) ->
%% Purpose: Shutdown the fsm
%% Returns: any
%%----------------------------------------------------------------------
-terminate(Reason, StateName, StateData) ->
+terminate(Reason, _StateName, StateData) ->
exit(StateData#state.xml_stream_pid, closed),
StateData#state.pid ! {jd2ejd, Reason},
% Profiling
diff --git a/src/jlib.erl b/src/jlib.erl
index 25843312a..e10d5cf07 100644
--- a/src/jlib.erl
+++ b/src/jlib.erl
@@ -343,7 +343,8 @@ iq_query_info({xmlelement, Name, Attrs, Els}) when Name == "iq" ->
XMLNS = xml:get_attr_s("xmlns", Attrs2),
if
XMLNS /= "" ->
- {iq, ID, Type1, XMLNS, {xmlelement, Name2, Attrs2, Els2}};
+ #iq{id = ID, type = Type1, xmlns = XMLNS,
+ sub_el = {xmlelement, Name2, Attrs2, Els2}};
true ->
invalid
end;
@@ -367,7 +368,7 @@ iq_type_to_string(error) -> "error";
iq_type_to_string(_) -> invalid.
-iq_to_xml({iq, ID, Type, _, SubEl}) ->
+iq_to_xml(#iq{id = ID, type = Type, sub_el = SubEl}) ->
if
ID /= "" ->
{xmlelement, "iq",
diff --git a/src/jlib.hrl b/src/jlib.hrl
index 4497ec941..e930a7e52 100644
--- a/src/jlib.hrl
+++ b/src/jlib.hrl
@@ -143,3 +143,8 @@
-record(jid, {user, server, resource,
luser, lserver, lresource}).
+-record(iq, {id = "",
+ type,
+ xmlns = "",
+ sub_el}).
+
diff --git a/src/mod_configure.erl b/src/mod_configure.erl
index fc84ec570..edf552023 100644
--- a/src/mod_configure.erl
+++ b/src/mod_configure.erl
@@ -34,24 +34,26 @@ stop() ->
gen_iq_handler:remove_iq_handler(ejabberd_sm, ?NS_IQDATA).
-process_local_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
+process_local_iq(From, _To, #iq{id = ID, type = Type,
+ xmlns = XMLNS, sub_el = SubEl} = IQ) ->
case acl:match_rule(configure, From) of
deny ->
- {iq, ID, error, XMLNS, [SubEl, ?ERR_NOT_ALLOWED]};
+ IQ#iq{type = error, sub_el = [SubEl, ?ERR_NOT_ALLOWED]};
allow ->
Lang = xml:get_tag_attr_s("xml:lang", SubEl),
case Type of
set ->
case xml:get_tag_attr_s("type", SubEl) of
"cancel" ->
- {iq, ID, result, XMLNS,
- [{xmlelement, "query", [{"xmlns", XMLNS}], []}]};
+ IQ#iq{type = result,
+ sub_el = [{xmlelement, "query",
+ [{"xmlns", XMLNS}], []}]};
"submit" ->
XData = jlib:parse_xdata_submit(SubEl),
case XData of
invalid ->
- {iq, ID, error, XMLNS,
- [SubEl, ?ERR_BAD_REQUEST]};
+ IQ#iq{type = error,
+ sub_el = [SubEl, ?ERR_BAD_REQUEST]};
_ ->
Node =
string:tokens(
@@ -59,32 +61,34 @@ process_local_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
"/"),
case set_form(Node, Lang, XData) of
{result, Res} ->
- {iq, ID, result, XMLNS,
- [{xmlelement, "query",
- [{"xmlns", XMLNS}],
- Res
- }]};
+ IQ#iq{type = result,
+ sub_el =
+ [{xmlelement, "query",
+ [{"xmlns", XMLNS}],
+ Res
+ }]};
{error, Error} ->
- {iq, ID, error, XMLNS,
- [SubEl, Error]}
+ IQ#iq{type = error,
+ sub_el = [SubEl, Error]}
end
end;
_ ->
- {iq, ID, error, XMLNS,
- [SubEl, ?ERR_NOT_ALLOWED]}
+ IQ#iq{type = error,
+ sub_el = [SubEl, ?ERR_NOT_ALLOWED]}
end;
get ->
Node =
string:tokens(xml:get_tag_attr_s("node", SubEl), "/"),
case get_form(Node, Lang) of
{result, Res} ->
- {iq, ID, result, XMLNS,
- [{xmlelement, "query", [{"xmlns", XMLNS}],
- Res
- }]};
+ IQ#iq{type = result,
+ sub_el =
+ [{xmlelement, "query", [{"xmlns", XMLNS}],
+ Res
+ }]};
{error, Error} ->
- {iq, ID, error, XMLNS,
- [SubEl, Error]}
+ IQ#iq{type = error,
+ sub_el = [SubEl, Error]}
end
end
end.
@@ -129,7 +133,7 @@ get_form(["running nodes", ENode, "DB"], Lang) ->
{error, ?ERR_ITEM_NOT_FOUND};
Node ->
case rpc:call(Node, mnesia, system_info, [tables]) of
- {badrpc, Reason} ->
+ {badrpc, _Reason} ->
{error, ?ERR_INTERNAL_SERVER_ERROR};
Tables ->
STables = lists:sort(Tables),
@@ -163,7 +167,7 @@ get_form(["running nodes", ENode, "modules", "stop"], Lang) ->
{error, ?ERR_ITEM_NOT_FOUND};
Node ->
case rpc:call(Node, gen_mod, loaded_modules, []) of
- {badrpc, Reason} ->
+ {badrpc, _Reason} ->
{error, ?ERR_INTERNAL_SERVER_ERROR};
Modules ->
SModules = lists:sort(Modules),
@@ -698,10 +702,11 @@ search_running_node(SNode, [Node | Nodes]) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-process_sm_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
+process_sm_iq(From, To,
+ #iq{type = Type, xmlns = XMLNS, sub_el = SubEl} = IQ) ->
case acl:match_rule(configure, From) of
deny ->
- {iq, ID, error, XMLNS, [SubEl, ?ERR_NOT_ALLOWED]};
+ IQ#iq{type = error, sub_el = [SubEl, ?ERR_NOT_ALLOWED]};
allow ->
#jid{user = User} = To,
Lang = xml:get_tag_attr_s("xml:lang", SubEl),
@@ -709,14 +714,15 @@ process_sm_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
set ->
case xml:get_tag_attr_s("type", SubEl) of
"cancel" ->
- {iq, ID, result, XMLNS,
- [{xmlelement, "query", [{"xmlns", XMLNS}], []}]};
+ IQ#iq{type = result,
+ sub_el = [{xmlelement, "query",
+ [{"xmlns", XMLNS}], []}]};
"submit" ->
XData = jlib:parse_xdata_submit(SubEl),
case XData of
invalid ->
- {iq, ID, error, XMLNS,
- [SubEl, ?ERR_BAD_REQUEST]};
+ IQ#iq{type = error,
+ sub_el = [SubEl, ?ERR_BAD_REQUEST]};
_ ->
Node =
string:tokens(
@@ -725,32 +731,33 @@ process_sm_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
case set_sm_form(
User, Node, Lang, XData) of
{result, Res} ->
- {iq, ID, result, XMLNS,
- [{xmlelement, "query",
- [{"xmlns", XMLNS}],
- Res
- }]};
+ IQ#iq{type = result,
+ sub_el =
+ [{xmlelement, "query",
+ [{"xmlns", XMLNS}],
+ Res
+ }]};
{error, Error} ->
- {iq, ID, error, XMLNS,
- [SubEl, Error]}
+ IQ#iq{type = error,
+ sub_el = [SubEl, Error]}
end
end;
_ ->
- {iq, ID, error, XMLNS,
- [SubEl, ?ERR_NOT_ALLOWED]}
+ IQ#iq{type = error,
+ sub_el = [SubEl, ?ERR_NOT_ALLOWED]}
end;
get ->
Node =
string:tokens(xml:get_tag_attr_s("node", SubEl), "/"),
case get_sm_form(User, Node, Lang) of
{result, Res} ->
- {iq, ID, result, XMLNS,
- [{xmlelement, "query", [{"xmlns", XMLNS}],
- Res
- }]};
+ IQ#iq{type = result,
+ sub_el =
+ [{xmlelement, "query", [{"xmlns", XMLNS}],
+ Res
+ }]};
{error, Error} ->
- {iq, ID, error, XMLNS,
- [SubEl, Error]}
+ IQ#iq{type = error, sub_el = [SubEl, Error]}
end
end
end.
diff --git a/src/mod_configure2.erl b/src/mod_configure2.erl
index d805728d4..6878c061f 100644
--- a/src/mod_configure2.erl
+++ b/src/mod_configure2.erl
@@ -32,16 +32,16 @@ stop() ->
gen_iq_handler:remove_iq_handler(ejabberd_sm, ?NS_IQDATA).
-process_local_iq(From, _To, {iq, ID, Type, XMLNS, SubEl}) ->
+process_local_iq(From, _To, #iq{type = Type, sub_el = SubEl} = IQ) ->
case acl:match_rule(configure, From) of
deny ->
- {iq, ID, error, XMLNS, [SubEl, ?ERR_NOT_ALLOWED]};
+ IQ#iq{type = error, sub_el = [SubEl, ?ERR_NOT_ALLOWED]};
allow ->
%Lang = xml:get_tag_attr_s("xml:lang", SubEl),
case Type of
set ->
- {iq, ID, error, XMLNS,
- [SubEl, ?ERR_FEATURE_NOT_IMPLEMENTED]};
+ IQ#iq{type = error,
+ sub_el = [SubEl, ?ERR_FEATURE_NOT_IMPLEMENTED]};
%case xml:get_tag_attr_s("type", SubEl) of
% "cancel" ->
% {iq, ID, result, XMLNS,
@@ -76,9 +76,9 @@ process_local_iq(From, _To, {iq, ID, Type, XMLNS, SubEl}) ->
get ->
case process_get(SubEl) of
{result, Res} ->
- {iq, ID, result, XMLNS, [Res]};
+ IQ#iq{type = result, sub_el = [Res]};
{error, Error} ->
- {iq, ID, error, XMLNS, [SubEl, Error]}
+ IQ#iq{type = error, sub_el = [SubEl, Error]}
end
end
end.
diff --git a/src/mod_disco.erl b/src/mod_disco.erl
index 612568be0..f0ec53671 100644
--- a/src/mod_disco.erl
+++ b/src/mod_disco.erl
@@ -27,9 +27,10 @@
-include("jlib.hrl").
-define(EMPTY_INFO_RESULT,
- {iq, ID, result, XMLNS, [{xmlelement, "query",
- [{"xmlns", ?NS_DISCO_INFO},
- {"node", SNode}], []}]}).
+ IQ#iq{type = result,
+ sub_el = [{xmlelement, "query",
+ [{"xmlns", ?NS_DISCO_INFO},
+ {"node", SNode}], []}]}).
start(Opts) ->
IQDisc = gen_mod:get_opt(iqdisc, Opts, one_queue),
@@ -72,44 +73,45 @@ unregister_extra_domain(Domain) ->
catch ets:new(disco_extra_domains, [named_table, ordered_set, public]),
ets:delete(disco_extra_domains, Domain).
-process_local_iq_items(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
+process_local_iq_items(From, To, #iq{type = Type, sub_el = SubEl} = IQ) ->
Lang = xml:get_tag_attr_s("xml:lang", SubEl),
case Type of
set ->
- {iq, ID, error, XMLNS, [SubEl, ?ERR_NOT_ALLOWED]};
+ IQ#iq{type = error, sub_el = [SubEl, ?ERR_NOT_ALLOWED]};
get ->
SNode = xml:get_tag_attr_s("node", SubEl),
Node = string:tokens(SNode, "/"),
case acl:match_rule(configure, From) of
deny when Node /= [] ->
- {iq, ID, error, XMLNS, [SubEl, ?ERR_NOT_ALLOWED]};
+ IQ#iq{type = error, sub_el = [SubEl, ?ERR_NOT_ALLOWED]};
deny ->
- {iq, ID, result, XMLNS,
- [{xmlelement, "query",
- [{"xmlns", ?NS_DISCO_ITEMS}],
- get_services_only()
- }]};
+ IQ#iq{type = result,
+ sub_el = [{xmlelement, "query",
+ [{"xmlns", ?NS_DISCO_ITEMS}],
+ get_services_only()
+ }]};
_ ->
case get_local_items(Node, jlib:jid_to_string(To), Lang) of
{result, Res} ->
- {iq, ID, result, XMLNS,
- [{xmlelement, "query",
- [{"xmlns", ?NS_DISCO_ITEMS},
- {"node", SNode}],
- Res
- }]};
+ IQ#iq{type = result,
+ sub_el = [{xmlelement, "query",
+ [{"xmlns", ?NS_DISCO_ITEMS},
+ {"node", SNode}],
+ Res
+ }]};
{error, Error} ->
- {iq, ID, error, XMLNS, [SubEl, Error]}
+ IQ#iq{type = error, sub_el = [SubEl, Error]}
end
end
end.
-process_local_iq_info(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
+process_local_iq_info(From, _To, #iq{type = Type, xmlns = XMLNS,
+ sub_el = SubEl} = IQ) ->
case Type of
set ->
- {iq, ID, error, XMLNS, [SubEl, ?ERR_NOT_ALLOWED]};
+ IQ#iq{type = error, sub_el = [SubEl, ?ERR_NOT_ALLOWED]};
get ->
SNode = xml:get_tag_attr_s("node", SubEl),
Node = string:tokens(SNode, "/"),
@@ -117,17 +119,18 @@ process_local_iq_info(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
{_, []} ->
Features = lists:map(fun feature_to_xml/1,
ets:tab2list(disco_features)),
- {iq, ID, result, XMLNS, [{xmlelement,
- "query",
- [{"xmlns", ?NS_DISCO_INFO}],
- [{xmlelement, "identity",
- [{"category", "service"},
- {"type", "im"},
- {"name", "ejabberd"}], []}] ++
- Features
- }]};
+ IQ#iq{type = result,
+ sub_el = [{xmlelement,
+ "query",
+ [{"xmlns", ?NS_DISCO_INFO}],
+ [{xmlelement, "identity",
+ [{"category", "service"},
+ {"type", "im"},
+ {"name", "ejabberd"}], []}] ++
+ Features
+ }]};
{deny, _} ->
- {iq, ID, error, XMLNS, [SubEl, ?ERR_NOT_ALLOWED]};
+ IQ#iq{type = error, sub_el = [SubEl, ?ERR_NOT_ALLOWED]};
{allow, ["config"]} -> ?EMPTY_INFO_RESULT;
{allow, ["online users"]} -> ?EMPTY_INFO_RESULT;
{allow, ["all users"]} -> ?EMPTY_INFO_RESULT;
@@ -136,56 +139,57 @@ process_local_iq_info(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
{allow, ["running nodes"]} -> ?EMPTY_INFO_RESULT;
{allow, ["stopped nodes"]} -> ?EMPTY_INFO_RESULT;
{allow, ["running nodes", ENode]} ->
- {iq, ID, result, XMLNS, [{xmlelement,
- "query",
- [{"xmlns", XMLNS},
- {"node", SNode}],
- [{xmlelement, "identity",
- [{"category", "ejabberd"},
- {"type", "node"},
- {"name", ENode}], []},
- feature_to_xml({?NS_STATS})
- ]
- }]};
+ IQ#iq{type = result,
+ sub_el = [{xmlelement,
+ "query",
+ [{"xmlns", XMLNS},
+ {"node", SNode}],
+ [{xmlelement, "identity",
+ [{"category", "ejabberd"},
+ {"type", "node"},
+ {"name", ENode}], []},
+ feature_to_xml({?NS_STATS})
+ ]
+ }]};
{allow, ["running nodes", ENode, "DB"]} ->
- {iq, ID, result, XMLNS, [{xmlelement,
- "query",
- [{"xmlns", XMLNS},
- {"node", SNode}],
- [feature_to_xml({?NS_IQDATA})]}]};
+ IQ#iq{type = result,
+ sub_el = [{xmlelement,
+ "query",
+ [{"xmlns", XMLNS},
+ {"node", SNode}],
+ [feature_to_xml({?NS_IQDATA})]}]};
{allow, ["running nodes", ENode, "modules"]} ->
?EMPTY_INFO_RESULT;
{allow, ["running nodes", ENode, "modules", _]} ->
- {iq, ID, result, XMLNS,
- [{xmlelement, "query",
- [{"xmlns", XMLNS},
- {"node", SNode}],
- [feature_to_xml({?NS_IQDATA})]}]};
+ IQ#iq{type = result,
+ sub_el = [{xmlelement, "query",
+ [{"xmlns", XMLNS},
+ {"node", SNode}],
+ [feature_to_xml({?NS_IQDATA})]}]};
{allow, ["running nodes", ENode, "backup"]} ->
?EMPTY_INFO_RESULT;
{allow, ["running nodes", ENode, "backup", _]} ->
- {iq, ID, result, XMLNS,
- [{xmlelement, "query",
- [{"xmlns", XMLNS},
- {"node", SNode}],
- [feature_to_xml({?NS_IQDATA})]}]};
+ IQ#iq{type = result,
+ sub_el = [{xmlelement, "query",
+ [{"xmlns", XMLNS},
+ {"node", SNode}],
+ [feature_to_xml({?NS_IQDATA})]}]};
{allow, ["running nodes", ENode, "import"]} ->
?EMPTY_INFO_RESULT;
{allow, ["running nodes", ENode, "import", _]} ->
- {iq, ID, result, XMLNS,
- [{xmlelement, "query",
- [{"xmlns", XMLNS},
- {"node", SNode}],
- [feature_to_xml({?NS_IQDATA})]}]};
+ IQ#iq{type = result,
+ sub_el = [{xmlelement, "query",
+ [{"xmlns", XMLNS},
+ {"node", SNode}],
+ [feature_to_xml({?NS_IQDATA})]}]};
{allow, ["config", _]} ->
- {iq, ID, result, XMLNS,
- [{xmlelement, "query",
- [{"xmlns", XMLNS},
- {"node", SNode}],
- [feature_to_xml({?NS_IQDATA})]}]};
+ IQ#iq{type = result,
+ sub_el = [{xmlelement, "query",
+ [{"xmlns", XMLNS},
+ {"node", SNode}],
+ [feature_to_xml({?NS_IQDATA})]}]};
_ ->
- {iq, ID, error, XMLNS,
- [SubEl, ?ERR_ITEM_NOT_FOUND]}
+ IQ#iq{type = error, sub_el = [SubEl, ?ERR_ITEM_NOT_FOUND]}
end
end.
@@ -452,42 +456,42 @@ get_stopped_nodes(Lang) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-process_sm_iq_items(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
+process_sm_iq_items(From, To, #iq{type = Type, sub_el = SubEl} = IQ) ->
#jid{user = User} = To,
case {acl:match_rule(configure, From), Type} of
{deny, _} ->
- {iq, ID, error, XMLNS, [SubEl, ?ERR_NOT_ALLOWED]};
+ IQ#iq{type = error, sub_el = [SubEl, ?ERR_NOT_ALLOWED]};
{allow, set} ->
- {iq, ID, error, XMLNS, [SubEl, ?ERR_NOT_ALLOWED]};
+ IQ#iq{type = error, sub_el = [SubEl, ?ERR_NOT_ALLOWED]};
{allow, get} ->
case xml:get_tag_attr_s("node", SubEl) of
"" ->
- {iq, ID, result, XMLNS,
- [{xmlelement, "query", [{"xmlns", ?NS_DISCO_ITEMS}],
- get_user_resources(User)
- }]};
+ IQ#iq{type = result,
+ sub_el = [{xmlelement, "query",
+ [{"xmlns", ?NS_DISCO_ITEMS}],
+ get_user_resources(User)
+ }]};
_ ->
- {iq, ID, error, XMLNS,
- [SubEl, ?ERR_ITEM_NOT_FOUND]}
+ IQ#iq{type = error, sub_el = [SubEl, ?ERR_ITEM_NOT_FOUND]}
end
end.
-process_sm_iq_info(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
+process_sm_iq_info(From, To, #iq{type = Type, xmlns = XMLNS,
+ sub_el = SubEl} = IQ) ->
case {acl:match_rule(configure, From), Type} of
{deny, _} ->
- {iq, ID, error, XMLNS, [SubEl, ?ERR_NOT_ALLOWED]};
+ IQ#iq{type = error, sub_el = [SubEl, ?ERR_NOT_ALLOWED]};
{allow, set} ->
- {iq, ID, error, XMLNS, [SubEl, ?ERR_NOT_ALLOWED]};
+ IQ#iq{type = error, sub_el = [SubEl, ?ERR_NOT_ALLOWED]};
{allow, get} ->
case xml:get_tag_attr_s("node", SubEl) of
"" ->
- {iq, ID, result, XMLNS,
- [{xmlelement, "query", [{"xmlns", XMLNS}],
- [feature_to_xml({?NS_IQDATA})]}]};
+ IQ#iq{type = result,
+ sub_el = [{xmlelement, "query", [{"xmlns", XMLNS}],
+ [feature_to_xml({?NS_IQDATA})]}]};
_ ->
- {iq, ID, error, XMLNS,
- [SubEl, ?ERR_FEATURE_NOT_IMPLEMENTED]}
+ IQ#iq{type = error, sub_el = [SubEl, ?ERR_ITEM_NOT_FOUND]}
end
end.
diff --git a/src/mod_irc/mod_irc.erl b/src/mod_irc/mod_irc.erl
index 5af53ae09..8e70f4d9a 100644
--- a/src/mod_irc/mod_irc.erl
+++ b/src/mod_irc/mod_irc.erl
@@ -63,20 +63,24 @@ do_route(Host, From, To, Packet) ->
case Resource of
"" ->
case jlib:iq_query_info(Packet) of
- {iq, ID, get, ?NS_DISCO_INFO = XMLNS, SubEl} ->
- Res = {iq, ID, result, XMLNS,
- [{xmlelement, "query",
- [{"xmlns", XMLNS}],
- iq_disco()}]},
+ #iq{type = get, xmlns = ?NS_DISCO_INFO = XMLNS,
+ sub_el = SubEl} = IQ ->
+ Res = IQ#iq{type = result,
+ sub_el = [{xmlelement, "query",
+ [{"xmlns", XMLNS}],
+ iq_disco()}]},
ejabberd_router:route(To,
From,
jlib:iq_to_xml(Res));
- {iq, ID, Type, ?NS_IQDATA = XMLNS, SubEl} ->
- iq_data(From, To, ID, XMLNS, Type, SubEl);
- _ ->
+ #iq{type = Type, xmlns = ?NS_IQDATA,
+ sub_el = SubEl} = IQ ->
+ iq_data(From, To, IQ);
+ #iq{} = IQ ->
Err = jlib:make_error_reply(
- Packet, ?ERR_SERVICE_UNAVAILABLE),
- ejabberd_router:route(To, From, Err)
+ Packet, ?ERR_FEATURE_NOT_IMPLEMENTED),
+ ejabberd_router:route(To, From, Err);
+ _ ->
+ ok
end;
_ ->
Err = jlib:make_error_reply(Packet, ?ERR_BAD_REQUEST),
@@ -155,8 +159,8 @@ iq_disco() ->
-iq_data(From, To, ID, XMLNS, Type, SubEl) ->
- case catch process_iq_data(From, To, ID, XMLNS, Type, SubEl) of
+iq_data(From, To, #iq{type = Type} = IQ) ->
+ case catch process_iq_data(From, To, IQ) of
{'EXIT', Reason} ->
?ERROR_MSG("~p", [Reason]);
ResIQ ->
@@ -170,20 +174,22 @@ iq_data(From, To, ID, XMLNS, Type, SubEl) ->
end.
-process_iq_data(From, To, ID, XMLNS, Type, SubEl) ->
+process_iq_data(From, To,
+ #iq{type = Type, xmlns = XMLNS, sub_el = SubEl} = IQ) ->
Lang = xml:get_tag_attr_s("xml:lang", SubEl),
case Type of
set ->
case xml:get_tag_attr_s("type", SubEl) of
"cancel" ->
- {iq, ID, result, XMLNS,
- [{xmlelement, "query", [{"xmlns", XMLNS}], []}]};
+ IQ#iq{type = result,
+ sub_el = [{xmlelement, "query",
+ [{"xmlns", XMLNS}], []}]};
"submit" ->
XData = jlib:parse_xdata_submit(SubEl),
case XData of
invalid ->
- {iq, ID, error, XMLNS,
- [SubEl, ?ERR_BAD_REQUEST]};
+ IQ#iq{type = error,
+ sub_el = [SubEl, ?ERR_BAD_REQUEST]};
_ ->
Node =
string:tokens(
@@ -191,32 +197,32 @@ process_iq_data(From, To, ID, XMLNS, Type, SubEl) ->
"/"),
case set_form(From, Node, Lang, XData) of
{result, Res} ->
- {iq, ID, result, XMLNS,
- [{xmlelement, "query",
- [{"xmlns", XMLNS}],
- Res
- }]};
+ IQ#iq{type = result,
+ sub_el = [{xmlelement, "query",
+ [{"xmlns", XMLNS}],
+ Res
+ }]};
{error, Error} ->
- {iq, ID, error, XMLNS,
- [SubEl, Error]}
+ IQ#iq{type = error,
+ sub_el = [SubEl, Error]}
end
end;
_ ->
- {iq, ID, error, XMLNS,
- [SubEl, ?ERR_NOT_ALLOWED]}
+ IQ#iq{type = error, sub_el = [SubEl, ?ERR_NOT_ALLOWED]}
end;
get ->
Node =
string:tokens(xml:get_tag_attr_s("node", SubEl), "/"),
case get_form(From, Node, Lang) of
{result, Res} ->
- {iq, ID, result, XMLNS,
- [{xmlelement, "query", [{"xmlns", XMLNS}],
- Res
- }]};
+ IQ#iq{type = result,
+ sub_el = [{xmlelement, "query",
+ [{"xmlns", XMLNS}],
+ Res
+ }]};
{error, Error} ->
- {iq, ID, error, XMLNS,
- [SubEl, Error]}
+ IQ#iq{type = error,
+ sub_el = [SubEl, Error]}
end
end.
diff --git a/src/mod_irc/mod_irc_connection.erl b/src/mod_irc/mod_irc_connection.erl
index 079e5af73..c32fa3d7a 100644
--- a/src/mod_irc/mod_irc_connection.erl
+++ b/src/mod_irc/mod_irc_connection.erl
@@ -294,29 +294,28 @@ handle_info({route_chan, Channel, Resource,
To = {lists:concat([Channel, "%", StateData#state.server]),
StateData#state.myname, StateData#state.nick},
case jlib:iq_query_info(El) of
- {iq, ID, Type, ?NS_MUC_ADMIN = XMLNS, SubEl} ->
- iq_admin(StateData, Channel,
- From,
- To,
- ID, XMLNS, Type, SubEl);
- {iq, ID, get, ?NS_VERSION = XMLNS, SubEl} ->
+ #iq{xmlns = ?NS_MUC_ADMIN} = IQ ->
+ iq_admin(StateData, Channel, From, To, IQ);
+ #iq{xmlns = ?NS_VERSION} ->
Res = io_lib:format("PRIVMSG ~s :\001VERSION\001\r\n",
[Resource]),
?SEND(Res),
Err = jlib:make_error_reply(
El, ?ERR_FEATURE_NOT_IMPLEMENTED),
ejabberd_router:route(To, From, Err);
- {iq, ID, get, ?NS_TIME = XMLNS, SubEl} ->
+ #iq{xmlns = ?NS_TIME} ->
Res = io_lib:format("PRIVMSG ~s :\001TIME\001\r\n",
[Resource]),
?SEND(Res),
Err = jlib:make_error_reply(
El, ?ERR_FEATURE_NOT_IMPLEMENTED),
ejabberd_router:route(To, From, Err);
- _ ->
+ #iq{} ->
Err = jlib:make_error_reply(
El, ?ERR_FEATURE_NOT_IMPLEMENTED),
- ejabberd_router:route(To, From, Err)
+ ejabberd_router:route(To, From, Err);
+ _ ->
+ ok
end,
{next_state, StateName, StateData};
@@ -976,7 +975,8 @@ remove_element(E, Set) ->
-iq_admin(StateData, Channel, From, To, ID, XMLNS, Type, SubEl) ->
+iq_admin(StateData, Channel, From, To,
+ #iq{type = Type, xmlns = XMLNS, sub_el = SubEl} = IQ) ->
case catch process_iq_admin(StateData, Channel, Type, SubEl) of
{'EXIT', Reason} ->
?ERROR_MSG("~p", [Reason]);
@@ -985,14 +985,14 @@ iq_admin(StateData, Channel, From, To, ID, XMLNS, Type, SubEl) ->
Res /= ignore ->
ResIQ = case Res of
{result, ResEls} ->
- {iq, ID, result, XMLNS,
- [{xmlelement, "query",
- [{"xmlns", XMLNS}],
- ResEls
- }]};
+ IQ#iq{type = result,
+ sub_el = [{xmlelement, "query",
+ [{"xmlns", XMLNS}],
+ ResEls
+ }]};
{error, Error} ->
- {iq, ID, error, XMLNS,
- [SubEl, Error]}
+ IQ#iq{type = error,
+ sub_el = [SubEl, Error]}
end,
ejabberd_router:route(To, From,
jlib:iq_to_xml(ResIQ));
diff --git a/src/mod_last.erl b/src/mod_last.erl
index ef7a61b9a..ecda02719 100644
--- a/src/mod_last.erl
+++ b/src/mod_last.erl
@@ -38,25 +38,24 @@ start(Opts) ->
stop() ->
gen_iq_handler:remove_iq_handler(ejabberd_local, ?NS_LAST).
-process_local_iq(_From, _To, {iq, ID, Type, XMLNS, SubEl}) ->
+process_local_iq(_From, _To, #iq{type = Type, sub_el = SubEl} = IQ) ->
case Type of
set ->
- {iq, ID, error, XMLNS,
- [SubEl, ?ERR_NOT_ALLOWED]};
+ IQ#iq{type = error, sub_el = [SubEl, ?ERR_NOT_ALLOWED]};
get ->
Sec = trunc(element(1, erlang:statistics(wall_clock))/1000),
- {iq, ID, result, XMLNS,
- [{xmlelement, "query",
- [{"xmlns", ?NS_LAST},
- {"seconds", integer_to_list(Sec)}],
- []}]}
+ IQ#iq{type = result,
+ sub_el = [{xmlelement, "query",
+ [{"xmlns", ?NS_LAST},
+ {"seconds", integer_to_list(Sec)}],
+ []}]}
end.
-process_sm_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
+process_sm_iq(From, To, #iq{type = Type, sub_el = SubEl} = IQ) ->
case Type of
set ->
- {iq, ID, error, XMLNS, [SubEl, ?ERR_NOT_ALLOWED]};
+ IQ#iq{type = error, sub_el = [SubEl, ?ERR_NOT_ALLOWED]};
get ->
User = To#jid.luser,
{Subscription, _Groups} =
@@ -65,7 +64,7 @@ process_sm_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
(Subscription == both) or (Subscription == from) ->
case catch mod_privacy:get_user_list(User) of
{'EXIT', _Reason} ->
- get_last(ID, XMLNS, SubEl, User);
+ get_last(IQ, SubEl, User);
List ->
case mod_privacy:check_packet(
User, List,
@@ -73,32 +72,33 @@ process_sm_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
{xmlelement, "presence", [], []}},
out) of
allow ->
- get_last(ID, XMLNS, SubEl, User);
+ get_last(IQ, SubEl, User);
deny ->
- {iq, ID, error, XMLNS,
- [SubEl, ?ERR_NOT_ALLOWED]}
+ IQ#iq{type = error,
+ sub_el = [SubEl, ?ERR_NOT_ALLOWED]}
end
end;
true ->
- {iq, ID, error, XMLNS, [SubEl, ?ERR_NOT_ALLOWED]}
+ IQ#iq{type = error,
+ sub_el = [SubEl, ?ERR_NOT_ALLOWED]}
end
end.
-get_last(ID, XMLNS, SubEl, LUser) ->
+get_last(IQ, SubEl, LUser) ->
case catch mnesia:dirty_read(last_activity, LUser) of
{'EXIT', _Reason} ->
- {iq, ID, error, XMLNS, [SubEl, ?ERR_INTERNAL_SERVER_ERROR]};
+ IQ#iq{type = error, sub_el = [SubEl, ?ERR_INTERNAL_SERVER_ERROR]};
[] ->
- {iq, ID, error, XMLNS, [SubEl, ?ERR_SERVICE_UNAVAILABLE]};
+ IQ#iq{type = error, sub_el = [SubEl, ?ERR_SERVICE_UNAVAILABLE]};
[#last_activity{timestamp = TimeStamp}] ->
{MegaSecs, Secs, _MicroSecs} = now(),
TimeStamp2 = MegaSecs * 1000000 + Secs,
Sec = TimeStamp2 - TimeStamp,
- {iq, ID, result, XMLNS,
- [{xmlelement, "query",
- [{"xmlns", ?NS_LAST},
- {"seconds", integer_to_list(Sec)}],
- []}]}
+ IQ#iq{type = result,
+ sub_el = [{xmlelement, "query",
+ [{"xmlns", ?NS_LAST},
+ {"seconds", integer_to_list(Sec)}],
+ []}]}
end.
diff --git a/src/mod_muc/mod_muc.erl b/src/mod_muc/mod_muc.erl
index 7f1c5360c..cda26eb67 100644
--- a/src/mod_muc/mod_muc.erl
+++ b/src/mod_muc/mod_muc.erl
@@ -19,7 +19,7 @@
store_room/2,
restore_room/1,
forget_room/1,
- process_iq_disco_items/5,
+ process_iq_disco_items/4,
can_use_nick/2]).
-include("ejabberd.hrl").
@@ -84,36 +84,44 @@ do_route(Host, From, To, Packet) ->
case Name of
"iq" ->
case jlib:iq_query_info(Packet) of
- {iq, ID, get, ?NS_DISCO_INFO = XMLNS, SubEl} ->
- Res = {iq, ID, result, XMLNS,
- [{xmlelement, "query",
- [{"xmlns", XMLNS}],
- iq_disco_info()}]},
+ #iq{type = get, xmlns = ?NS_DISCO_INFO = XMLNS,
+ sub_el = SubEl} = IQ ->
+ Res = IQ#iq{type = result,
+ sub_el = [{xmlelement, "query",
+ [{"xmlns", XMLNS}],
+ iq_disco_info()}]},
ejabberd_router:route(To,
From,
jlib:iq_to_xml(Res));
- {iq, ID, get, ?NS_DISCO_ITEMS = XMLNS, SubEl} ->
+ #iq{type = get,
+ xmlns = ?NS_DISCO_ITEMS} = IQ ->
spawn(?MODULE,
process_iq_disco_items,
- [Host, From, To, ID, SubEl]);
- {iq, ID, get, ?NS_REGISTER = XMLNS, SubEl} ->
+ [Host, From, To, IQ]);
+ #iq{type = get,
+ xmlns = ?NS_REGISTER = XMLNS,
+ sub_el = SubEl} = IQ ->
Lang = xml:get_tag_attr_s(
"xml:lang", SubEl),
- Res = {iq, ID, result, XMLNS,
- [{xmlelement, "query",
- [{"xmlns", XMLNS}],
- iq_get_register_info(
- From, Lang)}]},
+ Res = IQ#iq{type = result,
+ sub_el =
+ [{xmlelement, "query",
+ [{"xmlns", XMLNS}],
+ iq_get_register_info(
+ From, Lang)}]},
ejabberd_router:route(To,
From,
jlib:iq_to_xml(Res));
- {iq, ID, set, ?NS_REGISTER = XMLNS, SubEl} ->
+ #iq{type = set,
+ xmlns = ?NS_REGISTER = XMLNS,
+ sub_el = SubEl} = IQ ->
case process_iq_register_set(From, SubEl) of
{result, IQRes} ->
- Res = {iq, ID, result, XMLNS,
- [{xmlelement, "query",
- [{"xmlns", XMLNS}],
- IQRes}]},
+ Res = IQ#iq{type = result,
+ sub_el =
+ [{xmlelement, "query",
+ [{"xmlns", XMLNS}],
+ IQRes}]},
ejabberd_router:route(
To, From, jlib:iq_to_xml(Res));
{error, Error} ->
@@ -122,23 +130,26 @@ do_route(Host, From, To, Packet) ->
ejabberd_router:route(
To, From, Err)
end;
- {iq, ID, get, ?NS_VCARD = XMLNS, SubEl} ->
+ #iq{type = get,
+ xmlns = ?NS_VCARD = XMLNS,
+ sub_el = SubEl} = IQ ->
Lang = xml:get_tag_attr_s(
"xml:lang", SubEl),
- Res = {iq, ID, result, XMLNS,
- [{xmlelement, "query",
- [{"xmlns", XMLNS}],
- iq_get_vcard(Lang)}]},
+ Res = IQ#iq{type = result,
+ sub_el =
+ [{xmlelement, "query",
+ [{"xmlns", XMLNS}],
+ iq_get_vcard(Lang)}]},
ejabberd_router:route(To,
From,
jlib:iq_to_xml(Res));
- reply ->
- ok;
- _ ->
+ #iq{} ->
Err = jlib:make_error_reply(
Packet,
?ERR_FEATURE_NOT_IMPLEMENTED),
- ejabberd_router:route(To, From, Err)
+ ejabberd_router:route(To, From, Err);
+ _ ->
+ ok
end;
"message" ->
case xml:get_attr_s("type", Attrs) of
@@ -265,11 +276,11 @@ iq_disco_info() ->
{xmlelement, "feature", [{"var", ?NS_VCARD}], []}].
-process_iq_disco_items(Host, From, To, ID, SubEl) ->
- Res = {iq, ID, result, ?NS_DISCO_ITEMS,
- [{xmlelement, "query",
- [{"xmlns", ?NS_DISCO_ITEMS}],
- iq_disco_items(Host, From)}]},
+process_iq_disco_items(Host, From, To, IQ) ->
+ Res = IQ#iq{type = result,
+ sub_el = [{xmlelement, "query",
+ [{"xmlns", ?NS_DISCO_ITEMS}],
+ iq_disco_items(Host, From)}]},
ejabberd_router:route(To,
From,
jlib:iq_to_xml(Res)).
diff --git a/src/mod_muc/mod_muc_room.erl b/src/mod_muc/mod_muc_room.erl
index f9affed9d..d8af30c30 100644
--- a/src/mod_muc/mod_muc_room.erl
+++ b/src/mod_muc/mod_muc_room.erl
@@ -271,7 +271,7 @@ normal_state({route, From, "",
{xmlelement, "iq", Attrs, Els} = Packet},
StateData) ->
case jlib:iq_query_info(Packet) of
- {iq, ID, Type, XMLNS, SubEl} when
+ #iq{type = Type, xmlns = XMLNS, sub_el = SubEl} = IQ when
(XMLNS == ?NS_MUC_ADMIN) or
(XMLNS == ?NS_MUC_OWNER) or
(XMLNS == ?NS_DISCO_INFO) or
@@ -289,14 +289,15 @@ normal_state({route, From, "",
{IQRes, NewStateData} =
case Res1 of
{result, Res, SD} ->
- {{iq, ID, result, XMLNS,
- [{xmlelement, "query", [{"xmlns", XMLNS}],
- Res
- }]},
+ {IQ#iq{type = result,
+ sub_el = [{xmlelement, "query",
+ [{"xmlns", XMLNS}],
+ Res
+ }]},
SD};
{error, Error} ->
- {{iq, ID, error, XMLNS,
- [SubEl, Error]},
+ {IQ#iq{type = error,
+ sub_el = [SubEl, Error]},
StateData}
end,
ejabberd_router:route(StateData#state.jid,
diff --git a/src/mod_privacy.erl b/src/mod_privacy.erl
index 31e9f99fd..8ddb12b69 100644
--- a/src/mod_privacy.erl
+++ b/src/mod_privacy.erl
@@ -49,18 +49,9 @@ start(Opts) ->
gen_iq_handler:add_iq_handler(ejabberd_sm, ?NS_PRIVACY,
?MODULE, process_iq, IQDisc).
-%process_local_iq(From, To, {iq, _, Type, _, _} = IQ) ->
-% case Type of
-% set ->
-% process_iq_set(From, To, IQ);
-% get ->
-% process_iq_get(From, To, IQ)
-% end.
-%
-%
-%
-process_iq(From, To, IQ) ->
- {iq, ID, Type, XMLNS, SubEl} = IQ,
+
+process_iq(From, _To, IQ) ->
+ #iq{type = Type, sub_el = SubEl} = IQ,
#jid{lserver = Server} = From,
Res =
case ?MYNAME of
@@ -77,20 +68,20 @@ process_iq(From, To, IQ) ->
end,
case Res of
{result, IQRes} ->
- {iq, ID, result, XMLNS, IQRes};
+ IQ#iq{type = result, sub_el = IQRes};
{error, Error} ->
- {iq, ID, error, XMLNS, [SubEl, Error]}
+ IQ#iq{type = error, sub_el = [SubEl, Error]}
end.
-process_iq_get(From, To, {iq, ID, Type, XMLNS, SubEl},
+process_iq_get(From, _To, #iq{sub_el = SubEl},
#userlist{name = Active}) ->
#jid{luser = LUser} = From,
{xmlelement, _, _, Els} = SubEl,
case xml:remove_cdata(Els) of
[] ->
process_lists_get(LUser, Active);
- [{xmlelement, Name, Attrs, SubEls}] ->
+ [{xmlelement, Name, Attrs, _SubEls}] ->
case Name of
"list" ->
ListName = xml:get_attr("name", Attrs),
@@ -105,7 +96,7 @@ process_iq_get(From, To, {iq, ID, Type, XMLNS, SubEl},
process_lists_get(LUser, Active) ->
case catch mnesia:dirty_read(privacy, LUser) of
- {'EXIT', Reason} ->
+ {'EXIT', _Reason} ->
{error, ?ERR_INTERNAL_SERVER_ERROR};
[] ->
{result, [{xmlelement, "query", [{"xmlns", ?NS_PRIVACY}], []}]};
@@ -144,7 +135,7 @@ process_lists_get(LUser, Active) ->
process_list_get(LUser, {value, Name}) ->
case catch mnesia:dirty_read(privacy, LUser) of
- {'EXIT', Reason} ->
+ {'EXIT', _Reason} ->
{error, ?ERR_INTERNAL_SERVER_ERROR};
[] ->
{error, ?ERR_ITEM_NOT_FOUND};
@@ -248,7 +239,7 @@ list_to_action(S) ->
-process_iq_set(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
+process_iq_set(From, _To, #iq{sub_el = SubEl}) ->
#jid{luser = LUser} = From,
{xmlelement, _, _, Els} = SubEl,
case xml:remove_cdata(Els) of
@@ -318,7 +309,7 @@ process_active_set(LUser, {value, Name}) ->
case catch mnesia:dirty_read(privacy, LUser) of
[] ->
{error, ?ERR_ITEM_NOT_FOUND};
- [#privacy{lists = Lists} = P] ->
+ [#privacy{lists = Lists}] ->
case lists:keysearch(Name, 1, Lists) of
{value, {_, List}} ->
{result, [], #userlist{name = Name, list = List}};
@@ -327,7 +318,7 @@ process_active_set(LUser, {value, Name}) ->
end
end;
-process_active_set(LUser, false) ->
+process_active_set(_LUser, false) ->
{result, [], #userlist{}}.
@@ -490,7 +481,7 @@ parse_items([{xmlelement, "item", Attrs, SubEls} | Els], Res) ->
false
end;
-parse_items(_, Res) ->
+parse_items(_, _Res) ->
false.
@@ -509,7 +500,7 @@ parse_matches1(Item, [{xmlelement, "presence-in", _, _} | Els]) ->
parse_matches1(Item#listitem{match_presence_in = true}, Els);
parse_matches1(Item, [{xmlelement, "presence-out", _, _} | Els]) ->
parse_matches1(Item#listitem{match_presence_out = true}, Els);
-parse_matches1(Item, [{xmlelement, _, _, _} | Els]) ->
+parse_matches1(_Item, [{xmlelement, _, _, _} | _Els]) ->
false.
@@ -584,7 +575,7 @@ check_packet(User,
end
end.
-check_packet_aux([], PType, JID, Subscription, Groups) ->
+check_packet_aux([], _PType, _JID, _Subscription, _Groups) ->
allow;
check_packet_aux([Item | List], PType, JID, Subscription, Groups) ->
#listitem{type = Type, value = Value, action = Action} = Item,
diff --git a/src/mod_private.erl b/src/mod_private.erl
index a4ec97d1d..868d0ef9e 100644
--- a/src/mod_private.erl
+++ b/src/mod_private.erl
@@ -34,10 +34,10 @@ stop() ->
gen_iq_handler:remove_iq_handler(ejabberd_local, ?NS_PRIVATE).
-process_local_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
+process_local_iq(From, _To, #iq{type = Type, sub_el = SubEl} = IQ) ->
#jid{luser = LUser, lserver = LServer} = From,
case ?MYNAME of
- Server ->
+ LServer ->
{xmlelement, Name, Attrs, Els} = SubEl,
case Type of
set ->
@@ -48,24 +48,26 @@ process_local_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
end, Els)
end,
mnesia:transaction(F),
- {iq, ID, result, XMLNS, [{xmlelement, Name, Attrs, []}]};
+ IQ#iq{type = result,
+ sub_el = [{xmlelement, Name, Attrs, []}]};
get ->
case catch get_data(LUser, Els) of
- {'EXIT', Reason} ->
- {iq, ID, error, XMLNS,
- [SubEl, ?ERR_INTERNAL_SERVER_ERROR]};
+ {'EXIT', _Reason} ->
+ IQ#iq{type = error,
+ sub_el = [SubEl,
+ ?ERR_INTERNAL_SERVER_ERROR]};
Res ->
- {iq, ID, result, XMLNS,
- [{xmlelement, Name, Attrs, Res}]}
+ IQ#iq{type = result,
+ sub_el = [{xmlelement, Name, Attrs, Res}]}
end
end;
_ ->
- {iq, ID, error, XMLNS, [SubEl, ?ERR_NOT_ALLOWED]}
+ IQ#iq{type = error, sub_el = [SubEl, ?ERR_NOT_ALLOWED]}
end.
set_data(LUser, El) ->
case El of
- {xmlelement, Name, Attrs, Els} ->
+ {xmlelement, _Name, Attrs, _Els} ->
XMLNS = xml:get_attr_s("xmlns", Attrs),
case XMLNS of
"" ->
@@ -81,11 +83,11 @@ set_data(LUser, El) ->
get_data(LUser, Els) ->
get_data(LUser, Els, []).
-get_data(LUser, [], Res) ->
+get_data(_LUser, [], Res) ->
lists:reverse(Res);
get_data(LUser, [El | Els], Res) ->
case El of
- {xmlelement, Name, Attrs, _} ->
+ {xmlelement, _Name, Attrs, _} ->
XMLNS = xml:get_attr_s("xmlns", Attrs),
case mnesia:dirty_read(private_storage, {LUser, XMLNS}) of
[R] ->
diff --git a/src/mod_pubsub/mod_pubsub.erl b/src/mod_pubsub/mod_pubsub.erl
index 7604f5635..98125e0c6 100644
--- a/src/mod_pubsub/mod_pubsub.erl
+++ b/src/mod_pubsub/mod_pubsub.erl
@@ -92,27 +92,29 @@ do_route(Host, From, To, Packet) ->
case Name of
"iq" ->
case jlib:iq_query_info(Packet) of
- {iq, ID, get, ?NS_DISCO_INFO = XMLNS, SubEl} ->
+ #iq{type = get, xmlns = ?NS_DISCO_INFO = XMLNS,
+ sub_el = SubEl} = IQ ->
{xmlelement, _, QAttrs, _} = SubEl,
Node = xml:get_attr_s("node", QAttrs),
- Res = {iq, ID, result, XMLNS,
- [{xmlelement, "query",
- QAttrs,
- iq_disco_info(Node)}]},
+ Res = IQ#iq{type = result,
+ sub_el = [{xmlelement, "query",
+ QAttrs,
+ iq_disco_info(Node)}]},
ejabberd_router:route(To,
From,
jlib:iq_to_xml(Res));
- {iq, ID, get, ?NS_DISCO_ITEMS = XMLNS, SubEl} ->
+ #iq{type = get, xmlns = ?NS_DISCO_ITEMS = XMLNS,
+ sub_el = SubEl} = IQ ->
{xmlelement, _, QAttrs, _} = SubEl,
Node = xml:get_attr_s("node", QAttrs),
Res =
case iq_disco_items(Host, From, Node) of
{result, IQRes} ->
jlib:iq_to_xml(
- {iq, ID, result, XMLNS,
- [{xmlelement, "query",
- QAttrs,
- IQRes}]});
+ IQ#iq{type = result,
+ sub_el = [{xmlelement, "query",
+ QAttrs,
+ IQRes}]});
{error, Error} ->
jlib:make_error_reply(
Packet, Error)
@@ -144,35 +146,37 @@ do_route(Host, From, To, Packet) ->
% ejabberd_router:route(
% To, From, Err)
% end;
- {iq, ID, Type, ?NS_PUBSUB = XMLNS, SubEl} ->
+ #iq{type = Type, xmlns = ?NS_PUBSUB = XMLNS,
+ sub_el = SubEl} = IQ ->
Res =
case iq_pubsub(Host, From, Type, SubEl) of
{result, IQRes} ->
jlib:iq_to_xml(
- {iq, ID, result, XMLNS,
- IQRes});
+ IQ#iq{type = result,
+ sub_el = IQRes});
{error, Error} ->
jlib:make_error_reply(
Packet, Error)
end,
ejabberd_router:route(To, From, Res);
- {iq, ID, get, ?NS_VCARD = XMLNS, SubEl} ->
+ #iq{type = get, xmlns = ?NS_VCARD = XMLNS,
+ sub_el = SubEl} = IQ ->
Lang = xml:get_tag_attr_s(
"xml:lang", SubEl),
- Res = {iq, ID, result, XMLNS,
- [{xmlelement, "query",
- [{"xmlns", XMLNS}],
- iq_get_vcard(Lang)}]},
+ Res = IQ#iq{type = result,
+ sub_el = [{xmlelement, "query",
+ [{"xmlns", XMLNS}],
+ iq_get_vcard(Lang)}]},
ejabberd_router:route(To,
From,
jlib:iq_to_xml(Res));
- reply ->
- ok;
- _ ->
+ #iq{} ->
Err = jlib:make_error_reply(
Packet,
?ERR_FEATURE_NOT_IMPLEMENTED),
- ejabberd_router:route(To, From, Err)
+ ejabberd_router:route(To, From, Err);
+ _ ->
+ ok
end;
_ ->
ok
diff --git a/src/mod_register.erl b/src/mod_register.erl
index f900a9ef0..a84c144aa 100644
--- a/src/mod_register.erl
+++ b/src/mod_register.erl
@@ -28,7 +28,7 @@ start(Opts) ->
init() ->
ok.
-process_iq(From, _To, {iq, ID, Type, XMLNS, SubEl}) ->
+process_iq(From, _To, #iq{type = Type, sub_el = SubEl} = IQ) ->
case Type of
set ->
UTag = xml:get_subtag(SubEl, "username"),
@@ -41,7 +41,7 @@ process_iq(From, _To, {iq, ID, Type, XMLNS, SubEl}) ->
case From of
#jid{user = User, lserver = Server} ->
ejabberd_auth:remove_user(User),
- {iq, ID, result, XMLNS, [SubEl]};
+ IQ#iq{type = result, sub_el = [SubEl]};
_ ->
if
PTag /= false ->
@@ -49,34 +49,35 @@ process_iq(From, _To, {iq, ID, Type, XMLNS, SubEl}) ->
case ejabberd_auth:remove_user(User,
Password) of
ok ->
- {iq, ID, result, XMLNS, [SubEl]};
+ IQ#iq{type = result,
+ sub_el = [SubEl]};
not_allowed ->
- {iq, ID, error, XMLNS,
- [SubEl, ?ERR_NOT_ALLOWED]};
+ IQ#iq{type = error,
+ sub_el =
+ [SubEl, ?ERR_NOT_ALLOWED]};
not_exists ->
- {iq, ID, error, XMLNS,
- [SubEl, {xmlelement,
- "error",
- [{"code", "404"}],
- [{xmlcdata,
- "Not Found"}]}]};
+ IQ#iq{type = error,
+ sub_el =
+ [SubEl, ?ERR_ITEM_NOT_FOUND]};
_ ->
- {iq, ID, error, XMLNS,
- [SubEl,
- ?ERR_INTERNAL_SERVER_ERROR]}
+ IQ#iq{type = error,
+ sub_el =
+ [SubEl,
+ ?ERR_INTERNAL_SERVER_ERROR]}
end;
true ->
- {iq, ID, error, XMLNS,
- [SubEl, ?ERR_BAD_REQUEST]}
+ IQ#iq{type = error,
+ sub_el = [SubEl, ?ERR_BAD_REQUEST]}
end
end;
(UTag == false) and (RTag /= false) ->
case From of
#jid{user = User, lserver = Server} ->
ejabberd_auth:remove_user(User),
- {iq, ID, result, XMLNS, [SubEl]};
+ IQ#iq{type = result, sub_el = [SubEl]};
_ ->
- {iq, ID, error, XMLNS, [SubEl, ?ERR_NOT_ALLOWED]}
+ IQ#iq{type = error,
+ sub_el = [SubEl, ?ERR_NOT_ALLOWED]}
end;
(UTag /= false) and (PTag /= false) ->
User = xml:get_tag_cdata(UTag),
@@ -84,32 +85,34 @@ process_iq(From, _To, {iq, ID, Type, XMLNS, SubEl}) ->
case From of
#jid{user = User, lserver = Server} ->
ejabberd_auth:set_password(User, Password),
- {iq, ID, result, XMLNS, [SubEl]};
+ IQ#iq{type = result, sub_el = [SubEl]};
_ ->
case try_register(User, Password) of
ok ->
- {iq, ID, result, XMLNS, [SubEl]};
+ IQ#iq{type = result, sub_el = [SubEl]};
{error, Error} ->
- {iq, ID, error, XMLNS,
- [SubEl, Error]}
+ IQ#iq{type = error,
+ sub_el = [SubEl, Error]}
end
end;
true ->
- {iq, ID, error, XMLNS,
- [SubEl, ?ERR_BAD_REQUEST]}
+ IQ#iq{type = error,
+ sub_el = [SubEl, ?ERR_BAD_REQUEST]}
end;
get ->
Lang = xml:get_tag_attr_s("xml:lang", SubEl),
- {iq, ID, result, XMLNS, [{xmlelement,
- "query",
- [{"xmlns", "jabber:iq:register"}],
- [{xmlelement, "instructions", [],
- [{xmlcdata,
- translate:translate(Lang,
- "Choose a username and password "
- "to register with this server.")}]},
- {xmlelement, "username", [], []},
- {xmlelement, "password", [], []}]}]}
+ IQ#iq{type = result,
+ sub_el = [{xmlelement,
+ "query",
+ [{"xmlns", "jabber:iq:register"}],
+ [{xmlelement, "instructions", [],
+ [{xmlcdata,
+ translate:translate(
+ Lang,
+ "Choose a username and password "
+ "to register with this server.")}]},
+ {xmlelement, "username", [], []},
+ {xmlelement, "password", [], []}]}]}
end.
diff --git a/src/mod_roster.erl b/src/mod_roster.erl
index 84b469efc..2d0e8882f 100644
--- a/src/mod_roster.erl
+++ b/src/mod_roster.erl
@@ -49,7 +49,7 @@ start(Opts) ->
-ifdef(PSI_ROSTER_WORKAROUND).
process_iq(From, To, IQ) ->
- {iq, ID, _Type, XMLNS, SubEl} = IQ,
+ #iq{sub_el = SubEl} = IQ,
#jid{lserver = LServer} = From,
case ?MYNAME of
LServer ->
@@ -58,26 +58,24 @@ process_iq(From, To, IQ) ->
jlib:iq_to_xml(ResIQ)),
ignore;
_ ->
- {iq, ID, error, XMLNS,
- [SubEl, ?ERR_ITEM_NOT_FOUND]}
+ IQ#iq{type = error, sub_el = [SubEl, ?ERR_ITEM_NOT_FOUND]}
end.
-else.
process_iq(From, To, IQ) ->
- {iq, ID, _Type, XMLNS, SubEl} = IQ,
+ #iq{sub_el = SubEl} = IQ,
#jid{lserver = LServer} = From,
case ?MYNAME of
LServer ->
process_local_iq(From, To, IQ);
_ ->
- {iq, ID, error, XMLNS,
- [SubEl, ?ERR_ITEM_NOT_FOUND]}
+ IQ#iq{type = error, sub_el = [SubEl, ?ERR_ITEM_NOT_FOUND]}
end.
-endif.
-process_local_iq(From, To, {iq, _, Type, _, _} = IQ) ->
+process_local_iq(From, To, #iq{type = Type} = IQ) ->
case Type of
set ->
process_iq_set(From, To, IQ);
@@ -87,7 +85,7 @@ process_local_iq(From, To, {iq, _, Type, _, _} = IQ) ->
-process_iq_get(From, _To, {iq, ID, _Type, XMLNS, SubEl}) ->
+process_iq_get(From, _To, #iq{sub_el = SubEl} = IQ) ->
#jid{luser = LUser} = From,
F = fun() ->
mnesia:index_read(roster, LUser, #roster.user)
@@ -95,12 +93,12 @@ process_iq_get(From, _To, {iq, ID, _Type, XMLNS, SubEl}) ->
case mnesia:transaction(F) of
{atomic, Items} ->
XItems = lists:map(fun item_to_xml/1, Items),
- {iq, ID, result, XMLNS, [{xmlelement, "query",
- [{"xmlns", ?NS_ROSTER}],
- XItems}]};
+ IQ#iq{type = result,
+ sub_el = [{xmlelement, "query",
+ [{"xmlns", ?NS_ROSTER}],
+ XItems}]};
_ ->
- {iq, ID, error, XMLNS,
- [SubEl, ?ERR_INTERNAL_SERVER_ERROR]}
+ IQ#iq{type = error, sub_el = [SubEl, ?ERR_INTERNAL_SERVER_ERROR]}
end.
item_to_xml(Item) ->
@@ -139,10 +137,10 @@ item_to_xml(Item) ->
{xmlelement, "item", Attrs, SubEls}.
-process_iq_set(From, To, {iq, ID, _Type, XMLNS, SubEl}) ->
+process_iq_set(From, To, #iq{sub_el = SubEl} = IQ) ->
{xmlelement, _Name, _Attrs, Els} = SubEl,
lists:foreach(fun(El) -> process_item_set(From, To, El) end, Els),
- {iq, ID, result, XMLNS, []}.
+ IQ#iq{type = result, sub_el = []}.
process_item_set(From, To, {xmlelement, _Name, Attrs, Els}) ->
JID1 = jlib:string_to_jid(xml:get_attr_s("jid", Attrs)),
@@ -287,27 +285,27 @@ push_item(User, From, Item) ->
% TODO: don't push to those who not load roster
-ifdef(PSI_ROSTER_WORKAROUND).
-push_item(User, Resource, From, Item) ->
- ResIQ = {iq, "", set, ?NS_ROSTER,
- [{xmlelement, "query",
- [{"xmlns", ?NS_ROSTER}],
- [item_to_xml(Item)]}]},
- ejabberd_router ! {route,
- jlib:make_jid(User, ?MYNAME, Resource),
- jlib:make_jid(User, ?MYNAME, Resource),
- jlib:iq_to_xml(ResIQ)}.
+push_item(User, Resource, _From, Item) ->
+ ResIQ = #iq{type = set, xmlns = ?NS_ROSTER,
+ sub_el = [{xmlelement, "query",
+ [{"xmlns", ?NS_ROSTER}],
+ [item_to_xml(Item)]}]},
+ ejabberd_router:route(
+ jlib:make_jid(User, ?MYNAME, Resource),
+ jlib:make_jid(User, ?MYNAME, Resource),
+ jlib:iq_to_xml(ResIQ)).
-else.
push_item(User, Resource, From, Item) ->
- ResIQ = {iq, "", set, ?NS_ROSTER,
- [{xmlelement, "query",
- [{"xmlns", ?NS_ROSTER}],
- [item_to_xml(Item)]}]},
- ejabberd_router ! {route,
- From,
- jlib:make_jid(User, ?MYNAME, Resource),
- jlib:iq_to_xml(ResIQ)}.
+ ResIQ = #iq{type = set, xmlns = ?NS_ROSTER,
+ sub_el = [{xmlelement, "query",
+ [{"xmlns", ?NS_ROSTER}],
+ [item_to_xml(Item)]}]},
+ ejabberd_router:route(
+ From,
+ jlib:make_jid(User, ?MYNAME, Resource),
+ jlib:iq_to_xml(ResIQ)).
-endif.
diff --git a/src/mod_stats.erl b/src/mod_stats.erl
index 09eb18cda..ab76021f6 100644
--- a/src/mod_stats.erl
+++ b/src/mod_stats.erl
@@ -27,11 +27,12 @@ stop() ->
gen_iq_handler:remove_iq_handler(ejabberd_local, ?NS_STATS).
-process_local_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
+process_local_iq(From, To, #iq{id = ID, type = Type,
+ xmlns = XMLNS, sub_el = SubEl} = IQ) ->
Lang = xml:get_tag_attr_s("xml:lang", SubEl),
case Type of
set ->
- {iq, ID, error, XMLNS, [SubEl, ?ERR_NOT_ALLOWED]};
+ IQ#iq{type = error, sub_el = [SubEl, ?ERR_NOT_ALLOWED]};
get ->
{xmlelement, _, Attrs, Els} = SubEl,
Node = string:tokens(xml:get_tag_attr_s("node", SubEl), "/"),
@@ -39,11 +40,12 @@ process_local_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
case get_local_stats(Node, Names) of
{result, Res} ->
- {iq, ID, result, XMLNS,
- [{xmlelement, "query", [{"xmlns", XMLNS}], Res}]};
+ IQ#iq{type = result,
+ sub_el = [{xmlelement, "query",
+ [{"xmlns", XMLNS}],
+ Res}]};
{error, Error} ->
- {iq, ID, error, XMLNS,
- [SubEl, Error]}
+ IQ#iq{type = error, sub_el = [SubEl, Error]}
end
end.
diff --git a/src/mod_time.erl b/src/mod_time.erl
index bcc6b45a8..ee75533d0 100644
--- a/src/mod_time.erl
+++ b/src/mod_time.erl
@@ -28,19 +28,17 @@ start(Opts) ->
stop() ->
gen_iq_handler:remove_iq_handler(ejabberd_local, ?NS_TIME).
-process_local_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
+process_local_iq(_From, _To, #iq{type = Type, sub_el = SubEl} = IQ) ->
case Type of
set ->
- {iq, ID, error, XMLNS,
- [SubEl, ?ERR_NOT_ALLOWED]};
+ IQ#iq{type = error, sub_el = [SubEl, ?ERR_NOT_ALLOWED]};
get ->
UTC = jlib:timestamp_to_iso(calendar:universal_time()),
- {iq, ID, result, XMLNS,
- [{xmlelement, "query",
- [{"xmlns", ?NS_TIME}],
- [{xmlelement, "utc", [],
- [{xmlcdata, UTC}]}
- ]}]}
+ IQ#iq{type = result,
+ sub_el = [{xmlelement, "query",
+ [{"xmlns", ?NS_TIME}],
+ [{xmlelement, "utc", [],
+ [{xmlcdata, UTC}]}]}]}
end.
diff --git a/src/mod_vcard.erl b/src/mod_vcard.erl
index c49728c21..477c9b2cc 100644
--- a/src/mod_vcard.erl
+++ b/src/mod_vcard.erl
@@ -86,39 +86,38 @@ loop() ->
end.
-process_local_iq(_From, _To, {iq, ID, Type, XMLNS, SubEl}) ->
+process_local_iq(_From, _To, #iq{type = Type, sub_el = SubEl} = IQ) ->
case Type of
set ->
- {iq, ID, error, XMLNS, [SubEl, ?ERR_NOT_ALLOWED]};
+ IQ#iq{type = error, sub_el = [SubEl, ?ERR_NOT_ALLOWED]};
get ->
- {iq, ID, result, XMLNS,
- [{xmlelement, "vCard",
- [{"xmlns", ?NS_VCARD}],
- [{xmlelement, "FN", [],
- [{xmlcdata, "ejabberd"}]},
- {xmlelement, "URL", [],
- [{xmlcdata,
- "http://ejabberd.jabberstudio.org/"}]},
- {xmlelement, "DESC", [],
- [{xmlcdata, "Erlang Jabber Server\n"
- "Copyright (c) 2002, 2003 Alexey Shchepin"}]},
- {xmlelement, "BDAY", [],
- [{xmlcdata, "2002-11-16"}]}
- ]}]}
+ IQ#iq{type = result,
+ sub_el = [{xmlelement, "vCard",
+ [{"xmlns", ?NS_VCARD}],
+ [{xmlelement, "FN", [],
+ [{xmlcdata, "ejabberd"}]},
+ {xmlelement, "URL", [],
+ [{xmlcdata,
+ "http://ejabberd.jabberstudio.org/"}]},
+ {xmlelement, "DESC", [],
+ [{xmlcdata, "Erlang Jabber Server\n"
+ "Copyright (c) 2002, 2003 Alexey Shchepin"}]},
+ {xmlelement, "BDAY", [],
+ [{xmlcdata, "2002-11-16"}]}
+ ]}]}
end.
-process_sm_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
+process_sm_iq(From, To, #iq{type = Type, sub_el = SubEl} = IQ) ->
case Type of
set ->
#jid{user = User, lserver = LServer, luser = LUser} = From,
case ?MYNAME of
LServer ->
set_vcard(User, SubEl),
- {iq, ID, result, XMLNS, []};
+ IQ#iq{type = result, sub_el = []};
_ ->
- {iq, ID, error, XMLNS,
- [SubEl, ?ERR_NOT_ALLOWED]}
+ IQ#iq{type = error, sub_el = [SubEl, ?ERR_NOT_ALLOWED]}
end;
get ->
#jid{luser = LUser} = To,
@@ -133,7 +132,7 @@ process_sm_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
{aborted, _Reason} ->
[]
end,
- {iq, ID, result, XMLNS, Els}
+ IQ#iq{type = result, sub_el = Els}
end.
set_vcard(User, VCARD) ->
@@ -238,7 +237,7 @@ do_route(From, To, Packet) ->
true ->
IQ = jlib:iq_query_info(Packet),
case IQ of
- {iq, ID, Type, ?NS_SEARCH, SubEl} ->
+ #iq{type = Type, xmlns = ?NS_SEARCH, sub_el = SubEl} ->
Lang = xml:get_tag_attr_s("xml:lang", SubEl),
case Type of
set ->
@@ -259,64 +258,71 @@ do_route(From, To, Packet) ->
Err);
_ ->
ResIQ =
- {iq, ID, result, ?NS_SEARCH,
- [{xmlelement,
- "query",
- [{"xmlns", ?NS_SEARCH}],
- [{xmlelement, "x",
- [{"xmlns", ?NS_XDATA},
- {"type", "result"}],
- search_result(Lang, XData)
- }]}]},
+ IQ#iq{
+ type = result,
+ sub_el =
+ [{xmlelement,
+ "query",
+ [{"xmlns", ?NS_SEARCH}],
+ [{xmlelement, "x",
+ [{"xmlns", ?NS_XDATA},
+ {"type", "result"}],
+ search_result(Lang, XData)
+ }]}]},
ejabberd_router:route(
To, From, jlib:iq_to_xml(ResIQ))
end
end;
get ->
- ResIQ = {iq, ID, result, ?NS_SEARCH,
- [{xmlelement,
- "query",
- [{"xmlns", ?NS_SEARCH}],
- ?FORM
- }]},
+ ResIQ = IQ#iq{type = result,
+ sub_el = [{xmlelement,
+ "query",
+ [{"xmlns", ?NS_SEARCH}],
+ ?FORM
+ }]},
ejabberd_router:route(To,
From,
jlib:iq_to_xml(ResIQ))
end;
- {iq, ID, Type, ?NS_DISCO_INFO, SubEl} ->
+ #iq{type = Type, xmlns = ?NS_DISCO_INFO, sub_el = SubEl} ->
case Type of
set ->
Err = jlib:make_error_reply(
Packet, ?ERR_NOT_ALLOWED),
ejabberd_router:route(To, From, Err);
get ->
- ResIQ = {iq, ID, result, ?NS_DISCO_INFO,
- [{xmlelement,
- "query",
- [{"xmlns", ?NS_DISCO_INFO}],
- [{xmlelement, "identity",
- [{"category", "directory"},
- {"type", "user"},
- {"name", "vCard User Search"}], []},
- {xmlelement, "feature",
- [{"var", ?NS_SEARCH}], []}
- ]
- }]},
+ ResIQ =
+ IQ#iq{type = result,
+ sub_el = [{xmlelement,
+ "query",
+ [{"xmlns", ?NS_DISCO_INFO}],
+ [{xmlelement, "identity",
+ [{"category", "directory"},
+ {"type", "user"},
+ {"name",
+ "vCard User Search"}],
+ []},
+ {xmlelement, "feature",
+ [{"var", ?NS_SEARCH}], []}
+ ]
+ }]},
ejabberd_router:route(To,
From,
jlib:iq_to_xml(ResIQ))
end;
- {iq, ID, Type, ?NS_DISCO_ITEMS, SubEl} ->
+ #iq{type = Type, xmlns = ?NS_DISCO_ITEMS, sub_el = SubEl} ->
case Type of
set ->
Err = jlib:make_error_reply(
Packet, ?ERR_NOT_ALLOWED),
ejabberd_router:route(To, From, Err);
get ->
- ResIQ = {iq, ID, result, ?NS_DISCO_INFO,
- [{xmlelement,
- "query",
- [{"xmlns", ?NS_DISCO_INFO}], []}]},
+ ResIQ =
+ IQ#iq{type = result,
+ sub_el = [{xmlelement,
+ "query",
+ [{"xmlns", ?NS_DISCO_INFO}],
+ []}]},
ejabberd_router:route(To,
From,
jlib:iq_to_xml(ResIQ))
diff --git a/src/mod_version.erl b/src/mod_version.erl
index fefecdcd6..1912d058c 100644
--- a/src/mod_version.erl
+++ b/src/mod_version.erl
@@ -30,11 +30,11 @@ stop() ->
gen_iq_handler:remove_iq_handler(ejabberd_local, ?NS_VERSION).
-process_local_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
+process_local_iq(From, To, #iq{id = ID, type = Type,
+ xmlns = XMLNS, sub_el = SubEl} = IQ) ->
case Type of
set ->
- {iq, ID, error, XMLNS,
- [SubEl, ?ERR_NOT_ALLOWED]};
+ IQ#iq{type = error, sub_el = [SubEl, ?ERR_NOT_ALLOWED]};
get ->
OSType = case os:type() of
{Osfamily, Osname} ->
@@ -52,16 +52,16 @@ process_local_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
VersionString
end,
OS = OSType ++ " " ++ OSVersion,
- {iq, ID, result, XMLNS,
- [{xmlelement, "query",
- [{"xmlns", ?NS_VERSION}],
- [{xmlelement, "name", [],
- [{xmlcdata, "ejabberd"}]},
- {xmlelement, "version", [],
- [{xmlcdata, ?VERSION}]},
- {xmlelement, "os", [],
- [{xmlcdata, OS}]}
- ]}]}
+ IQ#iq{type = result,
+ sub_el = [{xmlelement, "query",
+ [{"xmlns", ?NS_VERSION}],
+ [{xmlelement, "name", [],
+ [{xmlcdata, "ejabberd"}]},
+ {xmlelement, "version", [],
+ [{xmlcdata, ?VERSION}]},
+ {xmlelement, "os", [],
+ [{xmlcdata, OS}]}
+ ]}]}
end.