X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcore%2Fnetworkconnection.cpp;h=530ee32ba9c82b66594fc7e79b4f6a5399ae071f;hb=fd1833906d6d9d3a67c9aa92bffa35d1024e41a9;hp=56156e0defc57c8f7818d4d8aa17234d57c8c4ea;hpb=0f2de52ddceb138686d2f53c694531744d70f596;p=quassel.git diff --git a/src/core/networkconnection.cpp b/src/core/networkconnection.cpp index 56156e0d..530ee32b 100644 --- a/src/core/networkconnection.cpp +++ b/src/core/networkconnection.cpp @@ -36,40 +36,42 @@ #include "userinputhandler.h" #include "ctcphandler.h" -NetworkConnection::NetworkConnection(Network *network, CoreSession *session) : QObject(network), +NetworkConnection::NetworkConnection(Network *network, CoreSession *session) + : QObject(network), _connectionState(Network::Disconnected), _network(network), _coreSession(session), _ircServerHandler(new IrcServerHandler(this)), _userInputHandler(new UserInputHandler(this)), _ctcpHandler(new CtcpHandler(this)), - _autoReconnectCount(0) + _autoReconnectCount(0), + + _previousConnectionAttemptFailed(false), + _lastUsedServerlistIndex(0), + + // TODO make autowho configurable (possibly per-network) + _autoWhoEnabled(true), + _autoWhoInterval(90), + _autoWhoNickLimit(0), // unlimited + _autoWhoDelay(3), + + // TokenBucket to avaid sending too much at once + _messagesPerSecond(1), + _burstSize(5), + _tokenBucket(5), // init with a full bucket + + // TODO: + // should be 510 (2 bytes are added when writing to the socket) + // maxMsgSize is 510 minus the hostmask which will be added by the server + _maxMsgSize(450) { _autoReconnectTimer.setSingleShot(true); - _previousConnectionAttemptFailed = false; - _lastUsedServerlistIndex = 0; - - // TODO make autowho configurable (possibly per-network) - _autoWhoEnabled = true; - _autoWhoInterval = 90; - _autoWhoNickLimit = 0; // unlimited - _autoWhoDelay = 3; - _autoWhoTimer.setInterval(_autoWhoDelay * 1000); _autoWhoTimer.setSingleShot(false); _autoWhoCycleTimer.setInterval(_autoWhoInterval * 1000); _autoWhoCycleTimer.setSingleShot(false); - // TokenBucket to avaid sending too much at once - _messagesPerSecond = 1; - _burstSize = 5; - _tokenBucket = 5; // init with a full bucket - // TODO: - // should be 510 (2 bytes are added when writing to the socket) - // maxMsgSize is 510 minus the hostmask which will be added by the server - _maxMsgSize = 450; - _tokenBucketTimer.start(_messagesPerSecond * 1000); _tokenBucketTimer.setSingleShot(false); @@ -108,6 +110,7 @@ NetworkConnection::NetworkConnection(Network *network, CoreSession *session) : Q NetworkConnection::~NetworkConnection() { if(connectionState() != Network::Disconnected && connectionState() != Network::Reconnecting) disconnectFromIrc(false); // clean up, but this does not count as requested disconnect! + disconnect(&socket, 0, this, 0); // this keeps the socket from triggering events during clean up delete _ircServerHandler; delete _userInputHandler; delete _ctcpHandler; @@ -256,7 +259,9 @@ void NetworkConnection::disconnectFromIrc(bool requested) { if(socket.state() < QAbstractSocket::ConnectedState) { setConnectionState(Network::Disconnected); socketDisconnected(); - } else socket.disconnectFromHost(); + } else { + socket.disconnectFromHost(); + } if(requested) { emit quitRequested(networkId());