aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.qmake.conf2
-rw-r--r--src/imports/qmlwebsockets/qmlwebsockets_plugin.h9
-rw-r--r--src/websockets/qwebsocket.cpp13
-rw-r--r--src/websockets/qwebsocket.h2
-rw-r--r--src/websockets/qwebsocket_p.cpp22
-rw-r--r--tests/auto/websockets/qwebsocket/tst_qwebsocket.cpp8
-rw-r--r--tests/auto/websockets/qwebsocketserver/tst_qwebsocketserver.cpp8
7 files changed, 45 insertions, 19 deletions
diff --git a/.qmake.conf b/.qmake.conf
index b2354e6..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.1
+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)