diff --git a/ChangeLog b/ChangeLog index 74200742b..3b009fe1d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -13,6 +13,11 @@ * src/ejabberd_sm.erl: Forgot to convert a from the new to the old record. + * src/ejabberd_c2s.erl: Use jlib:short_bare_jid/1. Rewrite + is_auth_packet/1 to use new formats. Don't convert before + calling ejabberd_sm:set_presence/7. Don't convert broadcast children, + because it's an internal special element. + 2008-06-30 Jean-Sébastien Pédron * src/Makefile.in: Remove the -I flag for exmpp includes; the diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl index 86892b195..f47433896 100644 --- a/src/ejabberd_c2s.erl +++ b/src/ejabberd_c2s.erl @@ -419,8 +419,7 @@ wait_for_auth({xmlstreamelement, El}, StateData) -> StateData#state.server, {[], []}, [U, StateData#state.server]), - LJID = jlib:short_jid( - exmpp_jid:jid_to_bare_jid(JID)), + LJID = jlib:short_bare_jid(JID), Fs1 = [LJID | Fs], Ts1 = [LJID | Ts], PrivList = ejabberd_hooks:run_fold( @@ -741,7 +740,7 @@ wait_for_session({xmlstreamelement, El}, StateData) -> StateData#state.server, {[], []}, [U, StateData#state.server]), - LJID = jlib:short_jid(exmpp_jid:jid_to_bare_jid(JID)), + LJID = jlib:short_bare_jid(JID), Fs1 = [LJID | Fs], Ts1 = [LJID | Ts], PrivList = @@ -1017,9 +1016,8 @@ handle_info({route, FromOld, ToOld, PacketOld}, StateName, StateData) -> #xmlel{attrs = Attrs} when ?IS_PRESENCE(Packet) -> case exmpp_presence:get_type(Packet) of 'probe' -> - % XXX OLD FORMAT: LFrom and LBFrom. LFrom = jlib:short_jid(From), - LBFrom = jlib:short_jid(exmpp_jid:jid_to_bare_jid(From)), + LBFrom = jlib:short_bare_jid(From), NewStateData = case ?SETS:is_element( LFrom, StateData#state.pres_a) orelse @@ -1031,8 +1029,6 @@ handle_info({route, FromOld, ToOld, PacketOld}, StateName, StateData) -> case ?SETS:is_element( LFrom, StateData#state.pres_f) of true -> - % XXX OLD FORMAT: Stores short - % JIDs. A = ?SETS:add_element( LFrom, StateData#state.pres_a), @@ -1041,8 +1037,6 @@ handle_info({route, FromOld, ToOld, PacketOld}, StateName, StateData) -> case ?SETS:is_element( LBFrom, StateData#state.pres_f) of true -> - % XXX OLD FORMAT: Stores - % short JIDs. A = ?SETS:add_element( LBFrom, StateData#state.pres_a), @@ -1055,15 +1049,13 @@ handle_info({route, FromOld, ToOld, PacketOld}, StateName, StateData) -> process_presence_probe(From, To, NewStateData), {false, Attrs, NewStateData}; 'error' -> - % XXX OLD FORMAT: LFrom. LFrom = jlib:short_jid(From), NewA = remove_element(LFrom, StateData#state.pres_a), {true, Attrs, StateData#state{pres_a = NewA}}; 'invisible' -> - % XXX OLD FORMAT: Create a function to change 'type'. Attrs1 = exmpp_stanza:set_type_in_attrs(Attrs, - "unavailable"), + 'unavailable'), {true, Attrs1, StateData}; 'subscribe' -> {true, Attrs, StateData}; @@ -1084,10 +1076,8 @@ handle_info({route, FromOld, ToOld, PacketOld}, StateName, StateData) -> {FromOld, ToOld, PacketOld}, in]) of allow -> - % XXX OLD FORMAT: LFrom and LBFrom. LFrom = jlib:short_jid(From), - LBFrom = jlib:short_jid( - exmpp_jid:jid_to_bare_jid(From)), + LBFrom = jlib:short_bare_jid(From), %% Note contact availability % XXX OLD FORMAT: Els are #xmlelement. Els = PacketOld#xmlelement.children, @@ -1135,12 +1125,9 @@ handle_info({route, FromOld, ToOld, PacketOld}, StateName, StateData) -> end end; #xmlel{name = 'broadcast', attrs = Attrs} -> - % XXX OLD FORMAT: Els are #xmlelement. - Els = PacketOld#xmlelement.children, - ?DEBUG("broadcast~n~p~n", [Els]), - case Els of + ?DEBUG("broadcast~n~p~n", [Packet#xmlel.children]), + case Packet#xmlel.children of [{item, {U, S, R} = _IJIDShort, ISubscription}] -> - % XXX OLD FORMAT: IJID is of the form {U, S, R}. IJID = exmpp_jid:make_jid(U, S, R), {false, Attrs, roster_change(IJID, ISubscription, @@ -1177,7 +1164,6 @@ handle_info({route, FromOld, ToOld, PacketOld}, StateName, StateData) -> % XXX OLD FORMAT: IQ is an old #iq, % From, To. IQ = jlib:iq_query_info(PacketOld), - io:format("IQ = ~p~n", [IQ]), gen_iq_handler:handle(Host, Module, Function, Opts, FromOld, ToOld, IQ); [] -> @@ -1233,12 +1219,13 @@ handle_info({route, FromOld, ToOld, PacketOld}, StateName, StateData) -> Attrs3 = exmpp_stanza:set_recipient_in_attrs(Attrs2, To), FixedPacket = Packet#xmlel{attrs = Attrs3}, send_element(StateData, FixedPacket), - % XXX OLD FORMAT: From, To, FixedPacket. + % XXX OLD FORMAT: JID, From, To, FixedPacket. + JIDOld = jlib:to_old_jid(StateData#state.jid), FixedPacketOld = exmpp_xml:xmlel_to_xmlelement(FixedPacket, [?DEFAULT_NS], ?PREFIXED_NS), ejabberd_hooks:run(user_receive_packet, StateData#state.server, - [StateData#state.jid, FromOld, ToOld, FixedPacketOld]), + [JIDOld, FromOld, ToOld, FixedPacketOld]), % XXX OLD FORMAT: From, To, FixedPacket. ejabberd_hooks:run(c2s_loop_debug, [{route, FromOld, ToOld, PacketOld}]), fsm_next_state(StateName, NewState); @@ -1345,30 +1332,27 @@ new_id() -> is_auth_packet(El) -> - % XXX OLD FORMAT: El. - ElOld = exmpp_xml:xmlel_to_xmlelement(El, - [?DEFAULT_NS], ?PREFIXED_NS), - NS_Auth = atom_to_list(?NS_LEGACY_AUTH), - case jlib:iq_query_info(ElOld) of - #iq{id = ID, type = Type, xmlns = NS_Auth, sub_el = SubEl} -> - {xmlelement, _, _, Els} = SubEl, - {auth, ID, Type, - get_auth_tags(Els, "", "", "", undefined)}; - _ -> + case exmpp_iq:is_request(El) of + true -> + {auth, exmpp_stanza:get_id(El), exmpp_iq:get_type(El), + get_auth_tags(El#xmlel.children, + undefined, undefined, undefined, undefined)}; + false -> false end. -get_auth_tags([{xmlelement, Name, _Attrs, Els}| L], U, P, D, R) -> - CData = xml:get_cdata(Els), +get_auth_tags([#xmlel{ns = ?NS_LEGACY_AUTH, name = Name, children = Els} | L], + U, P, D, R) -> + CData = exmpp_xml:get_cdata_from_list_as_list(Els), case Name of - "username" -> + 'username' -> get_auth_tags(L, CData, P, D, R); - "password" -> + 'password' -> get_auth_tags(L, U, CData, D, R); - "digest" -> + 'digest' -> get_auth_tags(L, U, P, CData, R); - "resource" -> + 'resource' -> get_auth_tags(L, U, P, D, CData); _ -> get_auth_tags(L, U, P, D, R) @@ -1390,7 +1374,7 @@ get_conn_type(StateData) -> process_presence_probe(From, To, StateData) -> LFrom = jlib:short_jid(From), - LBFrom = jlib:short_jid(exmpp_jid:jid_to_bare_jid(From)), + LBFrom = jlib:short_bare_jid(From), case StateData#state.pres_last of undefined -> ok; @@ -1563,9 +1547,9 @@ presence_track(From, To, Packet, StateData) -> LTo = jlib:short_jid(To), User = StateData#state.user, Server = StateData#state.server, + BFrom = exmpp_jid:jid_to_bare_jid(From), % XXX OLD FORMAT: From, To, Packet. FromOld = jlib:to_old_jid(From), - BFrom = exmpp_jid:jid_to_bare_jid(From), ToOld = jlib:to_old_jid(To), PacketOld = exmpp_xml:xmlel_to_xmlelement(Packet, [?DEFAULT_NS], ?PREFIXED_NS), @@ -1839,15 +1823,12 @@ roster_change(IJID, ISubscription, StateData) -> update_priority(Priority, Packet, StateData) -> Info = [{ip, StateData#state.ip},{conn, StateData#state.conn}], - % XXX OLD FORMAT: Packet. - PacketOld = exmpp_xml:xmlel_to_xmlelement(Packet, - [?DEFAULT_NS], ?PREFIXED_NS), ejabberd_sm:set_presence(StateData#state.sid, StateData#state.user, StateData#state.server, StateData#state.resource, Priority, - PacketOld, + Packet, Info). process_privacy_iq(From, To,