summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;
};