+ uint now = QDateTime::currentDateTime().toTime_t();
+ if(_pingCount >= _maxPingCount && now - _lastPingTime <= (uint)(_pingTimer.interval() / 1000) + 1) {
+ // the second check compares the actual elapsed time since the last ping and the pingTimer interval
+ // if the interval is shorter then the actual elapsed time it means that this thread was somehow blocked
+ // and unable to even handle a ping answer. So we ignore those misses.
+ disconnectFromIrc(false, QString("No Ping reply in %1 seconds.").arg(_maxPingCount * _pingTimer.interval() / 1000), true /* withReconnect */);
+ } else {
+ _lastPingTime = now;
+ _pingCount++;
+ userInputHandler()->handlePing(BufferInfo(), QString());
+ }
+}
+
+void CoreNetwork::enablePingTimeout() {
+ resetPingTimeout();
+ _pingTimer.start();
+}
+
+void CoreNetwork::disablePingTimeout() {
+ _pingTimer.stop();
+ resetPingTimeout();