mirror of
https://github.com/processone/ejabberd.git
synced 2024-09-21 14:06:57 +02:00
Finish ejabberd_c2s conversion with the functions related to offline
stanzas. SVN Revision: 1380
This commit is contained in:
parent
6f931ce4fd
commit
07651d712f
@ -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
|
||||||
|
@ -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;
|
||||||
_ ->
|
_ ->
|
||||||
|
Loading…
Reference in New Issue
Block a user