diff options
author | Evgeny Khramtsov <xramtsov@gmail.com> | 2014-09-17 09:31:09 +0400 |
---|---|---|
committer | Evgeny Khramtsov <xramtsov@gmail.com> | 2014-09-17 09:31:09 +0400 |
commit | c18413c52b8bce5a71ada393a890b070afa2d343 (patch) | |
tree | ebb48393b2025f03c61286874203755d6d1f6c59 /src | |
parent | Merge pull request #299 from sjmackenzie/processone (diff) | |
parent | XEP-0198: Support "resend_on_timeout: if_offline" (diff) |
Merge pull request #300 from weiss/resend-if-offline
XEP-0198: Support "resend_on_timeout: if_offline"
Diffstat (limited to 'src')
-rw-r--r-- | src/ejabberd_c2s.erl | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl index cb6f9e6d8..d0dfd2553 100644 --- a/src/ejabberd_c2s.erl +++ b/src/ejabberd_c2s.erl @@ -316,7 +316,11 @@ init([{SockMod, Socket}, Opts]) -> Timeout when is_integer(Timeout), Timeout >= 0 -> Timeout; _ -> 300 end, - ResendOnTimeout = proplists:get_bool(resend_on_timeout, Opts), + ResendOnTimeout = case proplists:get_value(resend_on_timeout, Opts) of + Resend when is_boolean(Resend) -> Resend; + if_offline -> if_offline; + _ -> false + end, IP = peerip(SockMod, Socket), Socket1 = if TLSEnabled andalso SockMod /= ejabberd_frontend_socket -> @@ -2879,7 +2883,15 @@ handle_unacked_stanzas(_StateData, _F) -> handle_unacked_stanzas(StateData) when StateData#state.mgmt_state == active; StateData#state.mgmt_state == pending -> - ReRoute = case StateData#state.mgmt_resend of + ResendOnTimeout = + case StateData#state.mgmt_resend of + Resend when is_boolean(Resend) -> + Resend; + if_offline -> + ejabberd_sm:get_user_resources(StateData#state.user, + StateData#state.server) == [] + end, + ReRoute = case ResendOnTimeout of true -> fun ejabberd_router:route/3; false -> |