From 13d035417638532de6891b5ae3606d73b3e7915e Mon Sep 17 00:00:00 2001 From: Steffen Jaeckel Date: Tue, 3 Oct 2023 17:22:37 +0200 Subject: [PATCH] Send less ACK requests Only send an `r` stanza after we've received the reply to the previous one. Signed-off-by: Steffen Jaeckel --- src/common.h | 1 + src/conn.c | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/common.h b/src/common.h index 478d7b9..c223627 100644 --- a/src/common.h +++ b/src/common.h @@ -181,6 +181,7 @@ struct _xmpp_sm_t { int sm_support; int sm_enabled; int can_resume, resume, dont_request_resume; + int r_sent; uint32_t sm_handled_nr; uint32_t sm_sent_nr; xmpp_queue_t sm_queue; diff --git a/src/conn.c b/src/conn.c index cbedbad..47bf9da 100644 --- a/src/conn.c +++ b/src/conn.c @@ -1314,7 +1314,7 @@ static void _reset_sm_state_for_reconnect(xmpp_conn_t *conn) s->id = NULL; } - s->sm_enabled = s->sm_support = s->resume = 0; + s->r_sent = s->sm_enabled = s->sm_support = s->resume = 0; if (s->bind) { xmpp_stanza_release(s->bind); @@ -1751,6 +1751,7 @@ static void _conn_sm_handle_stanza(xmpp_conn_t *const conn, c = queue_element_free(conn->ctx, e); strophe_free(conn->ctx, c); } + conn->sm_state->r_sent = 0; } } } @@ -2035,8 +2036,10 @@ static int _send_raw(xmpp_conn_t *conn, conn->send_queue_user_len++; strophe_debug_verbose(3, conn->ctx, "conn", "QUEUED: %s", data); strophe_debug_verbose(1, conn->ctx, "conn", "Q_ADD: %p", item); - if (!(owner & XMPP_QUEUE_SM) && conn->sm_state->sm_enabled) { + if (!(owner & XMPP_QUEUE_SM) && conn->sm_state->sm_enabled && + !conn->sm_state->r_sent) { send_raw(conn, req_ack, strlen(req_ack), XMPP_QUEUE_SM_STROPHE, item); + conn->sm_state->r_sent = 1; } return XMPP_EOK; }