aboutsummaryrefslogtreecommitdiff
path: root/src/mod_offline.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/mod_offline.erl')
-rw-r--r--src/mod_offline.erl37
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),