diff options
author | Holger Weiss <holger@zedat.fu-berlin.de> | 2018-02-10 02:06:19 +0300 |
---|---|---|
committer | Holger Weiss <holger@zedat.fu-berlin.de> | 2018-02-10 02:06:19 +0300 |
commit | 9fb2253aa94cc20581e0afd1a0648cca368b9338 (patch) | |
tree | 587db4019815376386da7e216c01e7935f942992 | |
parent | 672c2f75d3ebd659c514b0ce1ecc70ecaa99f31f (diff) |
mod_stream_mgmt: Abort connection on count error
If the client acknowledged more stanzas than the server sent, close the
connection with a stream error rather than hiding client bugs by silently
adjusting the server's count.
-rw-r--r-- | src/mod_stream_mgmt.erl | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/mod_stream_mgmt.erl b/src/mod_stream_mgmt.erl index baf72b329..48e7ac985 100644 --- a/src/mod_stream_mgmt.erl +++ b/src/mod_stream_mgmt.erl @@ -438,11 +438,15 @@ transition_to_pending(State) -> State. -spec check_h_attribute(state(), non_neg_integer()) -> state(). -check_h_attribute(#{mgmt_stanzas_out := NumStanzasOut, jid := JID} = State, H) +check_h_attribute(#{mgmt_stanzas_out := NumStanzasOut, jid := JID, + lang := Lang} = State, H) when H > NumStanzasOut -> - ?DEBUG("~s acknowledged ~B stanzas, but only ~B were sent", - [jid:encode(JID), H, NumStanzasOut]), - mgmt_queue_drop(State#{mgmt_stanzas_out => H}, NumStanzasOut); + ?WARNING_MSG("~s acknowledged ~B stanzas, but only ~B were sent", + [jid:encode(JID), H, NumStanzasOut]), + State1 = State#{mgmt_resend => false}, + Err = xmpp:serr_undefined_condition( + <<"Client acknowledged more stanzas than sent by server">>, Lang), + send(State1, Err); check_h_attribute(#{mgmt_stanzas_out := NumStanzasOut, jid := JID} = State, H) -> ?DEBUG("~s acknowledged ~B of ~B stanzas", [jid:encode(JID), H, NumStanzasOut]), |