Skip to content

Commit c0ab771

Browse files
committed
Don't send anything in the resume state (socket is closed anyway)
1 parent ef30e88 commit c0ab771

File tree

1 file changed

+17
-11
lines changed

1 file changed

+17
-11
lines changed

src/stream_management/mod_stream_management.erl

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -223,11 +223,11 @@ user_receive_packet(Acc, _Params, _Extra) ->
223223
xmpp_presend_element(Acc, #{c2s_data := StateData, c2s_state := C2SState}, _Extra) ->
224224
case {get_mod_state(StateData), mongoose_acc:stanza_type(Acc)} of
225225
{{error, not_found}, _} ->
226-
{ok, Acc};
226+
{xmpp_presend_result(C2SState), Acc};
227227
{_, <<"probe">>} ->
228-
{ok, Acc};
228+
{xmpp_presend_result(C2SState), Acc};
229229
{#sm_state{buffer_max = no_buffer} = SmState, _} ->
230-
maybe_send_ack_request(Acc, SmState);
230+
maybe_send_ack_request(Acc, C2SState, SmState);
231231
{SmState, _} ->
232232
Jid = mongoose_c2s:get_jid(StateData),
233233
handle_buffer_and_ack(Acc, C2SState, Jid, SmState)
@@ -248,7 +248,7 @@ handle_buffer_and_ack(Acc, C2SState, Jid, #sm_state{buffer = Buffer, buffer_max
248248
NewSmState = SmState#sm_state{buffer = [Acc1 | Buffer], buffer_size = NewBufferSize},
249249
ToAcc = [{actions, MaybeActions}, {state_mod, {?MODULE, NewSmState}}],
250250
Acc2 = mongoose_c2s_acc:to_acc_many(Acc1, ToAcc),
251-
maybe_send_ack_request(Acc2, NewSmState).
251+
maybe_send_ack_request(Acc2, C2SState, NewSmState).
252252

253253
notify_unacknowledged_msg_if_in_resume_state(Acc, Jid, ?EXT_C2S_STATE(resume_session)) ->
254254
maybe_notify_unacknowledged_msg(Acc, Jid);
@@ -263,16 +263,22 @@ is_buffer_full(BufferSize, BufferMax) when BufferSize =< BufferMax ->
263263
is_buffer_full(_, _) ->
264264
true.
265265

266-
-spec maybe_send_ack_request(mongoose_acc:t(), sm_state()) ->
266+
-spec maybe_send_ack_request(mongoose_acc:t(), c2s_state(), sm_state()) ->
267267
mongoose_c2s_hooks:result().
268-
maybe_send_ack_request(Acc, #sm_state{buffer_size = BufferSize,
269-
counter_out = Out,
270-
ack_freq = AckFreq})
271-
when 0 =:= (Out + BufferSize) rem AckFreq ->
268+
maybe_send_ack_request(Acc, C2SState, #sm_state{buffer_size = BufferSize,
269+
counter_out = Out,
270+
ack_freq = AckFreq})
271+
when 0 =:= (Out + BufferSize) rem AckFreq, C2SState =/= ?EXT_C2S_STATE(resume_session) ->
272272
Stanza = mod_stream_management_stanzas:stream_mgmt_request(),
273273
{ok, mongoose_c2s_acc:to_acc(Acc, socket_send, Stanza)};
274-
maybe_send_ack_request(Acc, _SmState) ->
275-
{ok, Acc}.
274+
maybe_send_ack_request(Acc, C2SState, _SmState) ->
275+
{xmpp_presend_result(C2SState), Acc}.
276+
277+
-spec xmpp_presend_result(c2s_state()) -> stop | ok.
278+
xmpp_presend_result(?EXT_C2S_STATE(resume_session)) ->
279+
stop; % It makes no sense to route anything to a closed socket
280+
xmpp_presend_result(_C2SState) ->
281+
ok.
276282

277283
-spec user_send_xmlel(Acc, Params, Extra) -> Result when
278284
Acc :: mongoose_acc:t(),

0 commit comments

Comments
 (0)