diff options
-rw-r--r-- | .qmake.conf | 2 | ||||
-rw-r--r-- | src/imports/qmlwebsockets/qmlwebsockets_plugin.h | 9 | ||||
-rw-r--r-- | src/websockets/qwebsocket.cpp | 13 | ||||
-rw-r--r-- | src/websockets/qwebsocket.h | 2 | ||||
-rw-r--r-- | src/websockets/qwebsocket_p.cpp | 22 | ||||
-rw-r--r-- | tests/auto/websockets/qwebsocket/tst_qwebsocket.cpp | 8 | ||||
-rw-r--r-- | tests/auto/websockets/qwebsocketserver/tst_qwebsocketserver.cpp | 8 |
7 files changed, 45 insertions, 19 deletions
diff --git a/.qmake.conf b/.qmake.conf index 09d37b2..bc074d5 100644 --- a/.qmake.conf +++ b/.qmake.conf @@ -3,4 +3,4 @@ load(qt_build_config) CONFIG += warning_clean DEFINES += QT_NO_FOREACH -MODULE_VERSION = 5.11.2 +MODULE_VERSION = 5.12.0 diff --git a/src/imports/qmlwebsockets/qmlwebsockets_plugin.h b/src/imports/qmlwebsockets/qmlwebsockets_plugin.h index 749d830..0fc9435 100644 --- a/src/imports/qmlwebsockets/qmlwebsockets_plugin.h +++ b/src/imports/qmlwebsockets/qmlwebsockets_plugin.h @@ -42,13 +42,6 @@ #include <QQmlExtensionPlugin> -static void initResources() -{ -#ifdef QT_STATIC - Q_INIT_RESOURCE(qmake_QtWebSockets); -#endif -} - QT_BEGIN_NAMESPACE class QtWebSocketsDeclarativeModule : public QQmlExtensionPlugin @@ -57,7 +50,7 @@ class QtWebSocketsDeclarativeModule : public QQmlExtensionPlugin Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) public: - QtWebSocketsDeclarativeModule(QObject *parent = 0) : QQmlExtensionPlugin(parent) { initResources(); } + QtWebSocketsDeclarativeModule(QObject *parent = 0) : QQmlExtensionPlugin(parent) { } void registerTypes(const char *uri); }; diff --git a/src/websockets/qwebsocket.cpp b/src/websockets/qwebsocket.cpp index 1b0fc35..64d5e4c 100644 --- a/src/websockets/qwebsocket.cpp +++ b/src/websockets/qwebsocket.cpp @@ -772,4 +772,17 @@ bool QWebSocket::isValid() const return d->isValid(); } +/*! + \since 5.12 + Returns the number of bytes that are waiting to be written. The bytes are written when control + goes back to the event loop or when flush() is called. + + \sa flush + */ +qint64 QWebSocket::bytesToWrite() const +{ + Q_D(const QWebSocket); + return d->m_pSocket ? d->m_pSocket->bytesToWrite() : 0; +} + QT_END_NAMESPACE diff --git a/src/websockets/qwebsocket.h b/src/websockets/qwebsocket.h index a80c47a..b8742e8 100644 --- a/src/websockets/qwebsocket.h +++ b/src/websockets/qwebsocket.h @@ -113,6 +113,8 @@ public: QSslConfiguration sslConfiguration() const; #endif + qint64 bytesToWrite() const; + public Q_SLOTS: void close(QWebSocketProtocol::CloseCode closeCode = QWebSocketProtocol::CloseCodeNormal, const QString &reason = QString()); diff --git a/src/websockets/qwebsocket_p.cpp b/src/websockets/qwebsocket_p.cpp index f4ed311..45d6a6f 100644 --- a/src/websockets/qwebsocket_p.cpp +++ b/src/websockets/qwebsocket_p.cpp @@ -1104,16 +1104,18 @@ void QWebSocketPrivate::processStateChanged(QAbstractSocket::SocketState socketS headers << qMakePair(QString::fromLatin1(key), QString::fromLatin1(m_request.rawHeader(key))); - const QString handshake = - createHandShakeRequest(m_resourceName, - m_request.url().host() - % QStringLiteral(":") - % QString::number(m_request.url().port(port)), - origin(), - QString(), - QString(), - m_key, - headers); + const auto format = QUrl::RemoveScheme | QUrl::RemoveUserInfo + | QUrl::RemovePath | QUrl::RemoveQuery + | QUrl::RemoveFragment | QUrl::RemovePort; + const QString host = m_request.url().toString(format).mid(2); + const QString handshake = createHandShakeRequest(m_resourceName, + host % QStringLiteral(":") + % QString::number(m_request.url().port(port)), + origin(), + QString(), + QString(), + m_key, + headers); if (handshake.isEmpty()) { m_pSocket->abort(); Q_EMIT q->error(QAbstractSocket::ConnectionRefusedError); diff --git a/tests/auto/websockets/qwebsocket/tst_qwebsocket.cpp b/tests/auto/websockets/qwebsocket/tst_qwebsocket.cpp index ac54270..e80eeb1 100644 --- a/tests/auto/websockets/qwebsocket/tst_qwebsocket.cpp +++ b/tests/auto/websockets/qwebsocket/tst_qwebsocket.cpp @@ -434,9 +434,13 @@ void tst_QWebSocket::tst_sendTextMessage() QUrl urlConnected = arguments.at(0).toUrl(); QCOMPARE(urlConnected, url); + QCOMPARE(socket.bytesToWrite(), 0); socket.sendTextMessage(QStringLiteral("Hello world!")); + QVERIFY(socket.bytesToWrite() > 12); // 12 + a few extra bytes for header QVERIFY(textMessageReceived.wait(500)); + QCOMPARE(socket.bytesToWrite(), 0); + QCOMPARE(textMessageReceived.count(), 1); QCOMPARE(binaryMessageReceived.count(), 0); QCOMPARE(binaryFrameReceived.count(), 0); @@ -508,9 +512,13 @@ void tst_QWebSocket::tst_sendBinaryMessage() QTRY_COMPARE(socketConnectedSpy.count(), 1); QCOMPARE(socket.state(), QAbstractSocket::ConnectedState); + QCOMPARE(socket.bytesToWrite(), 0); socket.sendBinaryMessage(QByteArrayLiteral("Hello world!")); + QVERIFY(socket.bytesToWrite() > 12); // 12 + a few extra bytes for header QVERIFY(binaryMessageReceived.wait(500)); + QCOMPARE(socket.bytesToWrite(), 0); + QCOMPARE(textMessageReceived.count(), 0); QCOMPARE(textFrameReceived.count(), 0); QCOMPARE(binaryMessageReceived.count(), 1); diff --git a/tests/auto/websockets/qwebsocketserver/tst_qwebsocketserver.cpp b/tests/auto/websockets/qwebsocketserver/tst_qwebsocketserver.cpp index 8a3760d..a2f3c15 100644 --- a/tests/auto/websockets/qwebsocketserver/tst_qwebsocketserver.cpp +++ b/tests/auto/websockets/qwebsocketserver/tst_qwebsocketserver.cpp @@ -640,6 +640,14 @@ void tst_QWebSocketServer::tst_handleConnection() QTRY_COMPARE(wsMessageReceivedSpy.count(), 1); QList<QVariant> arguments = wsMessageReceivedSpy.takeFirst(); QCOMPARE(arguments.first().toString(), QString("dummy")); + + QSignalSpy clientMessageReceivedSpy(&webSocket, &QWebSocket::textMessageReceived); + webServerSocket->sendTextMessage("hello"); + QVERIFY(webServerSocket->bytesToWrite() > 5); // 5 + a few extra bytes for header + QTRY_COMPARE(webServerSocket->bytesToWrite(), 0); + QTRY_COMPARE(clientMessageReceivedSpy.count(), 1); + arguments = clientMessageReceivedSpy.takeFirst(); + QCOMPARE(arguments.first().toString(), QString("hello")); } QTEST_MAIN(tst_QWebSocketServer) |