diff options
author | defanor <defanor@uberspace.net> | 2021-06-17 20:54:12 -0500 |
---|---|---|
committer | defanor <defanor@uberspace.net> | 2021-06-17 20:54:12 -0500 |
commit | e6f32fa17056d5332bf09cae8b1949aa846296fd (patch) | |
tree | 5166c0fbc56186960f2281f4dad9d5e7e8e63f67 | |
parent | 656ff95f81fe6b68808fc79bb9088e1ddafb2657 (diff) | |
download | pidgin-e6f32fa17056d5332bf09cae8b1949aa846296fd.tar.gz |
Initiate XMPP stream management after binding a resource
Bugs closed: PIDGIN-17520
Reviewed at https://reviews.imfreedom.org/r/759/
-rw-r--r-- | libpurple/protocols/jabber/jabber.c | 5 | ||||
-rw-r--r-- | libpurple/protocols/jabber/jabber.h | 1 | ||||
-rw-r--r-- | libpurple/protocols/jabber/stream_management.c | 3 |
3 files changed, 7 insertions, 2 deletions
diff --git a/libpurple/protocols/jabber/jabber.c b/libpurple/protocols/jabber/jabber.c index f689e24b94..5490693bc6 100644 --- a/libpurple/protocols/jabber/jabber.c +++ b/libpurple/protocols/jabber/jabber.c @@ -178,6 +178,9 @@ static void jabber_bind_result_cb(JabberStream *js, const char *from, return; } + if (js->sm_state == SM_PLANNED) { + jabber_sm_enable(js); + } jabber_session_init(js); } @@ -319,7 +322,7 @@ void jabber_stream_features_parse(JabberStream *js, xmlnode *packet) if (xmlnode_get_child_with_namespace(packet, "sm", NS_STREAM_MANAGEMENT) && (js->sm_state == SM_DISABLED) ) { - jabber_sm_enable(js); + js->sm_state = SM_PLANNED; } } diff --git a/libpurple/protocols/jabber/jabber.h b/libpurple/protocols/jabber/jabber.h index db94383839..b985cc64e1 100644 --- a/libpurple/protocols/jabber/jabber.h +++ b/libpurple/protocols/jabber/jabber.h @@ -100,6 +100,7 @@ typedef enum { typedef enum { SM_DISABLED, + SM_PLANNED, SM_REQUESTED, SM_ENABLED } JabberStreamManagementState; diff --git a/libpurple/protocols/jabber/stream_management.c b/libpurple/protocols/jabber/stream_management.c index 72a7d2cbe4..3c040150ab 100644 --- a/libpurple/protocols/jabber/stream_management.c +++ b/libpurple/protocols/jabber/stream_management.c @@ -184,7 +184,8 @@ jabber_sm_enable(JabberStream *js) void jabber_sm_outbound(JabberStream *js, xmlnode *packet) { - if (jabber_is_stanza(packet) && js->sm_state != SM_DISABLED) { + if (jabber_is_stanza(packet) + && (js->sm_state == SM_REQUESTED || js->sm_state == SM_ENABLED)) { /* Counting stanzas even if there's no confirmation that SM is enabled yet, so that we won't miss any. */ |