mirror of
https://github.com/processone/ejabberd.git
synced 2024-12-22 17:28:25 +01:00
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.
This commit is contained in:
parent
672c2f75d3
commit
9fb2253aa9
@ -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]),
|
||||
|
Loading…
Reference in New Issue
Block a user