From 4321fd13ac58e5bebe4d564431e9c18b627598bc Mon Sep 17 00:00:00 2001 From: Jesus Fernandez <jesus.fernandez@qt.io> Date: Fri, 10 Aug 2018 14:08:29 +0200 Subject: [PATCH] Fix implicit conversion warning MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Marks the old functions as deprecated and adds new safe versions.The new functions give access to the native descriptor safely. It also fixes the original functions in Qt 6. warning: implicit conversion loses integer precision: 'qintptr' (aka 'long long') to 'int' Change-Id: I59177905af0181912d2e7824ce68265cb8ee03d9 Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io> Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io> --- src/websockets/qwebsocketserver.cpp | 96 ++++++++++++++++++- src/websockets/qwebsocketserver.h | 14 ++- .../qwebsocketserver/tst_qwebsocketserver.cpp | 13 +++ 3 files changed, 120 insertions(+), 3 deletions(-) diff --git a/src/websockets/qwebsocketserver.cpp b/src/websockets/qwebsocketserver.cpp index 7368596a..7790250e 100644 --- a/src/websockets/qwebsocketserver.cpp +++ b/src/websockets/qwebsocketserver.cpp @@ -574,6 +574,7 @@ void QWebSocketServer::setMaxPendingConnections(int numConnections) d->setMaxPendingConnections(numConnections); } +#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) /*! Sets the socket descriptor this server should use when listening for incoming connections to \a socketDescriptor. @@ -582,8 +583,9 @@ void QWebSocketServer::setMaxPendingConnections(int numConnections) The socket is assumed to be in listening state. \sa socketDescriptor(), isListening() + \since 5.3 */ -bool QWebSocketServer::setSocketDescriptor(int socketDescriptor) +bool QWebSocketServer::setSocketDescriptor(qintptr socketDescriptor) { Q_D(QWebSocketServer); return d->setSocketDescriptor(socketDescriptor); @@ -596,12 +598,104 @@ bool QWebSocketServer::setSocketDescriptor(int socketDescriptor) native socket functions. \sa setSocketDescriptor(), isListening() + \since 5.3 + */ +qintptr QWebSocketServer::socketDescriptor() const +{ + Q_D(const QWebSocketServer); + return d->socketDescriptor(); +} + +/*! + \fn QWebSocketServer::nativeDescriptor + \deprecated + + Returns the native socket descriptor the server uses to listen for incoming instructions, + or -1 if the server is not listening. + If the server is using QNetworkProxy, the returned descriptor may not be usable with + native socket functions. + + \sa socketDescriptor(), setSocketDescriptor(), setNativeDescriptor(), isListening() + \since 5.12 + */ +/*! + \fn QWebSocketServer::setNativeDescriptor + \deprecated + + Sets the socket descriptor this server should use when listening for incoming connections to + \a socketDescriptor. + + Returns true if the socket is set successfully; otherwise returns false. + The socket is assumed to be in listening state. + + \sa socketDescriptor(), setSocketDescriptor(), nativeDescriptor(), isListening() + \since 5.12 + */ +#else // ### Qt 6: Remove leftovers +/*! + \deprecated + + Sets the socket descriptor this server should use when listening for incoming connections to + \a socketDescriptor. + + Returns true if the socket is set successfully; otherwise returns false. + The socket is assumed to be in listening state. + + \sa socketDescriptor(), setSocketDescriptor(), nativeDescriptor(), isListening() + \since 5.3 + */ +bool QWebSocketServer::setSocketDescriptor(int socketDescriptor) +{ + return setNativeDescriptor(socketDescriptor); +} + +/*! + \deprecated + + Returns the native socket descriptor the server uses to listen for incoming instructions, + or -1 if the server is not listening. + If the server is using QNetworkProxy, the returned descriptor may not be usable with + native socket functions. + + \sa nativeDescriptor(), setNativeDescriptor(), setSocketDescriptor(), isListening() + \since 5.3 */ int QWebSocketServer::socketDescriptor() const +{ + return int(nativeDescriptor()); +} + +/*! + Sets the socket descriptor this server should use when listening for incoming connections to + \a socketDescriptor. + + Returns true if the socket is set successfully; otherwise returns false. + The socket is assumed to be in listening state. + + \sa nativeDescriptor(), isListening() + \since 5.12 + */ +bool QWebSocketServer::setNativeDescriptor(qintptr socketDescriptor) +{ + Q_D(QWebSocketServer); + return d->setSocketDescriptor(socketDescriptor); +} + +/*! + Returns the native socket descriptor the server uses to listen for incoming instructions, + or -1 if the server is not listening. + If the server is using QNetworkProxy, the returned descriptor may not be usable with + native socket functions. + + \sa setNativeDescriptor(), isListening() + \since 5.12 + */ +qintptr QWebSocketServer::nativeDescriptor() const { Q_D(const QWebSocketServer); return d->socketDescriptor(); } +#endif // (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) /*! Returns a list of WebSocket versions that this server is supporting. diff --git a/src/websockets/qwebsocketserver.h b/src/websockets/qwebsocketserver.h index 890f2d68..17d53762 100644 --- a/src/websockets/qwebsocketserver.h +++ b/src/websockets/qwebsocketserver.h @@ -92,8 +92,18 @@ public: SslMode secureMode() const; - bool setSocketDescriptor(int socketDescriptor); - int socketDescriptor() const; +#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) + bool setSocketDescriptor(qintptr socketDescriptor); + qintptr socketDescriptor() const; + bool setNativeDescriptor(qintptr descriptor) { return setSocketDescriptor(descriptor); } + qintptr nativeDescriptor() const { return socketDescriptor(); } +#else // ### Qt 6: Remove leftovers + Q_DECL_DEPRECATED_X("Use setNativeDescriptor") bool setSocketDescriptor(int socketDescriptor); + Q_DECL_DEPRECATED_X("Use nativeDescriptor") int socketDescriptor() const; + bool setNativeDescriptor(qintptr descriptor); + qintptr nativeDescriptor() const; +#endif // (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) + bool hasPendingConnections() const; virtual QWebSocket *nextPendingConnection(); diff --git a/tests/auto/websockets/qwebsocketserver/tst_qwebsocketserver.cpp b/tests/auto/websockets/qwebsocketserver/tst_qwebsocketserver.cpp index a2f3c150..2f176193 100644 --- a/tests/auto/websockets/qwebsocketserver/tst_qwebsocketserver.cpp +++ b/tests/auto/websockets/qwebsocketserver/tst_qwebsocketserver.cpp @@ -191,7 +191,11 @@ void tst_QWebSocketServer::tst_initialisation() QCOMPARE(server.maxPendingConnections(), 30); QCOMPARE(server.serverPort(), quint16(0)); QCOMPARE(server.serverAddress(), QHostAddress()); +#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) QCOMPARE(server.socketDescriptor(), -1); +#else // ### Qt 6: Remove leftovers + QCOMPARE(server.nativeDescriptor(), -1); +#endif // (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) QVERIFY(!server.hasPendingConnections()); QVERIFY(!server.nextPendingConnection()); QCOMPARE(server.error(), QWebSocketProtocol::CloseCodeNormal); @@ -216,7 +220,11 @@ void tst_QWebSocketServer::tst_initialisation() QCOMPARE(server.maxPendingConnections(), 30); QCOMPARE(server.serverPort(), quint16(0)); QCOMPARE(server.serverAddress(), QHostAddress()); +#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) QCOMPARE(server.socketDescriptor(), -1); +#else // ### Qt 6: Remove leftovers + QCOMPARE(server.nativeDescriptor(), -1); +#endif // (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) QVERIFY(!server.hasPendingConnections()); QVERIFY(!server.nextPendingConnection()); QCOMPARE(server.error(), QWebSocketProtocol::CloseCodeNormal); @@ -252,8 +260,13 @@ void tst_QWebSocketServer::tst_settersAndGetters() server.setMaxPendingConnections(INT_MAX); QCOMPARE(server.maxPendingConnections(), INT_MAX); +#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) QVERIFY(!server.setSocketDescriptor(-2)); QCOMPARE(server.socketDescriptor(), -1); +#else // ### Qt 6: Remove leftovers + QVERIFY(!server.setNativeDescriptor(-2)); + QCOMPARE(server.nativeDescriptor(), -1); +#endif // (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) server.setServerName(QStringLiteral("Qt WebSocketServer")); QCOMPARE(server.serverName(), QStringLiteral("Qt WebSocketServer")); -- GitLab