From b62292bbe3f21887dc5ee4353ca9cf675f9aa3f3 Mon Sep 17 00:00:00 2001 From: Manuel Nickschas Date: Sun, 15 Mar 2020 20:18:20 +0100 Subject: [PATCH 1/1] ssl: Use Pending Connections mechanism for SslServer 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 | 23 +++++++---------------- src/core/sslserver.h | 5 ----- 2 files changed, 7 insertions(+), 21 deletions(-) diff --git a/src/core/sslserver.cpp b/src/core/sslserver.cpp index 9fceddd8..f7d35c34 100644 --- a/src/core/sslserver.cpp +++ b/src/core/sslserver.cpp @@ -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) { - auto* serverSocket = new QSslSocket(this); - if (serverSocket->setSocketDescriptor(socketDescriptor)) { + auto* socket = new QSslSocket(this); + if (socket->setSocketDescriptor(socketDescriptor)) { 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 { - delete serverSocket; + delete socket; } } diff --git a/src/core/sslserver.h b/src/core/sslserver.h index d91f28cf..eead9bfe 100644 --- a/src/core/sslserver.h +++ b/src/core/sslserver.h @@ -21,7 +21,6 @@ #pragma once #include -#include #include #include #include @@ -35,9 +34,6 @@ class SslServer : public QTcpServer 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; } @@ -73,7 +69,6 @@ private: MetricsServer* _metricsServer{nullptr}; - QLinkedList _pendingConnections; QSslCertificate _cert; QSslKey _key; QList _ca; -- 2.20.1