diff options
author | Alexey Shchepin <alexey@process-one.net> | 2003-12-17 20:13:21 +0000 |
---|---|---|
committer | Alexey Shchepin <alexey@process-one.net> | 2003-12-17 20:13:21 +0000 |
commit | b3b09bcfd83ce7afe5349259a421e6424440df1c (patch) | |
tree | 2156729d2e4843e1eb0a262aa14664c76a35595e /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.erl | 70 | ||||
-rw-r--r-- | src/mod_irc/mod_irc_connection.erl | 34 |
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)); |