summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.qmake.conf2
-rw-r--r--examples/websockets/echoserver/echoserver.cpp1
-rw-r--r--examples/websockets/simplechat/chatserver.cpp3
-rw-r--r--examples/websockets/sslechoclient/sslechoclient.cpp3
-rw-r--r--examples/websockets/sslechoserver/sslechoserver.cpp4
-rw-r--r--src/imports/qmlwebsockets/plugins.qmltypes17
-rw-r--r--src/imports/qmlwebsockets/qmlwebsockets.pro2
-rw-r--r--src/imports/qmlwebsockets/qmlwebsockets_plugin.cpp1
-rw-r--r--src/imports/qmlwebsockets/qqmlwebsocket.cpp24
-rw-r--r--src/imports/qmlwebsockets/qqmlwebsocket.h3
-rw-r--r--src/websockets/qwebsocket_p.cpp9
-rw-r--r--tests/auto/qml/qmlwebsockets/tst_qmlwebsockets.qml25
12 files changed, 73 insertions, 21 deletions
diff --git a/.qmake.conf b/.qmake.conf
index 9a1a304..69f27df 100644
--- a/.qmake.conf
+++ b/.qmake.conf
@@ -2,4 +2,4 @@ load(qt_build_config)
CONFIG += warning_clean
-MODULE_VERSION = 5.7.0
+MODULE_VERSION = 5.8.0
diff --git a/examples/websockets/echoserver/echoserver.cpp b/examples/websockets/echoserver/echoserver.cpp
index 013ddc2..d4e3b65 100644
--- a/examples/websockets/echoserver/echoserver.cpp
+++ b/examples/websockets/echoserver/echoserver.cpp
@@ -59,7 +59,6 @@ EchoServer::EchoServer(quint16 port, bool debug, QObject *parent) :
QObject(parent),
m_pWebSocketServer(new QWebSocketServer(QStringLiteral("Echo Server"),
QWebSocketServer::NonSecureMode, this)),
- m_clients(),
m_debug(debug)
{
if (m_pWebSocketServer->listen(QHostAddress::Any, port)) {
diff --git a/examples/websockets/simplechat/chatserver.cpp b/examples/websockets/simplechat/chatserver.cpp
index 33e5d8d..5a0c998 100644
--- a/examples/websockets/simplechat/chatserver.cpp
+++ b/examples/websockets/simplechat/chatserver.cpp
@@ -57,8 +57,7 @@ QT_USE_NAMESPACE
//! [constructor]
ChatServer::ChatServer(quint16 port, QObject *parent) :
QObject(parent),
- m_pWebSocketServer(Q_NULLPTR),
- m_clients()
+ m_pWebSocketServer(Q_NULLPTR)
{
m_pWebSocketServer = new QWebSocketServer(QStringLiteral("Chat Server"),
QWebSocketServer::NonSecureMode,
diff --git a/examples/websockets/sslechoclient/sslechoclient.cpp b/examples/websockets/sslechoclient/sslechoclient.cpp
index cb15e35..3de2fec 100644
--- a/examples/websockets/sslechoclient/sslechoclient.cpp
+++ b/examples/websockets/sslechoclient/sslechoclient.cpp
@@ -56,8 +56,7 @@ QT_USE_NAMESPACE
//! [constructor]
SslEchoClient::SslEchoClient(const QUrl &url, QObject *parent) :
- QObject(parent),
- m_webSocket()
+ QObject(parent)
{
connect(&m_webSocket, &QWebSocket::connected, this, &SslEchoClient::onConnected);
typedef void (QWebSocket:: *sslErrorsSignal)(const QList<QSslError> &);
diff --git a/examples/websockets/sslechoserver/sslechoserver.cpp b/examples/websockets/sslechoserver/sslechoserver.cpp
index 777d8dd..ae5d9ad 100644
--- a/examples/websockets/sslechoserver/sslechoserver.cpp
+++ b/examples/websockets/sslechoserver/sslechoserver.cpp
@@ -60,8 +60,7 @@ QT_USE_NAMESPACE
//! [constructor]
SslEchoServer::SslEchoServer(quint16 port, QObject *parent) :
QObject(parent),
- m_pWebSocketServer(Q_NULLPTR),
- m_clients()
+ m_pWebSocketServer(Q_NULLPTR)
{
m_pWebSocketServer = new QWebSocketServer(QStringLiteral("SSL Echo Server"),
QWebSocketServer::SecureMode,
@@ -109,7 +108,6 @@ void SslEchoServer::onNewConnection()
connect(pSocket, &QWebSocket::binaryMessageReceived,
this, &SslEchoServer::processBinaryMessage);
connect(pSocket, &QWebSocket::disconnected, this, &SslEchoServer::socketDisconnected);
- //connect(pSocket, &QWebSocket::pong, this, &SslEchoServer::processPong);
m_clients << pSocket;
}
diff --git a/src/imports/qmlwebsockets/plugins.qmltypes b/src/imports/qmlwebsockets/plugins.qmltypes
index b79da44..cbbb628 100644
--- a/src/imports/qmlwebsockets/plugins.qmltypes
+++ b/src/imports/qmlwebsockets/plugins.qmltypes
@@ -4,15 +4,15 @@ import QtQuick.tooling 1.2
// It is used for QML tooling purposes only.
//
// This file was auto-generated by:
-// 'qmlplugindump -nonrelocatable QtWebSockets 1.0'
+// 'qmlplugindump -nonrelocatable QtWebSockets 1.1'
Module {
dependencies: []
Component {
name: "QQmlWebSocket"
prototype: "QObject"
- exports: ["QtWebSockets/WebSocket 1.0"]
- exportMetaObjectRevisions: [0]
+ exports: ["QtWebSockets/WebSocket 1.0", "QtWebSockets/WebSocket 1.1"]
+ exportMetaObjectRevisions: [0, 1]
Enum {
name: "Status"
values: {
@@ -32,6 +32,11 @@ Module {
Parameter { name: "message"; type: "string" }
}
Signal {
+ name: "binaryMessageReceived"
+ revision: 1
+ Parameter { name: "message"; type: "QByteArray" }
+ }
+ Signal {
name: "statusChanged"
Parameter { name: "status"; type: "Status" }
}
@@ -48,6 +53,12 @@ Module {
type: "qlonglong"
Parameter { name: "message"; type: "string" }
}
+ Method {
+ name: "sendBinaryMessage"
+ revision: 1
+ type: "qlonglong"
+ Parameter { name: "message"; type: "QByteArray" }
+ }
}
Component {
name: "QQmlWebSocketServer"
diff --git a/src/imports/qmlwebsockets/qmlwebsockets.pro b/src/imports/qmlwebsockets/qmlwebsockets.pro
index dea84a8..fef47f4 100644
--- a/src/imports/qmlwebsockets/qmlwebsockets.pro
+++ b/src/imports/qmlwebsockets/qmlwebsockets.pro
@@ -1,4 +1,4 @@
-QT = core websockets qml
+QT = core websockets qml qml-private core-private
TARGETPATH = QtWebSockets
diff --git a/src/imports/qmlwebsockets/qmlwebsockets_plugin.cpp b/src/imports/qmlwebsockets/qmlwebsockets_plugin.cpp
index 11c9dec..24fe34a 100644
--- a/src/imports/qmlwebsockets/qmlwebsockets_plugin.cpp
+++ b/src/imports/qmlwebsockets/qmlwebsockets_plugin.cpp
@@ -53,6 +53,7 @@ void QtWebSocketsDeclarativeModule::registerTypes(const char *uri)
// @uri QtWebSockets
qmlRegisterType<QQmlWebSocket>(uri, 1 /*major*/, 0 /*minor*/, "WebSocket");
+ qmlRegisterType<QQmlWebSocket, 1>(uri, 1 /*major*/, 1 /*minor*/, "WebSocket");
qmlRegisterType<QQmlWebSocketServer>(uri, 1 /*major*/, 0 /*minor*/, "WebSocketServer");
}
diff --git a/src/imports/qmlwebsockets/qqmlwebsocket.cpp b/src/imports/qmlwebsockets/qqmlwebsocket.cpp
index aea2c82..9ff88d5 100644
--- a/src/imports/qmlwebsockets/qqmlwebsocket.cpp
+++ b/src/imports/qmlwebsockets/qqmlwebsocket.cpp
@@ -90,6 +90,12 @@
*/
/*!
+ \qmlsignal WebSocket::binaryMessageReceived(QString message)
+ \since 5.8
+ This signal is emitted when a binary message is received.
+ */
+
+/*!
\qmlsignal WebSocket::statusChanged(Status status)
This signal is emitted when the status of the WebSocket changes.
the \l [QML]{WebSocket::status}{status} argument provides the current status.
@@ -102,6 +108,12 @@
Sends \c message to the server.
*/
+/*!
+ \qmlmethod void WebSocket::sendBinaryMessage(ArrayBuffer message)
+ \since 5.8
+ Sends \c message to the server.
+ */
+
#include "qqmlwebsocket.h"
#include <QtWebSockets/QWebSocket>
@@ -144,6 +156,16 @@ qint64 QQmlWebSocket::sendTextMessage(const QString &message)
return m_webSocket->sendTextMessage(message);
}
+qint64 QQmlWebSocket::sendBinaryMessage(const QByteArray &message)
+{
+ if (m_status != Open) {
+ setErrorString(tr("Messages can only be sent when the socket is open."));
+ setStatus(Error);
+ return 0;
+ }
+ return m_webSocket->sendBinaryMessage(message);
+}
+
QUrl QQmlWebSocket::url() const
{
return m_url;
@@ -198,6 +220,8 @@ void QQmlWebSocket::setSocket(QWebSocket *socket)
m_webSocket->setParent(Q_NULLPTR);
connect(m_webSocket.data(), &QWebSocket::textMessageReceived,
this, &QQmlWebSocket::textMessageReceived);
+ connect(m_webSocket.data(), &QWebSocket::binaryMessageReceived,
+ this, &QQmlWebSocket::binaryMessageReceived);
typedef void (QWebSocket::* ErrorSignal)(QAbstractSocket::SocketError);
connect(m_webSocket.data(), static_cast<ErrorSignal>(&QWebSocket::error),
this, &QQmlWebSocket::onError);
diff --git a/src/imports/qmlwebsockets/qqmlwebsocket.h b/src/imports/qmlwebsockets/qqmlwebsocket.h
index c5682ed..c3a808f 100644
--- a/src/imports/qmlwebsockets/qqmlwebsocket.h
+++ b/src/imports/qmlwebsockets/qqmlwebsocket.h
@@ -83,10 +83,11 @@ public:
bool isActive() const;
Q_INVOKABLE qint64 sendTextMessage(const QString &message);
-
+ Q_REVISION(1) Q_INVOKABLE qint64 sendBinaryMessage(const QByteArray &message);
Q_SIGNALS:
void textMessageReceived(QString message);
+ Q_REVISION(1) void binaryMessageReceived(QByteArray message);
void statusChanged(Status status);
void activeChanged(bool isActive);
void errorStringChanged(QString errorString);
diff --git a/src/websockets/qwebsocket_p.cpp b/src/websockets/qwebsocket_p.cpp
index 8cd7375..188df33 100644
--- a/src/websockets/qwebsocket_p.cpp
+++ b/src/websockets/qwebsocket_p.cpp
@@ -708,12 +708,11 @@ QByteArray QWebSocketPrivate::getFrameHeader(QWebSocketProtocol::OpCode opCode,
bool lastFrame)
{
QByteArray header;
- quint8 byte = 0x00;
bool ok = payloadLength <= 0x7FFFFFFFFFFFFFFFULL;
if (Q_LIKELY(ok)) {
//FIN, RSV1-3, opcode (RSV-1, RSV-2 and RSV-3 are zero)
- byte = static_cast<quint8>((opCode & 0x0F) | (lastFrame ? 0x80 : 0x00));
+ quint8 byte = static_cast<quint8>((opCode & 0x0F) | (lastFrame ? 0x80 : 0x00));
header.append(static_cast<char>(byte));
byte = 0x00;
@@ -773,7 +772,6 @@ qint64 QWebSocketPrivate::doWriteFrames(const QByteArray &data, bool isBinary)
if (Q_UNLIKELY(numFrames == 0))
numFrames = 1;
quint64 currentPosition = 0;
- qint64 bytesWritten = 0;
quint64 bytesLeft = data.size();
for (int i = 0; i < numFrames; ++i) {
@@ -789,7 +787,7 @@ qint64 QWebSocketPrivate::doWriteFrames(const QByteArray &data, bool isBinary)
: QWebSocketProtocol::OpCodeContinue;
//write header
- bytesWritten += m_pSocket->write(getFrameHeader(opcode, size, maskingKey, isLastFrame));
+ m_pSocket->write(getFrameHeader(opcode, size, maskingKey, isLastFrame));
//write payload
if (Q_LIKELY(size > 0)) {
@@ -798,7 +796,6 @@ qint64 QWebSocketPrivate::doWriteFrames(const QByteArray &data, bool isBinary)
QWebSocketProtocol::mask(currentData, size, maskingKey);
qint64 written = m_pSocket->write(currentData, static_cast<qint64>(size));
if (Q_LIKELY(written > 0)) {
- bytesWritten += written;
payloadWritten += written;
} else {
m_pSocket->flush();
@@ -881,7 +878,7 @@ qint64 QWebSocketPrivate::writeFrame(const QByteArray &frame)
/*!
\internal
*/
-QString readLine(QTcpSocket *pSocket)
+static QString readLine(QTcpSocket *pSocket)
{
Q_ASSERT(pSocket);
QString line;
diff --git a/tests/auto/qml/qmlwebsockets/tst_qmlwebsockets.qml b/tests/auto/qml/qmlwebsockets/tst_qmlwebsockets.qml
index a8d3225..d0f19f6 100644
--- a/tests/auto/qml/qmlwebsockets/tst_qmlwebsockets.qml
+++ b/tests/auto/qml/qmlwebsockets/tst_qmlwebsockets.qml
@@ -27,7 +27,7 @@
****************************************************************************/
import QtQuick 2.5
-import QtWebSockets 1.0
+import QtWebSockets 1.1
import QtTest 1.1
Rectangle {
@@ -84,5 +84,28 @@ Rectangle {
socket.sendTextMessage('hello');
tryCompare(socket, 'status', WebSocket.Error);
}
+
+ function test_send_receive_binary() {
+ ensureConnected();
+
+ var o = {};
+ var sending = new Uint8Array([42, 43]);
+ server.currentSocket.binaryMessageReceived.connect(function(received) {
+ var view = new DataView(received);
+ compare(received.byteLength, sending.length);
+ compare(view.getUInt8(0), sending[0]);
+ compare(view.getUInt8(1), sending[1]);
+ o.called = true;
+ });
+
+ socket.sendBinaryMessage(sending.buffer);
+ tryCompare(o, 'called', true);
+ }
+
+ function test_send_binary_error_closed() {
+ ensureDisconnected();
+ socket.sendBinaryMessage('hello');
+ tryCompare(socket, 'status', WebSocket.Error);
+ }
}
}