24
1
mirror of https://github.com/processone/ejabberd.git synced 2024-06-26 22:35:31 +02:00

Finish ejabberd_c2s conversion with the functions related to offline

stanzas.

SVN Revision: 1380
This commit is contained in:
Jean-Sébastien Pédron 2008-06-25 12:37:45 +00:00
parent 6f931ce4fd
commit 07651d712f
2 changed files with 61 additions and 32 deletions

View File

@ -1,3 +1,8 @@
2008-06-25 Jean-Sébastien Pédron <js.pedron@meetic-corp.com>
* src/ejabberd_c2s.erl: Finish ejabberd_c2s conversion with the
functions related to offline stanzas.
2008-06-24 Jean-Sébastien Pédron <js.pedron@meetic-corp.com> 2008-06-24 Jean-Sébastien Pédron <js.pedron@meetic-corp.com>
* src/ejabberd_c2s.erl: The handle_info clause that treats routing * src/ejabberd_c2s.erl: The handle_info clause that treats routing

View File

@ -851,12 +851,8 @@ session_established({xmlstreamelement, El}, StateData) ->
ToJIDOld = exmpp_jid:to_ejabberd_jid(ToJID), ToJIDOld = exmpp_jid:to_ejabberd_jid(ToJID),
case exmpp_iq:get_payload(El) of case exmpp_iq:get_payload(El) of
#xmlel{ns = ?NS_JABBER_PRIVACY} -> #xmlel{ns = ?NS_JABBER_PRIVACY} ->
% XXX OLD FORMAT: IQ was #iq.
ElOld2 = exmpp_xml:xmlel_to_xmlelement(El,
?DEFAULT_NS, ?PREFIXED_NS),
IQ = jlib:iq_query_info(ElOld2),
process_privacy_iq( process_privacy_iq(
FromJIDOld, ToJIDOld, IQ, StateData); FromJID, ToJID, El, StateData);
_ -> _ ->
% XXX OLD FORMAT: NewElOld. % XXX OLD FORMAT: NewElOld.
NewElOld = exmpp_xml:xmlel_to_xmlelement(NewEl, NewElOld = exmpp_xml:xmlel_to_xmlelement(NewEl,
@ -1894,21 +1890,28 @@ update_priority(Priority, Packet, StateData) ->
Info). Info).
process_privacy_iq(From, To, process_privacy_iq(From, To,
#iq{type = Type, sub_el = SubEl} = IQ, El,
StateData) -> StateData) ->
% XXX OLD FORMAT: IQ is #iq.
ElOld = exmpp_xml:xmlel_to_xmlelement(El,
?DEFAULT_NS, ?PREFIXED_NS),
IQOld = jlib:iq_query_info(ElOld),
% XXX OLD FORMAT: JIDs.
FromOld = exmpp_jid:to_ejabberd_jid(From),
ToOld = exmpp_jid:to_ejabberd_jid(To),
{Res, NewStateData} = {Res, NewStateData} =
case Type of case exmpp_iq:get_type(El) of
get -> get ->
R = ejabberd_hooks:run_fold( R = ejabberd_hooks:run_fold(
privacy_iq_get, StateData#state.server, privacy_iq_get, StateData#state.server,
{error, ?ERR_FEATURE_NOT_IMPLEMENTED}, {error, ?ERR_FEATURE_NOT_IMPLEMENTED},
[From, To, IQ, StateData#state.privacy_list]), [FromOld, ToOld, IQOld, StateData#state.privacy_list]),
{R, StateData}; {R, StateData};
set -> set ->
case ejabberd_hooks:run_fold( case ejabberd_hooks:run_fold(
privacy_iq_set, StateData#state.server, privacy_iq_set, StateData#state.server,
{error, ?ERR_FEATURE_NOT_IMPLEMENTED}, {error, ?ERR_FEATURE_NOT_IMPLEMENTED},
[From, To, IQ]) of [FromOld, ToOld, IQOld]) of
{result, R, NewPrivList} -> {result, R, NewPrivList} ->
{{result, R}, {{result, R},
StateData#state{privacy_list = NewPrivList}}; StateData#state{privacy_list = NewPrivList}};
@ -1917,13 +1920,20 @@ process_privacy_iq(From, To,
end, end,
IQRes = IQRes =
case Res of case Res of
{result, Result} -> {result, ResultOld} ->
IQ#iq{type = result, sub_el = Result}; Result = exmpp_xml:xmlelement_to_xmlel(ResultOld,
{error, Error} -> ?DEFAULT_NS, ?PREFIXED_NS),
IQ#iq{type = error, sub_el = [SubEl, Error]} exmpp_iq:result(El, Result);
{error, ErrorOld} ->
Error = exmpp_xml:xmlelement_to_xmlel(ErrorOld,
?DEFAULT_NS, ?PREFIXED_NS),
exmpp_iq:error(El, Error)
end, end,
% XXX OLD FORMAT: To, From, IQRes.
IQResOld = exmpp_xml:xmlel_to_xmlelement(IQRes,
?DEFAULT_NS, ?PREFIXED_NS),
ejabberd_router:route( ejabberd_router:route(
To, From, jlib:iq_to_xml(IQRes)), ToOld, FromOld, IQResOld),
NewStateData. NewStateData.
@ -1935,16 +1945,18 @@ resend_offline_messages(#state{user = User,
[], [],
[User, Server]) of [User, Server]) of
Rs when list(Rs) -> Rs when list(Rs) ->
% XXX OLD FORMAT: From, To, Packet.
% XXX OLD FORMAT ON DISK!
lists:foreach( lists:foreach(
fun({route, fun({route,
From, To, {xmlelement, Name, Attrs, Els} = Packet}) -> FromOld, ToOld, PacketOld}) ->
Pass = case ejabberd_hooks:run_fold( Pass = case ejabberd_hooks:run_fold(
privacy_check_packet, Server, privacy_check_packet, Server,
allow, allow,
[User, [User,
Server, Server,
PrivList, PrivList,
{From, To, Packet}, {FromOld, ToOld, PacketOld},
in]) of in]) of
allow -> allow ->
true; true;
@ -1953,12 +1965,17 @@ resend_offline_messages(#state{user = User,
end, end,
if if
Pass -> Pass ->
Attrs2 = jlib:replace_from_to_attrs( % XXX OLD FORMAT: From, To, Packet.
jlib:jid_to_string(From), From = exmpp_jid:from_ejabberd_jid(FromOld),
jlib:jid_to_string(To), To = exmpp_jid:from_ejabberd_jid(ToOld),
Attrs), Packet = exmpp_xml:xmlelement_to_xmlel(PacketOld,
?DEFAULT_NS, ?PREFIXED_NS),
Attrs1 = exmpp_stanza:set_sender_in_attrs(
Packet#xmlel.attrs, From),
Attrs2 = exmpp_stanza:set_recipient_in_attrs(
Attrs1, To),
send_element(StateData, send_element(StateData,
{xmlelement, Name, Attrs2, Els}); Packet#xmlel{attrs = Attrs2});
true -> true ->
ok ok
end end
@ -1972,32 +1989,39 @@ resend_subscription_requests(#state{user = User,
Server, Server,
[], [],
[User, Server]), [User, Server]),
lists:foreach(fun(XMLPacket) -> % XXX OLD FORMAT: XMLPacket.
% XXX OLD FORMAT ON DISK!
lists:foreach(fun(XMLPacketOld) ->
XMLPacket = exmpp_xml:xmlelement_to_xmlel(
XMLPacketOld, ?DEFAULT_NS, ?PREFIXED_NS),
send_element(StateData, send_element(StateData,
XMLPacket) XMLPacket)
end, end,
PendingSubscriptions). PendingSubscriptions).
process_unauthenticated_stanza(StateData, El) -> process_unauthenticated_stanza(StateData, El) ->
case jlib:iq_query_info(El) of ElOld = exmpp_xml:xmlel_to_xmlelement(El, ?DEFAULT_NS, ?PREFIXED_NS),
case jlib:iq_query_info(ElOld) of
#iq{} = IQ -> #iq{} = IQ ->
Res = ejabberd_hooks:run_fold(c2s_unauthenticated_iq, ResOld = ejabberd_hooks:run_fold(c2s_unauthenticated_iq,
StateData#state.server, StateData#state.server,
empty, empty,
[StateData#state.server, IQ, [StateData#state.server, IQ,
StateData#state.ip]), StateData#state.ip]),
case Res of case ResOld of
empty -> empty ->
% The only reasonable IQ's here are auth and register IQ's % The only reasonable IQ's here are auth and register IQ's
% They contain secrets, so don't include subelements to response % They contain secrets, so don't include subelements to response
ResIQ = IQ#iq{type = error, ResIQ = exmpp_iq:error_without_original(El,
sub_el = [?ERR_SERVICE_UNAVAILABLE]}, exmpp_stanza:error(El#xmlel.ns, 'service-unavailable')),
Res1 = jlib:replace_from_to( Res1 = exmpp_stanza:set_sender(ResIQ,
jlib:make_jid("", StateData#state.server, ""), exmpp_jid:make_bare_jid(undefined,
jlib:make_jid("", "", ""), StateData#state.server)),
jlib:iq_to_xml(ResIQ)), Res2 = exmpp_stanza:remove_recipient(Res1),
send_element(StateData, jlib:remove_attr("to", Res1)); send_element(StateData, Res2);
_ -> _ ->
Res = exmpp_xml:xmlelement_to_xmlel(ResOld,
?DEFAULT_NS, ?PREFIXED_NS),
send_element(StateData, Res) send_element(StateData, Res)
end; end;
_ -> _ ->