summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@theqtcompany.com>2015-05-11 11:00:27 +0200
committerLiang Qi <liang.qi@theqtcompany.com>2015-05-11 11:00:27 +0200
commitb25dc4141782776ff321400c204a27ab3adbcea6 (patch)
treef6523278592e03c8900f09ddda95f594d7d622b2 /src
parentba3b71327577f3ea348e9511c1475cf48f821880 (diff)
parent0a9cbcf2894f4f9e621e0f5fb644d2b5e15ab2c7 (diff)
downloadqtwebsockets-b25dc4141782776ff321400c204a27ab3adbcea6.tar.gz
Merge remote-tracking branch 'origin/5.5' into dev
Conflicts: src/websockets/qwebsocket_p.cpp Change-Id: Ia6434b282b4a0ee92e2b2a8664389f325bd0fcb0
Diffstat (limited to 'src')
-rw-r--r--src/websockets/qwebsocket_p.cpp19
-rw-r--r--src/websockets/qwebsocket_p.h2
-rw-r--r--src/websockets/qwebsocketframe.cpp2
3 files changed, 19 insertions, 4 deletions
diff --git a/src/websockets/qwebsocket_p.cpp b/src/websockets/qwebsocket_p.cpp
index ab466bd..28c24ae 100644
--- a/src/websockets/qwebsocket_p.cpp
+++ b/src/websockets/qwebsocket_p.cpp
@@ -105,7 +105,8 @@ QWebSocketPrivate::QWebSocketPrivate(const QString &origin, QWebSocketProtocol::
m_dataProcessor(),
m_configuration(),
m_pMaskGenerator(&m_defaultMaskGenerator),
- m_defaultMaskGenerator()
+ m_defaultMaskGenerator(),
+ m_handshakeState(NothingDoneState)
{
}
@@ -354,8 +355,9 @@ void QWebSocketPrivate::open(const QNetworkRequest &request, bool mask)
m_isClosingHandshakeSent = false;
setRequest(request);
- QString resourceName = url.path();
- if (resourceName.contains(QStringLiteral("\r\n"))) {
+ QString resourceName = url.path(QUrl::FullyEncoded);
+ // Check for encoded \r\n
+ if (resourceName.contains(QStringLiteral("%0D%0A"))) {
setRequest(QNetworkRequest()); //clear request
setErrorString(QWebSocket::tr("Invalid resource name."));
Q_EMIT q->error(QAbstractSocket::ConnectionRefusedError);
@@ -545,6 +547,10 @@ void QWebSocketPrivate::makeConnections(const QTcpSocket *pTcpSocket)
QObject::connect(pTcpSocket, &QAbstractSocket::aboutToClose, q, &QWebSocket::aboutToClose);
QObject::connect(pTcpSocket, &QAbstractSocket::bytesWritten, q, &QWebSocket::bytesWritten);
+
+ QObjectPrivate::connect(pTcpSocket, &QObject::destroyed,
+ this, &QWebSocketPrivate::socketDestroyed);
+
//catch signals
QObjectPrivate::connect(pTcpSocket, &QAbstractSocket::stateChanged, this,
&QWebSocketPrivate::processStateChanged);
@@ -1080,6 +1086,13 @@ void QWebSocketPrivate::processStateChanged(QAbstractSocket::SocketState socketS
}
}
+void QWebSocketPrivate::socketDestroyed(QObject *socket)
+{
+ Q_ASSERT(m_pSocket);
+ if (m_pSocket.data() == socket)
+ m_pSocket.take();
+}
+
/*!
\internal
*/
diff --git a/src/websockets/qwebsocket_p.h b/src/websockets/qwebsocket_p.h
index e688463..615bcfc 100644
--- a/src/websockets/qwebsocket_p.h
+++ b/src/websockets/qwebsocket_p.h
@@ -162,6 +162,8 @@ private:
void setSocketState(QAbstractSocket::SocketState state);
void setErrorString(const QString &errorString);
+ void socketDestroyed(QObject *socket);
+
void processData();
void processPing(const QByteArray &data);
void processPong(const QByteArray &data);
diff --git a/src/websockets/qwebsocketframe.cpp b/src/websockets/qwebsocketframe.cpp
index a4e644b..d533921 100644
--- a/src/websockets/qwebsocketframe.cpp
+++ b/src/websockets/qwebsocketframe.cpp
@@ -102,7 +102,7 @@ QWebSocketFrame &QWebSocketFrame::operator =(const QWebSocketFrame &other)
m_mask = other.m_mask;
m_rsv1 = other.m_rsv1;
m_rsv2 = other.m_rsv2;
- m_rsv3 = other.m_rsv2;
+ m_rsv3 = other.m_rsv3;
m_opCode = other.m_opCode;
m_length = other.m_length;
m_payload = other.m_payload;