summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2017-01-25 11:03:47 +0100
committerLiang Qi <liang.qi@qt.io>2017-01-25 11:03:47 +0100
commitdfc91928f15302fa4e6c41802c60caec2c124942 (patch)
tree7c32786f83a45d9d8de8d989e9d54dcc0982d4e5 /src
parenta0aec91b676e2b79b8e66091d55d9e128bf2a1d0 (diff)
parent670266a075c7c312c6a7f9465298bfec0b968ee2 (diff)
downloadqtwebsockets-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.cpp10
-rw-r--r--src/websockets/doc/src/overview.qdoc2
-rw-r--r--src/websockets/qwebsocketdataprocessor.cpp14
-rw-r--r--src/websockets/qwebsockethandshakerequest.cpp16
-rw-r--r--src/websockets/qwebsocketserver.h4
-rw-r--r--src/websockets/qwebsocketserver_p.cpp8
-rw-r--r--src/websockets/qwebsocketserver_p.h2
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();
};