From: Marcus Eggenberger Date: Mon, 20 Oct 2008 16:44:22 +0000 (+0200) Subject: reenabling disconnect on timeout for iodevice connections X-Git-Tag: 0.3.1~143 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=cc0cad583046c34cb1296329016e1834995d171d reenabling disconnect on timeout for iodevice connections --- diff --git a/src/common/signalproxy.cpp b/src/common/signalproxy.cpp index d9d2b39d..94aa063f 100644 --- a/src/common/signalproxy.cpp +++ b/src/common/signalproxy.cpp @@ -206,6 +206,14 @@ void SignalProxy::IODevicePeer::dispatchSignal(const RequestType &requestType, c dispatchPackedFunc(QVariant(packedFunc)); } +QString SignalProxy::IODevicePeer::address() const { + QAbstractSocket *socket = qobject_cast(_device); + if(socket) + return socket->peerAddress().toString(); + else + return QString(); +} + void SignalProxy::SignalProxyPeer::dispatchSignal(const RequestType &requestType, const QVariantList ¶ms) { Qt::ConnectionType type = QThread::currentThread() == receiver->thread() ? Qt::DirectConnection @@ -1139,12 +1147,9 @@ void SignalProxy::sendHeartBeat() { updateLag(ioPeer, ioPeer->sentHeartBeats * _heartBeatTimer.interval()); } if(ioPeer->sentHeartBeats > 1) { - //FIXME: proper disconnect. -// QAbstractSocket *socket = qobject_cast(peerIter.key()); -// qWarning() << "SignalProxy: Disconnecting peer:" -// << (socket ? qPrintable(socket->peerAddress().toString()) : "local client") -// << "(didn't receive a heartbeat for over" << peerIter->sentHeartBeats * _heartBeatTimer.interval() / 1000 << "seconds)"; -// peerIter.key()->close(); + qWarning() << "SignalProxy: Disconnecting peer:" << ioPeer->address() + << "(didn't receive a heartbeat for over" << ioPeer->sentHeartBeats * _heartBeatTimer.interval() / 1000 << "seconds)"; + ioPeer->close(); } else { ioPeer->sentHeartBeats++; } @@ -1167,7 +1172,7 @@ void SignalProxy::receiveHeartBeatReply(AbstractPeer *peer, const QVariantList & ioPeer->sentHeartBeats = 0; if(params.isEmpty()) { - qWarning() << "SignalProxy: received heart beat reply with less params then sent from:" << ioPeer->device(); + qWarning() << "SignalProxy: received heart beat reply with less params then sent from:" << ioPeer->address(); return; } diff --git a/src/common/signalproxy.h b/src/common/signalproxy.h index a98e62dd..9243608f 100644 --- a/src/common/signalproxy.h +++ b/src/common/signalproxy.h @@ -201,8 +201,9 @@ private: IODevicePeer(QIODevice *device, bool compress) : AbstractPeer(AbstractPeer::IODevicePeer), _device(device), byteCount(0), usesCompression(compress), sentHeartBeats(0), lag(0) {} virtual void dispatchSignal(const RequestType &requestType, const QVariantList ¶ms); inline void dispatchPackedFunc(const QVariant &packedFunc) { SignalProxy::writeDataToDevice(_device, packedFunc, usesCompression); } - inline QIODevice *device() const { return _device; } + QString address() const; inline bool isOpen() const { return _device->isOpen(); } + inline void close() const { _device->close(); } inline bool readData(QVariant &item) { return SignalProxy::readDataFromDevice(_device, byteCount, item, usesCompression); } private: QIODevice *_device;