summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordefanor <defanor@uberspace.net>2021-06-17 20:54:12 -0500
committerdefanor <defanor@uberspace.net>2021-06-17 20:54:12 -0500
commite6f32fa17056d5332bf09cae8b1949aa846296fd (patch)
tree5166c0fbc56186960f2281f4dad9d5e7e8e63f67
parent656ff95f81fe6b68808fc79bb9088e1ddafb2657 (diff)
downloadpidgin-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.c5
-rw-r--r--libpurple/protocols/jabber/jabber.h1
-rw-r--r--libpurple/protocols/jabber/stream_management.c3
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. */