From 3e515d9f15c549fdec6b03ddb4bbd762e6fefc14 Mon Sep 17 00:00:00 2001 From: HanzZ Date: Mon, 3 Dec 2012 11:49:18 +0100 Subject: [PATCH] Do not disconnect backend if we received some data from it during ping timer period --- backends/libcommuni/session.cpp | 6 +++--- src/networkpluginserver.cpp | 8 ++++++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/backends/libcommuni/session.cpp b/backends/libcommuni/session.cpp index 025de37a..eda08a8d 100644 --- a/backends/libcommuni/session.cpp +++ b/backends/libcommuni/session.cpp @@ -48,7 +48,7 @@ void MyIrcSession::on_connected() { // } } - sendCommand(IrcCommand::createCapability("REQ", QStringList("away-notify"))); +// sendCommand(IrcCommand::createCapability("REQ", QStringList("away-notify"))); for(AutoJoinMap::iterator it = m_autoJoin.begin(); it != m_autoJoin.end(); it++) { sendCommand(IrcCommand::createJoin(FROM_UTF8(it->second->getChannel()), FROM_UTF8(it->second->getPassword()))); @@ -211,9 +211,9 @@ void MyIrcSession::on_numericMessageReceived(IrcMessage *message) { np->handleSubject(user, TO_UTF8(m->parameters().value(1)) + suffix, m_topicData, nick); break; case 352: - channel = m->parameters().value(1); - nick = TO_UTF8(m->parameters().value(5)); if (m->parameters().value(6).toUpper().startsWith("G")) { + channel = m->parameters().value(1); + nick = TO_UTF8(m->parameters().value(5)); np->handleParticipantChanged(user, nick, TO_UTF8(channel) + suffix, m_modes[TO_UTF8(channel) + nick], pbnetwork::STATUS_AWAY); } break; diff --git a/src/networkpluginserver.cpp b/src/networkpluginserver.cpp index 5061d1ce..43f136fd 100644 --- a/src/networkpluginserver.cpp +++ b/src/networkpluginserver.cpp @@ -941,6 +941,14 @@ void NetworkPluginServer::handleDataRead(Backend *c, boost::shared_ptrdata.erase(c->data.begin(), c->data.begin() + 4 + expected_size); + // If backend is slow and it is sending us lot of message, there is possibility + // that we don't receive PONG response before timeout. However, if we received + // at least some data, it means backend is not dead and we can treat it as + // PONG received event. + if (c->pongReceived == false) { + c->pongReceived = true; + } + // Handle payload in wrapper message switch(wrapper.type()) { case pbnetwork::WrapperMessage_Type_TYPE_CONNECTED: