summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/websockets/qwebsocket_p.cpp4
-rw-r--r--src/websockets/qwebsocketframe.cpp4
-rw-r--r--src/websockets/qwebsocketserver.cpp14
-rw-r--r--src/websockets/qwebsocketserver.h3
-rw-r--r--src/websockets/qwebsocketserver_p.cpp26
-rw-r--r--src/websockets/qwebsocketserver_p.h3
6 files changed, 39 insertions, 15 deletions
diff --git a/src/websockets/qwebsocket_p.cpp b/src/websockets/qwebsocket_p.cpp
index 8f55e24..1a47e76 100644
--- a/src/websockets/qwebsocket_p.cpp
+++ b/src/websockets/qwebsocket_p.cpp
@@ -1085,8 +1085,8 @@ void QWebSocketPrivate::processStateChanged(QAbstractSocket::SocketState socketS
m_key = generateKey();
QList<QPair<QString, QString> > headers;
- const auto keys = m_request.rawHeaderList();
- for (const QByteArray &key : keys)
+ const auto headerList = m_request.rawHeaderList();
+ for (const QByteArray &key : headerList)
headers << qMakePair(QString::fromLatin1(key),
QString::fromLatin1(m_request.rawHeader(key)));
diff --git a/src/websockets/qwebsocketframe.cpp b/src/websockets/qwebsocketframe.cpp
index ebc3c33..d51ae7c 100644
--- a/src/websockets/qwebsocketframe.cpp
+++ b/src/websockets/qwebsocketframe.cpp
@@ -289,7 +289,7 @@ bool QWebSocketFrame::isValid() const
// The arm compiler of Visual Studio 2013 Update 3 crashes when
// trying to optimize QWebSocketFrame::readFrame. Hence turn
// those off for this snippet
-#if (defined(Q_OS_WINPHONE) || defined(Q_OS_WINRT)) && defined(__ARM__)
+#if defined(Q_OS_WINRT) && defined(__ARM__)
# pragma optimize("", off)
#endif
@@ -501,7 +501,7 @@ QWebSocketFrame QWebSocketFrame::readFrame(QIODevice *pIoDevice)
return frame;
}
-#if (defined(Q_OS_WINPHONE) || defined(Q_OS_WINRT)) && defined(__ARM__)
+#if defined(Q_OS_WINRT) && defined(__ARM__)
# pragma optimize("", on)
#endif
diff --git a/src/websockets/qwebsocketserver.cpp b/src/websockets/qwebsocketserver.cpp
index f8ecdf2..e4cfe12 100644
--- a/src/websockets/qwebsocketserver.cpp
+++ b/src/websockets/qwebsocketserver.cpp
@@ -612,4 +612,18 @@ QList<QWebSocketProtocol::Version> QWebSocketServer::supportedVersions() const
return d->supportedVersions();
}
+/*!
+ Upgrades a tcp \a socket to websocket.
+
+ The QWebSocketServer object will take ownership of the socket
+ object and delete it when appropriate.
+
+ \since 5.9
+*/
+void QWebSocketServer::handleConnection(QTcpSocket *socket) const
+{
+ Q_D(const QWebSocketServer);
+ d->handleConnection(socket);
+}
+
QT_END_NAMESPACE
diff --git a/src/websockets/qwebsocketserver.h b/src/websockets/qwebsocketserver.h
index 511a55b..f846290 100644
--- a/src/websockets/qwebsocketserver.h
+++ b/src/websockets/qwebsocketserver.h
@@ -54,6 +54,7 @@
QT_BEGIN_NAMESPACE
+class QTcpSocket;
class QWebSocketServerPrivate;
class QWebSocket;
class QWebSocketCorsAuthenticator;
@@ -118,6 +119,8 @@ public:
QList<QWebSocketProtocol::Version> supportedVersions() const;
+ void handleConnection(QTcpSocket *socket) const;
+
Q_SIGNALS:
void acceptError(QAbstractSocket::SocketError socketError);
void serverError(QWebSocketProtocol::CloseCode closeCode);
diff --git a/src/websockets/qwebsocketserver_p.cpp b/src/websockets/qwebsocketserver_p.cpp
index d675056..b7972b0 100644
--- a/src/websockets/qwebsocketserver_p.cpp
+++ b/src/websockets/qwebsocketserver_p.cpp
@@ -384,17 +384,8 @@ void QWebSocketServerPrivate::setError(QWebSocketProtocol::CloseCode code, const
*/
void QWebSocketServerPrivate::onNewConnection()
{
- while (m_pTcpServer->hasPendingConnections()) {
- QTcpSocket *pTcpSocket = m_pTcpServer->nextPendingConnection();
- //use a queued connection because a QSslSocket
- //needs the event loop to process incoming data
- //if not queued, data is incomplete when handshakeReceived is called
- QObjectPrivate::connect(pTcpSocket, &QTcpSocket::readyRead,
- this, &QWebSocketServerPrivate::handshakeReceived,
- Qt::QueuedConnection);
- QObjectPrivate::connect(pTcpSocket, &QTcpSocket::disconnected,
- this, &QWebSocketServerPrivate::onSocketDisconnected);
- }
+ while (m_pTcpServer->hasPendingConnections())
+ handleConnection(m_pTcpServer->nextPendingConnection());
}
/*!
@@ -491,4 +482,17 @@ void QWebSocketServerPrivate::handshakeReceived()
}
}
+void QWebSocketServerPrivate::handleConnection(QTcpSocket *pTcpSocket) const
+{
+ if (Q_LIKELY(pTcpSocket)) {
+ // Use a queued connection because a QSslSocket needs the event loop to process incoming
+ // data. If not queued, data is incomplete when handshakeReceived is called.
+ QObjectPrivate::connect(pTcpSocket, &QTcpSocket::readyRead,
+ this, &QWebSocketServerPrivate::handshakeReceived,
+ Qt::QueuedConnection);
+ QObjectPrivate::connect(pTcpSocket, &QTcpSocket::disconnected,
+ this, &QWebSocketServerPrivate::onSocketDisconnected);
+ }
+}
+
QT_END_NAMESPACE
diff --git a/src/websockets/qwebsocketserver_p.h b/src/websockets/qwebsocketserver_p.h
index 6aabebd..0ca7495 100644
--- a/src/websockets/qwebsocketserver_p.h
+++ b/src/websockets/qwebsocketserver_p.h
@@ -65,6 +65,7 @@
QT_BEGIN_NAMESPACE
class QTcpServer;
+class QTcpSocket;
class QWebSocketServer;
class QWebSocketServerPrivate : public QObjectPrivate
@@ -120,6 +121,8 @@ public:
void setError(QWebSocketProtocol::CloseCode code, const QString &errorString);
+ void handleConnection(QTcpSocket *pTcpSocket) const;
+
QWebSocketServer * const q_ptr;
private: