summaryrefslogtreecommitdiff
path: root/src/mod_irc
diff options
context:
space:
mode:
authorAlexey Shchepin <alexey@process-one.net>2003-12-17 20:13:21 +0000
committerAlexey Shchepin <alexey@process-one.net>2003-12-17 20:13:21 +0000
commitb3b09bcfd83ce7afe5349259a421e6424440df1c (patch)
tree2156729d2e4843e1eb0a262aa14664c76a35595e /src/mod_irc
parent* src/ejabberd_local.erl: Replaced register_local_route to (diff)
* src/jlib.hrl: Added declaration of "iq" record
* (all): Updated to use "iq" record SVN Revision: 186
Diffstat (limited to 'src/mod_irc')
-rw-r--r--src/mod_irc/mod_irc.erl70
-rw-r--r--src/mod_irc/mod_irc_connection.erl34
2 files changed, 55 insertions, 49 deletions
diff --git a/src/mod_irc/mod_irc.erl b/src/mod_irc/mod_irc.erl
index 5af53ae0..8e70f4d9 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 079e5af7..c32fa3d7 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));