From 663a045a164f8973d4f66e2d8e45b495eb0519e6 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Thu, 23 Jun 2022 20:50:50 +0300 Subject: Jabber: more effective stream management processing --- protocols/JabberG/src/jabber_strm_mgmt.cpp | 17 ++++++++++++----- protocols/JabberG/src/jabber_strm_mgmt.h | 2 +- protocols/JabberG/src/jabber_thread.cpp | 7 +++---- 3 files changed, 16 insertions(+), 10 deletions(-) (limited to 'protocols') diff --git a/protocols/JabberG/src/jabber_strm_mgmt.cpp b/protocols/JabberG/src/jabber_strm_mgmt.cpp index cc6d35f60d..93bacf04de 100644 --- a/protocols/JabberG/src/jabber_strm_mgmt.cpp +++ b/protocols/JabberG/src/jabber_strm_mgmt.cpp @@ -198,7 +198,8 @@ void strm_mgmt::HandleOutgoingNode(TiXmlElement *node) m_nStrmMgmtLocalSCount++; NodeCache.push_back(pNodeCopy); - if ((m_nStrmMgmtLocalSCount - m_nStrmMgmtSrvHCount) >= m_nStrmMgmtCacheSize) + if ((m_nStrmMgmtLocalSCount - m_nStrmMgmtSrvHCount) >= m_nStrmMgmtCacheSize + || m_nStrmMgmtLocalSCount % 3 == 0) RequestAck(); } @@ -213,14 +214,20 @@ void strm_mgmt::ResetState() m_sStrmMgmtResumeId.clear(); } -void strm_mgmt::HandleIncommingNode(const TiXmlElement *node) +bool strm_mgmt::HandleIncommingNode(const TiXmlElement *node) { - if (m_bStrmMgmtEnabled && mir_strcmp(node->Name(), "r") && mir_strcmp(node->Name(), "a")) //TODO: something better - m_nStrmMgmtLocalHCount++; - else if (!mir_strcmp(node->Name(), "r")) + if (!m_bStrmMgmtEnabled) + return false; + + if (!mir_strcmp(node->Name(), "r")) OnProcessSMr(node); else if (!mir_strcmp(node->Name(), "a")) OnProcessSMa(node); + else { + m_nStrmMgmtLocalHCount++; + return false; + } + return true; } void strm_mgmt::EnableStrmMgmt() diff --git a/protocols/JabberG/src/jabber_strm_mgmt.h b/protocols/JabberG/src/jabber_strm_mgmt.h index 82ea789f75..0cfa01f1df 100644 --- a/protocols/JabberG/src/jabber_strm_mgmt.h +++ b/protocols/JabberG/src/jabber_strm_mgmt.h @@ -48,7 +48,7 @@ public: strm_mgmt(CJabberProto *proto); void EnableStrmMgmt(); void HandleOutgoingNode(TiXmlElement *node); - void HandleIncommingNode(const TiXmlElement *node); + bool HandleIncommingNode(const TiXmlElement *node); void OnProcessEnabled(const TiXmlElement *node, ThreadData *info); void OnProcessResumed(const TiXmlElement *node, ThreadData *info); void OnProcessFailed(const TiXmlElement *node, ThreadData * info); diff --git a/protocols/JabberG/src/jabber_thread.cpp b/protocols/JabberG/src/jabber_thread.cpp index c39179463a..f3e1439c89 100644 --- a/protocols/JabberG/src/jabber_thread.cpp +++ b/protocols/JabberG/src/jabber_thread.cpp @@ -152,9 +152,6 @@ void CJabberProto::CheckKeepAlive() } } - if (m_bEnableStreamMgmt) - m_StrmMgmt.RequestAck(); - // check expired iq requests m_iqManager.CheckExpired(); @@ -836,7 +833,9 @@ void CJabberProto::OnProcessProtocol(const TiXmlElement *node, ThreadData *info) OnConsoleProcessXml(node, JCPF_IN); if (m_bEnableStreamMgmt) - m_StrmMgmt.HandleIncommingNode(node); + if(m_StrmMgmt.HandleIncommingNode(node)) + return; + if (!mir_strcmp(node->Name(), "proceed")) OnProcessProceed(node, info); else if (!mir_strcmp(node->Name(), "compressed")) -- cgit v1.2.3