diff options
Diffstat (limited to 'src/network/ssl/qsslserver_p.h')
-rw-r--r-- | src/network/ssl/qsslserver_p.h | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/network/ssl/qsslserver_p.h b/src/network/ssl/qsslserver_p.h index b4b6490ed4..1b90d35d48 100644 --- a/src/network/ssl/qsslserver_p.h +++ b/src/network/ssl/qsslserver_p.h @@ -16,19 +16,53 @@ // We mean it. // +#include <QtNetwork/private/qtnetworkglobal_p.h> + +#include <QtCore/qhash.h> +#include <QtCore/qtimer.h> + #include <QtNetwork/QSslConfiguration> #include <QtNetwork/private/qtcpserver_p.h> +#include <utility> QT_BEGIN_NAMESPACE class Q_NETWORK_EXPORT QSslServerPrivate : public QTcpServerPrivate { + static constexpr int DefaultHandshakeTimeout = 5'000; // 5 seconds public: Q_DECLARE_PUBLIC(QSslServer) QSslServerPrivate(); + void checkClientHelloAndContinue(); + void initializeHandshakeProcess(QSslSocket *socket); + void removeSocketData(quintptr socket); + void handleHandshakeTimedOut(QSslSocket *socket); + int totalPendingConnections() const override; + + struct SocketData { + QMetaObject::Connection readyReadConnection; + QMetaObject::Connection destroyedConnection; + std::shared_ptr<QTimer> timeoutTimer; // shared_ptr because QHash demands copying + + SocketData(QMetaObject::Connection readyRead, QMetaObject::Connection destroyed, + std::shared_ptr<QTimer> &&timer) + : readyReadConnection(readyRead), + destroyedConnection(destroyed), + timeoutTimer(std::move(timer)) + { + } + + void disconnectSignals() + { + QObject::disconnect(std::exchange(readyReadConnection, {})); + QObject::disconnect(std::exchange(destroyedConnection, {})); + } + }; + QHash<quintptr, SocketData> socketData; QSslConfiguration sslConfiguration; + int handshakeTimeout = DefaultHandshakeTimeout; }; |