X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fircserverhandler.cpp;h=ae7736d9ae1bdc4dbd25b3cc316ea8f4e738289e;hp=288a8ab594826e8fdb7907a5c17535bd6b673207;hb=257ca0d5f944a8f63d002e1dcaaa3902258d85e0;hpb=5c5d13eed99c43a4dff477ac736f98b5d7569837 diff --git a/src/core/ircserverhandler.cpp b/src/core/ircserverhandler.cpp index 288a8ab5..ae7736d9 100644 --- a/src/core/ircserverhandler.cpp +++ b/src/core/ircserverhandler.cpp @@ -350,6 +350,23 @@ 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;