summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2017-10-30 07:46:31 (GMT)
committerLiang Qi <liang.qi@qt.io>2017-10-30 07:46:31 (GMT)
commita99beb2c7b5867aac0e5ae997042cc88c0f6a175 (patch)
tree8d2022a94099c17be4a5ff3fd429731a260190a2
parentcd26439ac7ca1a444e9b5534a504afb0bb411890 (diff)
parent203da360c4bcd64bdd17639d495f1857b622e92d (diff)
downloadqtwebsockets-a99beb2c7b5867aac0e5ae997042cc88c0f6a175.tar.gz
Merge remote-tracking branch 'origin/5.9' into 5.10
Change-Id: I3ae5df71f201cfdb9a4c9e7d90a60d1f9792700a
-rw-r--r--src/websockets/doc/snippets/src_websockets_ssl_qwebsocket.cpp8
-rw-r--r--src/websockets/doc/src/external-resources.qdoc10
-rw-r--r--src/websockets/doc/src/index.qdoc8
-rw-r--r--src/websockets/doc/src/overview.qdoc10
-rw-r--r--src/websockets/doc/src/qtwebsockets-module.qdoc8
-rw-r--r--src/websockets/qwebsocket_p.cpp3
-rw-r--r--src/websockets/qwebsocketserver_p.cpp5
-rw-r--r--tests/auto/websockets/qwebsocketserver/tst_qwebsocketserver.cpp58
8 files changed, 54 insertions, 56 deletions
diff --git a/src/websockets/doc/snippets/src_websockets_ssl_qwebsocket.cpp b/src/websockets/doc/snippets/src_websockets_ssl_qwebsocket.cpp
index 9ce9ef0..78874a3 100644
--- a/src/websockets/doc/snippets/src_websockets_ssl_qwebsocket.cpp
+++ b/src/websockets/doc/snippets/src_websockets_ssl_qwebsocket.cpp
@@ -1,7 +1,7 @@
/****************************************************************************
**
** Copyright (C) 2013 Kurt Pattyn <pattyn.kurt@gmail.com>
-** Contact: http://www.qt.io/licensing/
+** Contact: https://www.qt.io/licensing/
**
** This file is part of the documentation of the Qt Toolkit.
**
@@ -11,8 +11,8 @@
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
@@ -20,7 +20,7 @@
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
-** will be met: http://www.gnu.org/copyleft/fdl.html.
+** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/
diff --git a/src/websockets/doc/src/external-resources.qdoc b/src/websockets/doc/src/external-resources.qdoc
index 933ef7f..40e4257 100644
--- a/src/websockets/doc/src/external-resources.qdoc
+++ b/src/websockets/doc/src/external-resources.qdoc
@@ -1,7 +1,7 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
**
** This file is part of the documentation of the Qt Toolkit.
**
@@ -11,8 +11,8 @@
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
@@ -20,7 +20,7 @@
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
-** will be met: http://www.gnu.org/copyleft/fdl.html.
+** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/
diff --git a/src/websockets/doc/src/index.qdoc b/src/websockets/doc/src/index.qdoc
index 4f25589..919e2fc 100644
--- a/src/websockets/doc/src/index.qdoc
+++ b/src/websockets/doc/src/index.qdoc
@@ -1,7 +1,7 @@
/****************************************************************************
**
** Copyright (C) 2013 Kurt Pattyn <pattyn.kurt@gmail.com>
-** Contact: http://www.qt.io/licensing/
+** Contact: https://www.qt.io/licensing/
**
** This file is part of the documentation of the Qt Toolkit.
**
@@ -11,8 +11,8 @@
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
@@ -20,7 +20,7 @@
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
-** will be met: http://www.gnu.org/copyleft/fdl.html.
+** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/
diff --git a/src/websockets/doc/src/overview.qdoc b/src/websockets/doc/src/overview.qdoc
index e85461a..48a790f 100644
--- a/src/websockets/doc/src/overview.qdoc
+++ b/src/websockets/doc/src/overview.qdoc
@@ -1,7 +1,7 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
**
** This file is part of the documentation of the Qt Toolkit.
**
@@ -11,8 +11,8 @@
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
@@ -20,7 +20,7 @@
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
-** will be met: http://www.gnu.org/copyleft/fdl.html.
+** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/
diff --git a/src/websockets/doc/src/qtwebsockets-module.qdoc b/src/websockets/doc/src/qtwebsockets-module.qdoc
index 971e22c..c1f7958 100644
--- a/src/websockets/doc/src/qtwebsockets-module.qdoc
+++ b/src/websockets/doc/src/qtwebsockets-module.qdoc
@@ -1,7 +1,7 @@
/****************************************************************************
**
** Copyright (C) 2013 Kurt Pattyn <pattyn.kurt@gmail.com>
-** Contact: http://www.qt.io/licensing/
+** Contact: https://www.qt.io/licensing/
**
** This file is part of the documentation of the Qt Toolkit.
**
@@ -11,8 +11,8 @@
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
@@ -20,7 +20,7 @@
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
-** will be met: http://www.gnu.org/copyleft/fdl.html.
+** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/
diff --git a/src/websockets/qwebsocket_p.cpp b/src/websockets/qwebsocket_p.cpp
index 6abffdc..1d23c84 100644
--- a/src/websockets/qwebsocket_p.cpp
+++ b/src/websockets/qwebsocket_p.cpp
@@ -596,6 +596,9 @@ void QWebSocketPrivate::makeConnections(const QTcpSocket *pTcpSocket)
QObject::connect(sslSocket, &QSslSocket::encryptedBytesWritten, q,
&QWebSocket::bytesWritten);
typedef void (QSslSocket:: *sslErrorSignalType)(const QList<QSslError> &);
+ QObjectPrivate::connect(sslSocket,
+ static_cast<sslErrorSignalType>(&QSslSocket::sslErrors),
+ this, &QWebSocketPrivate::_q_updateSslConfiguration);
QObject::connect(sslSocket,
static_cast<sslErrorSignalType>(&QSslSocket::sslErrors),
q, &QWebSocket::sslErrors);
diff --git a/src/websockets/qwebsocketserver_p.cpp b/src/websockets/qwebsocketserver_p.cpp
index b7972b0..55e9484 100644
--- a/src/websockets/qwebsocketserver_p.cpp
+++ b/src/websockets/qwebsocketserver_p.cpp
@@ -490,6 +490,11 @@ void QWebSocketServerPrivate::handleConnection(QTcpSocket *pTcpSocket) const
QObjectPrivate::connect(pTcpSocket, &QTcpSocket::readyRead,
this, &QWebSocketServerPrivate::handshakeReceived,
Qt::QueuedConnection);
+ if (pTcpSocket->canReadLine()) {
+ // We received some data! We must emit now to be sure that handshakeReceived is called
+ // since the data could have been received before the signal and slot was connected.
+ emit pTcpSocket->readyRead();
+ }
QObjectPrivate::connect(pTcpSocket, &QTcpSocket::disconnected,
this, &QWebSocketServerPrivate::onSocketDisconnected);
}
diff --git a/tests/auto/websockets/qwebsocketserver/tst_qwebsocketserver.cpp b/tests/auto/websockets/qwebsocketserver/tst_qwebsocketserver.cpp
index 8f3e293..8a3760d 100644
--- a/tests/auto/websockets/qwebsocketserver/tst_qwebsocketserver.cpp
+++ b/tests/auto/websockets/qwebsocketserver/tst_qwebsocketserver.cpp
@@ -31,9 +31,9 @@
#include <QTcpServer>
#ifndef QT_NO_OPENSSL
#include <QtNetwork/qsslpresharedkeyauthenticator.h>
-#include <QtNetwork/qsslcipher.h>
#endif
#ifndef QT_NO_SSL
+#include <QtNetwork/qsslcipher.h>
#include <QtNetwork/qsslkey.h>
#endif
#include <QtWebSockets/QWebSocketServer>
@@ -301,7 +301,7 @@ void tst_QWebSocketServer::tst_listening()
QVERIFY(server.isListening());
QCOMPARE(serverClosedSpy.count(), 0);
server.close();
- QVERIFY(serverClosedSpy.wait(1000));
+ QTRY_COMPARE(serverClosedSpy.count(), 1);
QVERIFY(!server.isListening());
QCOMPARE(serverErrorSpy.count(), 0);
@@ -347,8 +347,7 @@ void tst_QWebSocketServer::tst_connectivity()
socket.open(server.serverUrl().toString());
- if (socketConnectedSpy.count() == 0)
- QVERIFY(socketConnectedSpy.wait());
+ QTRY_COMPARE(socketConnectedSpy.count(), 1);
QCOMPARE(socket.state(), QAbstractSocket::ConnectedState);
QCOMPARE(serverConnectionSpy.count(), 1);
QCOMPARE(corsAuthenticationSpy.count(), 1);
@@ -357,8 +356,7 @@ void tst_QWebSocketServer::tst_connectivity()
server.close();
- QVERIFY(serverClosedSpy.wait());
- QCOMPARE(serverClosedSpy.count(), 1);
+ QTRY_COMPARE(serverClosedSpy.count(), 1);
#ifndef QT_NO_SSL
QCOMPARE(peerVerifyErrorSpy.count(), 0);
QCOMPARE(sslErrorsSpy.count(), 0);
@@ -429,8 +427,7 @@ void tst_QWebSocketServer::tst_preSharedKey()
socket.open(server.serverUrl().toString());
- if (socketConnectedSpy.count() == 0)
- QVERIFY(socketConnectedSpy.wait());
+ QTRY_COMPARE(socketConnectedSpy.count(), 1);
QCOMPARE(socket.state(), QAbstractSocket::ConnectedState);
QCOMPARE(serverConnectionSpy.count(), 1);
QCOMPARE(serverPskRequiredSpy.count(), 1);
@@ -440,8 +437,7 @@ void tst_QWebSocketServer::tst_preSharedKey()
server.close();
- QVERIFY(serverClosedSpy.wait());
- QCOMPARE(serverClosedSpy.count(), 1);
+ QTRY_COMPARE(serverClosedSpy.count(), 1);
QCOMPARE(sslErrorsSpy.count(), 0);
QCOMPARE(serverErrorSpy.count(), 0);
#endif
@@ -480,20 +476,18 @@ void tst_QWebSocketServer::tst_maxPendingConnections()
socket1.open(server.serverUrl().toString());
- if (socket1ConnectedSpy.count() == 0)
- QVERIFY(socket1ConnectedSpy.wait());
+ QTRY_COMPARE(socket1ConnectedSpy.count(), 1);
QCOMPARE(socket1.state(), QAbstractSocket::ConnectedState);
QCOMPARE(serverConnectionSpy.count(), 1);
QCOMPARE(corsAuthenticationSpy.count(), 1);
socket2.open(server.serverUrl().toString());
- if (socket2ConnectedSpy.count() == 0)
- QVERIFY(socket2ConnectedSpy.wait());
+ QTRY_COMPARE(socket2ConnectedSpy.count(), 1);
QCOMPARE(socket2.state(), QAbstractSocket::ConnectedState);
QCOMPARE(serverConnectionSpy.count(), 2);
QCOMPARE(corsAuthenticationSpy.count(), 2);
socket3.open(server.serverUrl().toString());
- if (socket3ConnectedSpy.count() == 0)
- QVERIFY(!socket3ConnectedSpy.wait(250));
+ QVERIFY(!socket3ConnectedSpy.wait(250));
+ QCOMPARE(socket3ConnectedSpy.count(), 0);
QCOMPARE(socket3.state(), QAbstractSocket::UnconnectedState);
QCOMPARE(serverConnectionSpy.count(), 2);
QCOMPARE(corsAuthenticationSpy.count(), 2);
@@ -519,8 +513,7 @@ void tst_QWebSocketServer::tst_maxPendingConnections()
server.close();
- QVERIFY(serverClosedSpy.wait());
- QCOMPARE(serverClosedSpy.count(), 1);
+ QTRY_COMPARE(serverClosedSpy.count(), 1);
#ifndef QT_NO_SSL
QCOMPARE(peerVerifyErrorSpy.count(), 0);
QCOMPARE(sslErrorsSpy.count(), 0);
@@ -550,8 +543,7 @@ void tst_QWebSocketServer::tst_serverDestroyedWhileSocketConnected()
socket.open(server->serverUrl().toString());
- if (socketConnectedSpy.count() == 0)
- QVERIFY(socketConnectedSpy.wait());
+ QTRY_COMPARE(socketConnectedSpy.count(), 1);
QCOMPARE(socket.state(), QAbstractSocket::ConnectedState);
QCOMPARE(serverConnectionSpy.count(), 1);
QCOMPARE(corsAuthenticationSpy.count(), 1);
@@ -560,9 +552,7 @@ void tst_QWebSocketServer::tst_serverDestroyedWhileSocketConnected()
delete server;
- if (socketDisconnectedSpy.count() == 0)
- QVERIFY(socketDisconnectedSpy.wait());
- QCOMPARE(socketDisconnectedSpy.count(), 1);
+ QTRY_COMPARE(socketDisconnectedSpy.count(), 1);
}
void tst_QWebSocketServer::tst_scheme()
@@ -578,8 +568,7 @@ void tst_QWebSocketServer::tst_scheme()
QWebSocket plainSocket;
plainSocket.open(plainServer.serverUrl().toString());
- if (plainServerConnectionSpy.count() == 0)
- QVERIFY(plainServerConnectionSpy.wait());
+ QTRY_COMPARE(plainServerConnectionSpy.count(), 1);
QScopedPointer<QWebSocket> plainServerSocket(plainServer.nextPendingConnection());
QVERIFY(!plainServerSocket.isNull());
QCOMPARE(plainServerSocket->requestUrl().scheme(), QStringLiteral("ws"));
@@ -605,18 +594,21 @@ void tst_QWebSocketServer::tst_scheme()
QVERIFY(secureServer.listen());
+ QSslCipher sessionCipher;
QWebSocket secureSocket;
- typedef void (QWebSocket::* ignoreSslErrorsSlot)();
connect(&secureSocket, &QWebSocket::sslErrors,
- &secureSocket, static_cast<ignoreSslErrorsSlot>(&QWebSocket::ignoreSslErrors));
+ &secureSocket, [&] {
+ secureSocket.ignoreSslErrors();
+ sessionCipher = secureSocket.sslConfiguration().sessionCipher();
+ });
secureSocket.open(secureServer.serverUrl().toString());
- if (secureServerConnectionSpy.count() == 0)
- QVERIFY(secureServerConnectionSpy.wait());
+ QTRY_COMPARE(secureServerConnectionSpy.count(), 1);
QScopedPointer<QWebSocket> secureServerSocket(secureServer.nextPendingConnection());
QVERIFY(!secureServerSocket.isNull());
QCOMPARE(secureServerSocket->requestUrl().scheme(), QStringLiteral("wss"));
secureServer.close();
+ QVERIFY(!sessionCipher.isNull());
#endif
}
@@ -635,19 +627,17 @@ void tst_QWebSocketServer::tst_handleConnection()
QWebSocket webSocket;
QSignalSpy wsConnectedSpy(&webSocket, &QWebSocket::connected);
webSocket.open(QStringLiteral("ws://localhost:%1").arg(tcpServer.serverPort()));
- QVERIFY(wsConnectedSpy.wait());
+ QTRY_COMPARE(wsConnectedSpy.count(), 1);
- if (wsServerConnectionSpy.isEmpty())
- QVERIFY(wsServerConnectionSpy.wait());
+ QTRY_COMPARE(wsServerConnectionSpy.count(), 1);
QScopedPointer<QWebSocket> webServerSocket(wsServer.nextPendingConnection());
QVERIFY(!webServerSocket.isNull());
QSignalSpy wsMessageReceivedSpy(webServerSocket.data(), &QWebSocket::textMessageReceived);
webSocket.sendTextMessage("dummy");
- wsMessageReceivedSpy.wait();
- QCOMPARE(wsMessageReceivedSpy.count(), 1);
+ QTRY_COMPARE(wsMessageReceivedSpy.count(), 1);
QList<QVariant> arguments = wsMessageReceivedSpy.takeFirst();
QCOMPARE(arguments.first().toString(), QString("dummy"));
}