26
1
mirror of https://github.com/processone/ejabberd.git synced 2024-12-26 17:38:45 +01:00

mod_push: Improve notification error handling

Don't disable push notifications if the app server returned a temporary
error, and log the app server's notification response.
This commit is contained in:
Holger Weiss 2019-02-11 22:29:49 +01:00
parent e18522f74c
commit abdbc5df13

View File

@ -441,12 +441,30 @@ notify(#{jid := #jid{luser = LUser, lserver = LServer},
notify(LUser, LServer, Clients, Pkt, Dir) -> notify(LUser, LServer, Clients, Pkt, Dir) ->
lists:foreach( lists:foreach(
fun({TS, PushLJID, Node, XData}) -> fun({TS, PushLJID, Node, XData}) ->
HandleResponse = fun(#iq{type = result}) -> HandleResponse =
ok; fun(#iq{type = result}) ->
(#iq{type = error}) -> ?DEBUG("~s accepted notification for ~s@~s (~s)",
[jid:encode(PushLJID), LUser, LServer, Node]);
(#iq{type = error} = IQ) ->
case inspect_error(IQ) of
{wait, Reason} ->
?INFO_MSG("~s rejected notification for "
"~s@~s (~s) temporarily: ~s",
[jid:encode(PushLJID), LUser,
LServer, Node, Reason]);
{Type, Reason} ->
spawn(?MODULE, delete_session, spawn(?MODULE, delete_session,
[LUser, LServer, TS]); [LUser, LServer, TS]),
?WARNING_MSG("~s rejected notification for "
"~s@~s (~s), disabling push: ~s "
"(~s)",
[jid:encode(PushLJID), LUser,
LServer, Node, Reason, Type])
end;
(timeout) -> (timeout) ->
?DEBUG("Timeout sending notification for ~s@~s (~s) "
"to ~s",
[LUser, LServer, Node, jid:encode(PushLJID)]),
ok % Hmm. ok % Hmm.
end, end,
notify(LServer, PushLJID, Node, XData, Pkt, Dir, HandleResponse) notify(LServer, PushLJID, Node, XData, Pkt, Dir, HandleResponse)
@ -667,6 +685,15 @@ get_body_text(#message{body = Body} = Msg) ->
body_is_encrypted(#message{sub_els = SubEls}) -> body_is_encrypted(#message{sub_els = SubEls}) ->
lists:keyfind(<<"encrypted">>, #xmlel.name, SubEls) /= false. lists:keyfind(<<"encrypted">>, #xmlel.name, SubEls) /= false.
-spec inspect_error(iq()) -> {atom(), binary()}.
inspect_error(IQ) ->
case xmpp:get_error(IQ) of
#stanza_error{type = Type} = Err ->
{Type, xmpp:format_stanza_error(Err)};
undefined ->
{undefined, <<"unrecognized error">>}
end.
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
%% Caching. %% Caching.
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------