From 8ebed733e872ded507256addf932e19e1b6ed2b6 Mon Sep 17 00:00:00 2001 From: Liang Qi Date: Fri, 13 Feb 2015 11:31:52 +0100 Subject: Examples: add options for port and debug outputs in echoserver MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Iadba1c5cb7cd4454b01a98339c2225483b08e180 Reviewed-by: Kurt Pattyn Reviewed-by: Venugopal Shivashankar Reviewed-by: Topi Reiniƶ --- examples/websockets/echoserver/echoserver.cpp | 14 +++++++++++--- examples/websockets/echoserver/echoserver.h | 3 ++- examples/websockets/echoserver/main.cpp | 20 +++++++++++++++++++- 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/examples/websockets/echoserver/echoserver.cpp b/examples/websockets/echoserver/echoserver.cpp index b3ea177..a3109fa 100644 --- a/examples/websockets/echoserver/echoserver.cpp +++ b/examples/websockets/echoserver/echoserver.cpp @@ -38,14 +38,16 @@ QT_USE_NAMESPACE //! [constructor] -EchoServer::EchoServer(quint16 port, QObject *parent) : +EchoServer::EchoServer(quint16 port, bool debug, QObject *parent) : QObject(parent), m_pWebSocketServer(new QWebSocketServer(QStringLiteral("Echo Server"), QWebSocketServer::NonSecureMode, this)), - m_clients() + m_clients(), + m_debug(debug) { if (m_pWebSocketServer->listen(QHostAddress::Any, port)) { - qDebug() << "Echoserver listening on port" << port; + if (m_debug) + qDebug() << "Echoserver listening on port" << port; connect(m_pWebSocketServer, &QWebSocketServer::newConnection, this, &EchoServer::onNewConnection); connect(m_pWebSocketServer, &QWebSocketServer::closed, this, &EchoServer::closed); @@ -76,6 +78,8 @@ void EchoServer::onNewConnection() void EchoServer::processTextMessage(QString message) { QWebSocket *pClient = qobject_cast(sender()); + if (m_debug) + qDebug() << "Message received:" << message; if (pClient) { pClient->sendTextMessage(message); } @@ -87,6 +91,8 @@ void EchoServer::processTextMessage(QString message) void EchoServer::processBinaryMessage(QByteArray message) { QWebSocket *pClient = qobject_cast(sender()); + if (m_debug) + qDebug() << "Binary Message received:" << message; if (pClient) { pClient->sendBinaryMessage(message); } @@ -97,6 +103,8 @@ void EchoServer::processBinaryMessage(QByteArray message) void EchoServer::socketDisconnected() { QWebSocket *pClient = qobject_cast(sender()); + if (m_debug) + qDebug() << "socketDisconnected:" << pClient; if (pClient) { m_clients.removeAll(pClient); pClient->deleteLater(); diff --git a/examples/websockets/echoserver/echoserver.h b/examples/websockets/echoserver/echoserver.h index 7ce57cc..4559ee2 100644 --- a/examples/websockets/echoserver/echoserver.h +++ b/examples/websockets/echoserver/echoserver.h @@ -44,7 +44,7 @@ class EchoServer : public QObject { Q_OBJECT public: - explicit EchoServer(quint16 port, QObject *parent = Q_NULLPTR); + explicit EchoServer(quint16 port, bool debug = false, QObject *parent = Q_NULLPTR); ~EchoServer(); Q_SIGNALS: @@ -59,6 +59,7 @@ private Q_SLOTS: private: QWebSocketServer *m_pWebSocketServer; QList m_clients; + bool m_debug; }; #endif //ECHOSERVER_H diff --git a/examples/websockets/echoserver/main.cpp b/examples/websockets/echoserver/main.cpp index ed408ae..c433030 100644 --- a/examples/websockets/echoserver/main.cpp +++ b/examples/websockets/echoserver/main.cpp @@ -31,12 +31,30 @@ ** ****************************************************************************/ #include +#include +#include #include "echoserver.h" int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); - EchoServer *server = new EchoServer(1234); + + QCommandLineParser parser; + parser.setApplicationDescription("QtWebSockets example: echoserver"); + parser.addHelpOption(); + + QCommandLineOption dbgOption(QStringList() << "d" << "debug", + QCoreApplication::translate("main", "Debug output [default: off].")); + parser.addOption(dbgOption); + QCommandLineOption portOption(QStringList() << "p" << "port", + QCoreApplication::translate("main", "Port for echoserver [default: 1234]."), + QCoreApplication::translate("main", "port"), QLatin1Literal("1234")); + parser.addOption(portOption); + parser.process(a); + bool debug = parser.isSet(dbgOption); + int port = parser.value(portOption).toInt(); + + EchoServer *server = new EchoServer(port, debug); QObject::connect(server, &EchoServer::closed, &a, &QCoreApplication::quit); return a.exec(); -- cgit v1.2.1 From dc936eaab18e709faa5154a21a269d0fe54521af Mon Sep 17 00:00:00 2001 From: Liang Qi Date: Fri, 13 Feb 2015 11:32:23 +0100 Subject: Example: echoserver should not close when it got a new connection Otherwise it's just a onetime server. Change-Id: Ida516614e72cac1635062a04a6f1f9e1c56753da Reviewed-by: Kurt Pattyn --- examples/websockets/echoserver/echoserver.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/websockets/echoserver/echoserver.cpp b/examples/websockets/echoserver/echoserver.cpp index a3109fa..196b00b 100644 --- a/examples/websockets/echoserver/echoserver.cpp +++ b/examples/websockets/echoserver/echoserver.cpp @@ -83,7 +83,6 @@ void EchoServer::processTextMessage(QString message) if (pClient) { pClient->sendTextMessage(message); } - m_pWebSocketServer->close(); } //! [processTextMessage] -- cgit v1.2.1 From 0694a8ba6394ba194fabc2201ad4549a2b97fc55 Mon Sep 17 00:00:00 2001 From: Liang Qi Date: Mon, 23 Feb 2015 10:17:18 +0100 Subject: Fix the build for WinRT/ARM Task-number: QTBUG-44491 Change-Id: Iec007ff83414d333d10609882b11ab4fd485345a Reviewed-by: Oliver Wolff --- src/websockets/qwebsocketframe.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/websockets/qwebsocketframe.cpp b/src/websockets/qwebsocketframe.cpp index c8d0ac3..5b425eb 100644 --- a/src/websockets/qwebsocketframe.cpp +++ b/src/websockets/qwebsocketframe.cpp @@ -307,7 +307,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(__ARM__) +#if (defined(Q_OS_WINPHONE) || defined(Q_OS_WINRT)) && defined(__ARM__) # pragma optimize("", off) #endif @@ -519,7 +519,7 @@ QWebSocketFrame QWebSocketFrame::readFrame(QIODevice *pIoDevice) return frame; } -#if defined(Q_OS_WINPHONE) && defined(__ARM__) +#if (defined(Q_OS_WINPHONE) || defined(Q_OS_WINRT)) && defined(__ARM__) # pragma optimize("", on) #endif -- cgit v1.2.1 From fc2b42c874fb41487b86700a04e932e2afaded94 Mon Sep 17 00:00:00 2001 From: Liang Qi Date: Mon, 16 Feb 2015 11:01:40 +0100 Subject: client ping should be masked Task-number: QTBUG-42298 Change-Id: I4c01052823ce48b737d30ac2e0ef11836124bc4f Reviewed-by: Kurt Pattyn Reviewed-by: Neil Williams Reviewed-by: Liang Qi --- src/websockets/qwebsocket_p.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/websockets/qwebsocket_p.cpp b/src/websockets/qwebsocket_p.cpp index 45913e5..ced197e 100644 --- a/src/websockets/qwebsocket_p.cpp +++ b/src/websockets/qwebsocket_p.cpp @@ -440,8 +440,13 @@ void QWebSocketPrivate::ping(const QByteArray &payload) { QByteArray payloadTruncated = payload.left(125); m_pingTimer.restart(); + quint32 maskingKey = 0; + if (m_mustMask) + maskingKey = generateMaskingKey(); QByteArray pingFrame = getFrameHeader(QWebSocketProtocol::OpCodePing, payloadTruncated.size(), - 0 /*do not mask*/, true); + maskingKey, true); + if (m_mustMask) + QWebSocketProtocol::mask(&payloadTruncated, maskingKey); pingFrame.append(payloadTruncated); qint64 ret = writeFrame(pingFrame); Q_UNUSED(ret); -- cgit v1.2.1