summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMorten Johan Sørvig <morten.sorvig@qt.io>2018-06-22 13:35:32 +0200
committerMorten Johan Sørvig <morten.sorvig@qt.io>2018-06-22 19:57:31 +0000
commit56b3b6c14ef4153fb5d1173e29cd6093f61ffd8b (patch)
tree8bd107ef8272710a3bcda049150c0d08c135d197
parent5c64a39482cba6ad4bc4337bd7475f96cfad9109 (diff)
downloadqtwebsockets-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.cpp29
-rw-r--r--src/websockets/qwebsocket_wasm_p.h2
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;
};