X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fircserverhandler.cpp;h=58a230205d605a38d9feed3e4e091cced3f75809;hp=288a8ab594826e8fdb7907a5c17535bd6b673207;hb=ddba2696fe051b472d6670e225e67c2f6f1972ce;hpb=a33e42aee121185f479667b2104a15fc2033762e diff --git a/src/core/ircserverhandler.cpp b/src/core/ircserverhandler.cpp index 288a8ab5..58a23020 100644 --- a/src/core/ircserverhandler.cpp +++ b/src/core/ircserverhandler.cpp @@ -30,6 +30,7 @@ #include "ircuser.h" #include "ircchannel.h" +#include "logger.h" #include @@ -47,7 +48,7 @@ IrcServerHandler::~IrcServerHandler() { void IrcServerHandler::handleServerMsg(QByteArray msg) { try { if(msg.isEmpty()) { - qWarning() << "Received empty string from server!"; + quWarning() << "Received empty string from server!"; return; } @@ -67,7 +68,7 @@ void IrcServerHandler::handleServerMsg(QByteArray msg) { QList params = msg.split(' '); if(!trailing.isEmpty()) params << trailing; if(params.count() < 1) { - qWarning() << "Received invalid string from server!"; + quWarning() << "Received invalid string from server!"; return; } @@ -78,7 +79,7 @@ void IrcServerHandler::handleServerMsg(QByteArray msg) { foo.remove(0, 1); prefix = foo; if(params.count() < 1) { - qWarning() << "Received invalid string from server!"; + quWarning() << "Received invalid string from server!"; return; } foo = serverDecode(params.takeFirst()); @@ -91,7 +92,7 @@ void IrcServerHandler::handleServerMsg(QByteArray msg) { uint num = cmd.toUInt(); if(num > 0) { if(params.count() == 0) { - qWarning() << "Message received from server violates RFC and is ignored!"; + quWarning() << "Message received from server violates RFC and is ignored!"; return; } params.removeFirst(); @@ -153,7 +154,10 @@ void IrcServerHandler::defaultHandler(QString cmd, const QString &prefix, const // many nets define their own WHOIS fields. we fetch those not in need of special attention here: emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", "[Whois] " + params.join(" "), prefix); } else { - emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", cmd + " " + params.join(" "), prefix); + if(networkConnection()->coreSession()->ircListHelper()->requestInProgress(network()->networkId())) + networkConnection()->coreSession()->ircListHelper()->reportError(params.join(" ")); + else + emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", cmd + " " + params.join(" "), prefix); } } //qDebug() << prefix <<":"< else channel->removeUserMode(ircUser, QString(modes[c])); } else { - qWarning() << "Received MODE with too few parameters:" << serverDecode(params); + quWarning() << "Received MODE with too few parameters:" << serverDecode(params); } paramOffset++; } else { @@ -245,7 +249,7 @@ void IrcServerHandler::handleMode(const QString &prefix, const QList if(paramOffset < params.count()) { value = params[paramOffset]; } else { - qWarning() << "Received MODE with too few parameters:" << serverDecode(params); + quWarning() << "Received MODE with too few parameters:" << serverDecode(params); } paramOffset++; } @@ -294,7 +298,7 @@ void IrcServerHandler::handleNick(const QString &prefix, const QList IrcUser *ircuser = network()->updateNickFromMask(prefix); if(!ircuser) { - qWarning() << "IrcServerHandler::handleNick(): Unknown IrcUser!"; + quWarning() << "IrcServerHandler::handleNick(): Unknown IrcUser!"; return; } QString newnick = serverDecode(params[0]); @@ -331,7 +335,7 @@ void IrcServerHandler::handlePart(const QString &prefix, const QList IrcUser *ircuser = network()->updateNickFromMask(prefix); QString channel = serverDecode(params[0]); if(!ircuser) { - qWarning() << "IrcServerHandler::handlePart(): Unknown IrcUser!"; + quWarning() << "IrcServerHandler::handlePart(): Unknown IrcUser!"; return; } @@ -350,18 +354,35 @@ void IrcServerHandler::handlePing(const QString &prefix, const QList putCmd("PONG", params); } +void IrcServerHandler::handlePong(const QString &prefix, const QList ¶ms) { + Q_UNUSED(prefix); + // the server is supposed to send back what we passed as param. and we send a timestamp + // but using quote and whatnought one can send arbitrary pings, so we have to do some sanity checks + if(params.count() < 2) + return; + + QString timestamp = serverDecode(params[1]); + QTime sendTime = QTime::fromString(timestamp, "hh:mm:ss.zzz"); + if(!sendTime.isValid()) { + emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", "PONG " + serverDecode(params).join(" "), prefix); + return; + } + + network()->setLatency(sendTime.msecsTo(QTime::currentTime()) / 2); +} + void IrcServerHandler::handlePrivmsg(const QString &prefix, const QList ¶ms) { if(!checkParamCount("IrcServerHandler::handlePrivmsg()", params, 1)) return; IrcUser *ircuser = network()->updateNickFromMask(prefix); if(!ircuser) { - qWarning() << "IrcServerHandler::handlePrivmsg(): Unknown IrcUser!"; + quWarning() << "IrcServerHandler::handlePrivmsg(): Unknown IrcUser!"; return; } if(params.isEmpty()) { - qWarning() << "IrcServerHandler::handlePrivmsg(): received PRIVMSG without target or message from:" << prefix; + quWarning() << "IrcServerHandler::handlePrivmsg(): received PRIVMSG without target or message from:" << prefix; return; } @@ -842,7 +863,7 @@ void IrcServerHandler::handle353(const QString &prefix, const QList IrcChannel *channel = network()->ircChannel(channelname); if(!channel) { - qWarning() << "IrcServerHandler::handle353(): received unknown target channel:" << channelname; + quWarning() << "IrcServerHandler::handle353(): received unknown target channel:" << channelname; return; } @@ -926,7 +947,7 @@ void IrcServerHandler::tryNextNick(const QString &errnick) { bool IrcServerHandler::checkParamCount(const QString &methodName, const QList ¶ms, int minParams) { if(params.count() < minParams) { - qWarning() << qPrintable(methodName) << "requieres" << minParams << "parameters but received only" << params.count() << serverDecode(params); + quWarning() << qPrintable(methodName) << "requires" << minParams << "parameters but received only" << params.count() << serverDecode(params); return false; } else { return true;