diff options
-rw-r--r-- | protocols/JabberG/src/jabber_strm_mgmt.cpp | 17 | ||||
-rw-r--r-- | protocols/JabberG/src/jabber_strm_mgmt.h | 2 | ||||
-rw-r--r-- | protocols/JabberG/src/jabber_thread.cpp | 7 |
3 files changed, 16 insertions, 10 deletions
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"))
|