ssl: Use Pending Connections mechanism for SslServer
authorManuel Nickschas <sputnick@quassel-irc.org>
Sun, 15 Mar 2020 19:18:20 +0000 (20:18 +0100)
committerManuel Nickschas <sputnick@quassel-irc.org>
Thu, 11 Jun 2020 11:57:32 +0000 (13:57 +0200)
Since Qt 4.7, it is no longer necessary to manage incoming connections
manually in specializations of QTcpServer. Instead, newly created
sockets can be added to the internal queue.

src/core/sslserver.cpp
src/core/sslserver.h

index 9fceddd..f7d35c3 100644 (file)
@@ -57,28 +57,19 @@ SslServer::SslServer(QObject* parent)
     }
 }
 
     }
 }
 
-QTcpSocket* SslServer::nextPendingConnection()
-{
-    if (_pendingConnections.isEmpty())
-        return nullptr;
-    else
-        return _pendingConnections.takeFirst();
-}
-
 void SslServer::incomingConnection(qintptr socketDescriptor)
 {
 void SslServer::incomingConnection(qintptr socketDescriptor)
 {
-    auto* serverSocket = new QSslSocket(this);
-    if (serverSocket->setSocketDescriptor(socketDescriptor)) {
+    auto* socket = new QSslSocket(this);
+    if (socket->setSocketDescriptor(socketDescriptor)) {
         if (isCertValid()) {
         if (isCertValid()) {
-            serverSocket->setLocalCertificate(_cert);
-            serverSocket->setPrivateKey(_key);
-            serverSocket->addCaCertificates(_ca);
+            socket->setLocalCertificate(_cert);
+            socket->setPrivateKey(_key);
+            socket->addCaCertificates(_ca);
         }
         }
-        _pendingConnections << serverSocket;
-        emit newConnection();
+        addPendingConnection(socket);
     }
     else {
     }
     else {
-        delete serverSocket;
+        delete socket;
     }
 }
 
     }
 }
 
index d91f28c..eead9bf 100644 (file)
@@ -21,7 +21,6 @@
 #pragma once
 
 #include <QFile>
 #pragma once
 
 #include <QFile>
-#include <QLinkedList>
 #include <QSslCertificate>
 #include <QSslKey>
 #include <QTcpServer>
 #include <QSslCertificate>
 #include <QSslKey>
 #include <QTcpServer>
@@ -35,9 +34,6 @@ class SslServer : public QTcpServer
 public:
     SslServer(QObject* parent = nullptr);
 
 public:
     SslServer(QObject* parent = nullptr);
 
-    bool hasPendingConnections() const override { return !_pendingConnections.isEmpty(); }
-    QTcpSocket* nextPendingConnection() override;
-
     const QSslCertificate& certificate() const { return _cert; }
     const QSslKey& key() const { return _key; }
     bool isCertValid() const { return _isCertValid; }
     const QSslCertificate& certificate() const { return _cert; }
     const QSslKey& key() const { return _key; }
     bool isCertValid() const { return _isCertValid; }
@@ -73,7 +69,6 @@ private:
 
     MetricsServer* _metricsServer{nullptr};
 
 
     MetricsServer* _metricsServer{nullptr};
 
-    QLinkedList<QTcpSocket*> _pendingConnections;
     QSslCertificate _cert;
     QSslKey _key;
     QList<QSslCertificate> _ca;
     QSslCertificate _cert;
     QSslKey _key;
     QList<QSslCertificate> _ca;