diff options
author | Morten Johan Sørvig <morten.sorvig@qt.io> | 2018-06-22 13:35:32 +0200 |
---|---|---|
committer | Morten Johan Sørvig <morten.sorvig@qt.io> | 2018-06-22 19:57:31 +0000 |
commit | 56b3b6c14ef4153fb5d1173e29cd6093f61ffd8b (patch) | |
tree | 8bd107ef8272710a3bcda049150c0d08c135d197 | |
parent | 5c64a39482cba6ad4bc4337bd7475f96cfad9109 (diff) | |
download | qtwebsockets-wip/webassembly.tar.gz |
Forward Sec-WebSocket-Protocol headerwip/webassembly
Forward the WebSocket protocol header value to the
JavaScript WebSocket constructor. This is required
for use-cases like MQTT.
Change-Id: Ia58b5571661e83667c22bed57b0392bcef1eb67c
Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
-rw-r--r-- | src/websockets/qwebsocket_wasm_p.cpp | 29 | ||||
-rw-r--r-- | src/websockets/qwebsocket_wasm_p.h | 2 |
2 files changed, 20 insertions, 11 deletions
diff --git a/src/websockets/qwebsocket_wasm_p.cpp b/src/websockets/qwebsocket_wasm_p.cpp index db71cba..1c28a6e 100644 --- a/src/websockets/qwebsocket_wasm_p.cpp +++ b/src/websockets/qwebsocket_wasm_p.cpp @@ -410,32 +410,40 @@ void QWebSocketPrivate::open(const QNetworkRequest &request, bool mask) Q_EMIT q->error(QAbstractSocket::ConnectionRefusedError); return; } - QList <QByteArray> headerList = request.rawHeaderList(); - if (headerList.count() > 0) { - } + // HTML WebSockets do not support arbitrary request headers, but + // do support the WebSocket protocol header. This header is + // required for some use cases like MQTT. + QByteArray protocolHeaderValue = request.rawHeader("Sec-WebSocket-Protocol"); + jsRequest(url.toString(), + protocolHeaderValue, (void *)&onOpenCallback, (void *)&onCloseCallback, (void *)&onErrorCallback, (void *)&onIncomingMessageCallback); } -void QWebSocketPrivate::jsRequest(const QString &url, void *openCallback, void *closeCallback, void *errorCallback, void *incomingMessageCallback) +void QWebSocketPrivate::jsRequest(const QString &url, const QByteArray &protocolHeader, void *openCallback, void *closeCallback, void *errorCallback, void *incomingMessageCallback) { EM_ASM_ARGS({ var wsUri = Pointer_stringify($0); - var handler = $1; - var onOpenCallbackPointer = $2; - var onCloseCallback = $3; - var onErrorCallback = $4; - var onIncomingMessageCallback = $5; + var wsProtocol = Pointer_stringify($1); + var handler = $2; + var onOpenCallbackPointer = $3; + var onCloseCallback = $4; + var onErrorCallback = $5; + var onIncomingMessageCallback = $6; function connectWebSocket() { if (window.webSocker == undefined) { window.webSocker = {}; - window.webSocker = new WebSocket(wsUri); + if (wsProtocol.length > 0) { + window.webSocker = new WebSocket(wsUri, wsProtocol); + } else { + window.webSocker = new WebSocket(wsUri); + } window.webSocker.onopen = onOpen; window.webSocker.onclose = onClose; @@ -490,6 +498,7 @@ void QWebSocketPrivate::jsRequest(const QString &url, void *openCallback, void * connectWebSocket(); }, url.toLatin1().data(), + protocolHeader.constData(), this, (void *)openCallback, (void *)closeCallback, diff --git a/src/websockets/qwebsocket_wasm_p.h b/src/websockets/qwebsocket_wasm_p.h index b293f6c..383cdf7 100644 --- a/src/websockets/qwebsocket_wasm_p.h +++ b/src/websockets/qwebsocket_wasm_p.h @@ -219,7 +219,7 @@ private: friend class QWebSocketServerPrivate; - void jsRequest(const QString &url, void *openCallback, void *closeCallback, void *errorCallback, void *incomingMessageCallback); + void jsRequest(const QString &url, const QByteArray &protocol, void *openCallback, void *closeCallback, void *errorCallback, void *incomingMessageCallback); QAbstractSocket::SocketError m_lastError; }; |