diff options
Diffstat (limited to 'src/mod_offline.erl')
-rw-r--r-- | src/mod_offline.erl | 37 |
1 files changed, 18 insertions, 19 deletions
diff --git a/src/mod_offline.erl b/src/mod_offline.erl index 59efa7214..664f90440 100644 --- a/src/mod_offline.erl +++ b/src/mod_offline.erl @@ -38,7 +38,7 @@ -export([start/2, stop/1, - store_packet/4, + store_packet/2, store_offline_msg/5, c2s_self_presence/1, get_sm_features/5, @@ -353,11 +353,11 @@ handle_offline_items_view(JID, Items) -> case fetch_msg_by_node(JID, Node) of {ok, OfflineMsg} -> case offline_msg_to_route(S, OfflineMsg) of - {route, From, To, El} -> + {route, El} -> NewEl = set_offline_tag(El, Node), case ejabberd_sm:get_session_pid(U, S, R) of Pid when is_pid(Pid) -> - Pid ! {route, From, To, NewEl}; + Pid ! {route, NewEl}; none -> ok end, @@ -387,9 +387,7 @@ handle_offline_fetch(#jid{luser = U, lserver = S} = JID) -> lists:foreach( fun({Node, El}) -> El1 = set_offline_tag(El, Node), - From = xmpp:get_from(El1), - To = xmpp:get_to(El1), - ejabberd_router:route(From, To, El1) + ejabberd_router:route(El1) end, read_messages(U, S)). -spec fetch_msg_by_node(jid(), binary()) -> error | {ok, #offline_msg{}}. @@ -448,11 +446,11 @@ need_to_store(LServer, #message{type = Type} = Packet) -> false end. --spec store_packet(any(), jid(), jid(), message()) -> any(). -store_packet(Acc, From, To, Packet) -> +-spec store_packet(any(), message()) -> any(). +store_packet(Acc, #message{from = From, to = To} = Packet) -> case need_to_store(To#jid.lserver, Packet) of true -> - case check_event(From, To, Packet) of + case check_event(Packet) of true -> #jid{luser = LUser, lserver = LServer} = To, case ejabberd_hooks:run_fold(store_offline_message, LServer, @@ -501,16 +499,17 @@ has_no_store_hint(Packet) -> xmpp:has_subtag(Packet, #hint{type = 'no-storage'}). %% Check if the packet has any content about XEP-0022 --spec check_event(jid(), jid(), message()) -> boolean(). -check_event(From, To, #message{id = ID} = Msg) -> +-spec check_event(message()) -> boolean(). +check_event(#message{from = From, to = To, id = ID} = Msg) -> case xmpp:get_subtag(Msg, #xevent{}) of false -> true; #xevent{id = undefined, offline = false} -> true; #xevent{id = undefined, offline = true} -> - NewMsg = Msg#message{sub_els = [#xevent{id = ID, offline = true}]}, - ejabberd_router:route(To, From, xmpp:set_from_to(NewMsg, To, From)), + NewMsg = Msg#message{from = To, to = From, + sub_els = [#xevent{id = ID, offline = true}]}, + ejabberd_router:route(NewMsg), true; _ -> false @@ -565,13 +564,13 @@ route_offline_message(#{lserver := LServer} = State, case offline_msg_to_route(LServer, OffMsg) of error -> ok; - {route, From, To, Msg} -> + {route, Msg} -> case is_message_expired(Expire, Msg) of true -> ok; false -> case privacy_check_packet(State, Msg, in) of - allow -> ejabberd_router:route(From, To, Msg); + allow -> ejabberd_router:route(Msg); false -> ok end end @@ -614,12 +613,12 @@ remove_user(User, Server) -> %% Warn senders that their messages have been discarded: discard_warn_sender(Msgs) -> lists:foreach( - fun(#offline_msg{from = From, to = To, packet = Packet}) -> + fun(#offline_msg{packet = Packet}) -> ErrText = <<"Your contact offline message queue is " "full. The message has been discarded.">>, Lang = xmpp:get_lang(Packet), Err = xmpp:err_resource_constraint(ErrText, Lang), - ejabberd_router:route_error(To, From, Packet, Err) + ejabberd_router:route_error(Packet, Err) end, Msgs). webadmin_page(_, Host, @@ -633,13 +632,13 @@ get_offline_els(LUser, LServer) -> [Packet || {_Seq, Packet} <- read_messages(LUser, LServer)]. -spec offline_msg_to_route(binary(), #offline_msg{}) -> - {route, jid(), jid(), message()} | error. + {route, message()} | error. offline_msg_to_route(LServer, #offline_msg{from = From, to = To} = R) -> try xmpp:decode(R#offline_msg.packet, ?NS_CLIENT, [ignore_els]) of Pkt -> Pkt1 = xmpp:set_from_to(Pkt, From, To), Pkt2 = add_delay_info(Pkt1, LServer, R#offline_msg.timestamp), - {route, From, To, Pkt2} + {route, Pkt2} catch _:{xmpp_codec, Why} -> ?ERROR_MSG("failed to decode packet ~p of user ~s: ~s", [R#offline_msg.packet, jid:to_string(To), |