reenabling disconnect on timeout for iodevice connections
authorMarcus Eggenberger <egs@quassel-irc.org>
Mon, 20 Oct 2008 16:44:22 +0000 (18:44 +0200)
committerMarcus Eggenberger <egs@quassel-irc.org>
Tue, 21 Oct 2008 16:52:52 +0000 (18:52 +0200)
src/common/signalproxy.cpp
src/common/signalproxy.h

index d9d2b39..94aa063 100644 (file)
@@ -206,6 +206,14 @@ void SignalProxy::IODevicePeer::dispatchSignal(const RequestType &requestType, c
   dispatchPackedFunc(QVariant(packedFunc));
 }
 
+QString SignalProxy::IODevicePeer::address() const {
+  QAbstractSocket *socket = qobject_cast<QAbstractSocket *>(_device);
+  if(socket)
+    return socket->peerAddress().toString();
+  else
+    return QString();
+}
+
 void SignalProxy::SignalProxyPeer::dispatchSignal(const RequestType &requestType, const QVariantList &params) {
   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<QAbstractSocket *>(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;
   }
   
index a98e62d..9243608 100644 (file)
@@ -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 &params);
     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;