From: Daniel Albers Date: Sun, 29 Nov 2015 20:52:45 +0000 (+0100) Subject: Merge pull request #163 from esainane/fix-ssl-identd-race X-Git-Tag: travis-deploy-test~538 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=8832d69af719e187e398fa6cc86665c2cb9c211c;hp=73abdb11acdff97882a489c7bf98eb53967c2c6f Merge pull request #163 from esainane/fix-ssl-identd-race Fix ident race condition --- diff --git a/src/core/corenetwork.cpp b/src/core/corenetwork.cpp index c42325f9..dd1bf2e7 100644 --- a/src/core/corenetwork.cpp +++ b/src/core/corenetwork.cpp @@ -457,16 +457,24 @@ void CoreNetwork::socketInitialized() return; } - emit socketOpen(identity, localAddress(), localPort(), peerAddress(), peerPort()); - Server server = usedServer(); + #ifdef HAVE_SSL - if (server.useSsl && !socket.isEncrypted()) + // Non-SSL connections enter here only once, always emit socketInitialized(...) in these cases + // SSL connections call socketInitialized() twice, only emit socketInitialized(...) on the first (not yet encrypted) run + if (!server.useSsl || !socket.isEncrypted()) { + emit socketInitialized(identity, localAddress(), localPort(), peerAddress(), peerPort()); + } + + if (server.useSsl && !socket.isEncrypted()) { + // We'll finish setup once we're encrypted, and called again return; + } +#else + emit socketInitialized(identity, localAddress(), localPort(), peerAddress(), peerPort()); #endif - socket.setSocketOption(QAbstractSocket::KeepAliveOption, true); - emit socketInitialized(identity, localAddress(), localPort(), peerAddress(), peerPort()); + socket.setSocketOption(QAbstractSocket::KeepAliveOption, true); // TokenBucket to avoid sending too much at once _messageDelay = 2200; // this seems to be a safe value (2.2 seconds delay) diff --git a/src/core/corenetwork.h b/src/core/corenetwork.h index 8073d410..359d032e 100644 --- a/src/core/corenetwork.h +++ b/src/core/corenetwork.h @@ -165,7 +165,6 @@ signals: void sslErrors(const QVariant &errorData); void newEvent(Event *event); - void socketOpen(const CoreIdentity *identity, const QHostAddress &localAddress, quint16 localPort, const QHostAddress &peerAddress, quint16 peerPort); void socketInitialized(const CoreIdentity *identity, const QHostAddress &localAddress, quint16 localPort, const QHostAddress &peerAddress, quint16 peerPort); void socketDisconnected(const CoreIdentity *identity, const QHostAddress &localAddress, quint16 localPort, const QHostAddress &peerAddress, quint16 peerPort);