diff options
author | Liang Qi <liang.qi@qt.io> | 2017-01-25 11:03:47 +0100 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2017-01-25 11:03:47 +0100 |
commit | dfc91928f15302fa4e6c41802c60caec2c124942 (patch) | |
tree | 7c32786f83a45d9d8de8d989e9d54dcc0982d4e5 /src | |
parent | a0aec91b676e2b79b8e66091d55d9e128bf2a1d0 (diff) | |
parent | 670266a075c7c312c6a7f9465298bfec0b968ee2 (diff) | |
download | qtwebsockets-dfc91928f15302fa4e6c41802c60caec2c124942.tar.gz |
Merge remote-tracking branch 'origin/5.8' into dev
Conflicts:
.qmake.conf
Change-Id: If50b73b1f1e293269404bd8b38088119a0f59f1f
Diffstat (limited to 'src')
-rw-r--r-- | src/imports/qmlwebsockets/qqmlwebsocket.cpp | 10 | ||||
-rw-r--r-- | src/websockets/doc/src/overview.qdoc | 2 | ||||
-rw-r--r-- | src/websockets/qwebsocketdataprocessor.cpp | 14 | ||||
-rw-r--r-- | src/websockets/qwebsockethandshakerequest.cpp | 16 | ||||
-rw-r--r-- | src/websockets/qwebsocketserver.h | 4 | ||||
-rw-r--r-- | src/websockets/qwebsocketserver_p.cpp | 8 | ||||
-rw-r--r-- | src/websockets/qwebsocketserver_p.h | 2 |
7 files changed, 29 insertions, 27 deletions
diff --git a/src/imports/qmlwebsockets/qqmlwebsocket.cpp b/src/imports/qmlwebsockets/qqmlwebsocket.cpp index 9ff88d5..35f6259 100644 --- a/src/imports/qmlwebsockets/qqmlwebsocket.cpp +++ b/src/imports/qmlwebsockets/qqmlwebsocket.cpp @@ -63,11 +63,11 @@ The status can have the following values: \list - \li WebSockets.Connecting - \li WebSockets.Open - \li WebSockets.Closing - \li WebSockets.Closed - \li WebSockets.Error + \li WebSocket.Connecting + \li WebSocket.Open + \li WebSocket.Closing + \li WebSocket.Closed + \li WebSocket.Error \endlist */ diff --git a/src/websockets/doc/src/overview.qdoc b/src/websockets/doc/src/overview.qdoc index eb9e429..e85461a 100644 --- a/src/websockets/doc/src/overview.qdoc +++ b/src/websockets/doc/src/overview.qdoc @@ -39,7 +39,7 @@ Historically, web applications that needed bidirectional communication or push notifications had to use one of the HTTP-based solutions available. These solutions employed different techniques such as polling, long-polling, and streaming, to overcome the limitations of HTTP protocol, which is not designed -for such use cases. As a result, high network latency, unnecessary data +for such use cases. This resulted in high network latency, unnecessary data exchange, and stale or old data. The WebSocket offering by IETF helps to overcome these problems to a large extent. diff --git a/src/websockets/qwebsocketdataprocessor.cpp b/src/websockets/qwebsocketdataprocessor.cpp index 520ecdc..d9fc550 100644 --- a/src/websockets/qwebsocketdataprocessor.cpp +++ b/src/websockets/qwebsocketdataprocessor.cpp @@ -182,12 +182,16 @@ void QWebSocketDataProcessor::process(QIODevice *pIoDevice) } if (frame.isFinalFrame()) { - if (m_opCode == QWebSocketProtocol::OpCodeText) - Q_EMIT textMessageReceived(m_textMessage); - else - Q_EMIT binaryMessageReceived(m_binaryMessage); - clear(); isDone = true; + if (m_opCode == QWebSocketProtocol::OpCodeText) { + const QString textMessage(m_textMessage); + clear(); + Q_EMIT textMessageReceived(textMessage); + } else { + const QByteArray binaryMessage(m_binaryMessage); + clear(); + Q_EMIT binaryMessageReceived(binaryMessage); + } } } } else { diff --git a/src/websockets/qwebsockethandshakerequest.cpp b/src/websockets/qwebsockethandshakerequest.cpp index 81c5f97..ddeee2d 100644 --- a/src/websockets/qwebsockethandshakerequest.cpp +++ b/src/websockets/qwebsockethandshakerequest.cpp @@ -275,16 +275,12 @@ void QWebSocketHandshakeRequest::readHandshake(QTextStream &textStream, int maxH if (m_requestUrl.isRelative()) { // see http://tools.ietf.org/html/rfc6455#page-17 // No. 4 item in "The requirements for this handshake" - int idx = host.indexOf(QStringLiteral(":")); - bool ok = false; - int port = 0; - if (idx != -1) { - port = host.rightRef(host.length() - idx - 1).toInt(&ok); - host.truncate(idx); + m_requestUrl.setAuthority(host); + if (!m_requestUrl.userName().isNull()) { // If the username is null, the password must be too. + m_isValid = false; + clear(); + return; } - m_requestUrl.setHost(host); - if (ok) - m_requestUrl.setPort(port); } if (m_requestUrl.scheme().isEmpty()) { const QString scheme = isSecure() ? QStringLiteral("wss") : QStringLiteral("ws"); @@ -337,7 +333,7 @@ void QWebSocketHandshakeRequest::readHandshake(QTextStream &textStream, int maxH //TODO: authentication field - m_isValid = !(host.isEmpty() || + m_isValid = !(m_requestUrl.host().isEmpty() || resourceName.isEmpty() || m_versions.isEmpty() || m_key.isEmpty() || diff --git a/src/websockets/qwebsocketserver.h b/src/websockets/qwebsocketserver.h index 47113e4..511a55b 100644 --- a/src/websockets/qwebsocketserver.h +++ b/src/websockets/qwebsocketserver.h @@ -69,9 +69,9 @@ class Q_WEBSOCKETS_EXPORT QWebSocketServer : public QObject public: enum SslMode { #ifndef QT_NO_SSL - SecureMode, + SecureMode = 0, #endif - NonSecureMode + NonSecureMode = 1 }; explicit QWebSocketServer(const QString &serverName, SslMode secureMode, diff --git a/src/websockets/qwebsocketserver_p.cpp b/src/websockets/qwebsocketserver_p.cpp index 91bfafc..d675056 100644 --- a/src/websockets/qwebsocketserver_p.cpp +++ b/src/websockets/qwebsocketserver_p.cpp @@ -392,18 +392,20 @@ void QWebSocketServerPrivate::onNewConnection() QObjectPrivate::connect(pTcpSocket, &QTcpSocket::readyRead, this, &QWebSocketServerPrivate::handshakeReceived, Qt::QueuedConnection); + QObjectPrivate::connect(pTcpSocket, &QTcpSocket::disconnected, + this, &QWebSocketServerPrivate::onSocketDisconnected); } } /*! \internal */ -void QWebSocketServerPrivate::onCloseConnection() +void QWebSocketServerPrivate::onSocketDisconnected() { if (Q_LIKELY(currentSender)) { QTcpSocket *pTcpSocket = qobject_cast<QTcpSocket*>(currentSender->sender); if (Q_LIKELY(pTcpSocket)) - pTcpSocket->close(); + pTcpSocket->deleteLater(); } } @@ -433,7 +435,7 @@ void QWebSocketServerPrivate::handshakeReceived() this, &QWebSocketServerPrivate::handshakeReceived); Q_Q(QWebSocketServer); bool success = false; - bool isSecure = false; + bool isSecure = (m_secureMode == SecureMode); if (m_pendingConnections.length() >= maxPendingConnections()) { pTcpSocket->close(); diff --git a/src/websockets/qwebsocketserver_p.h b/src/websockets/qwebsocketserver_p.h index 46a2156..6aabebd 100644 --- a/src/websockets/qwebsocketserver_p.h +++ b/src/websockets/qwebsocketserver_p.h @@ -136,7 +136,7 @@ private: const QString &errorDescription); void onNewConnection(); - void onCloseConnection(); + void onSocketDisconnected(); void handshakeReceived(); }; |