Hello community,

here is the log from the commit of package libqt5-qtwebsockets for 
openSUSE:Factory checked in at 2015-06-06 09:52:37
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libqt5-qtwebsockets (Old)
 and      /work/SRC/openSUSE:Factory/.libqt5-qtwebsockets.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libqt5-qtwebsockets"

Changes:
--------
--- /work/SRC/openSUSE:Factory/libqt5-qtwebsockets/libqt5-qtwebsockets.changes  
2015-03-01 15:27:21.000000000 +0100
+++ 
/work/SRC/openSUSE:Factory/.libqt5-qtwebsockets.new/libqt5-qtwebsockets.changes 
    2015-06-06 09:52:39.000000000 +0200
@@ -1,0 +2,7 @@
+Wed Jun  3 22:56:40 UTC 2015 - [email protected]
+
+- Update to 5.4.2
+  * Bugfix release, for more details please see:
+    http://blog.qt.io/blog/2015/06/02/qt-5-4-2-released/
+
+-------------------------------------------------------------------

Old:
----
  qtwebsockets-opensource-src-5.4.1.tar.xz

New:
----
  qtwebsockets-opensource-src-5.4.2.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libqt5-qtwebsockets.spec ++++++
--- /var/tmp/diff_new_pack.Ix6ZEl/_old  2015-06-06 09:52:39.000000000 +0200
+++ /var/tmp/diff_new_pack.Ix6ZEl/_new  2015-06-06 09:52:39.000000000 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package libqt5-qtwebsockets
 #
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2015 SUSE LINUX Products GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -21,15 +21,15 @@
 %define libname libQt5WebSockets5
 
 Name:           libqt5-qtwebsockets
-Version:        5.4.1
+Version:        5.4.2
 Release:        0
 Summary:        Qt 5 WebSockets Library
 License:        SUSE-LGPL-2.1-with-digia-exception-1.1 or GPL-3.0
 Group:          Development/Libraries/X11
 Url:            http://qt.digia.com
 %define base_name libqt5
-%define real_version 5.4.1
-%define so_version 5.4.1
+%define real_version 5.4.2
+%define so_version 5.4.2
 %define tar_version qtwebsockets-opensource-src-%{real_version}
 Source:         %{tar_version}.tar.xz
 Source1:        baselibs.conf

++++++ qtwebsockets-opensource-src-5.4.1.tar.xz -> 
qtwebsockets-opensource-src-5.4.2.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qtwebsockets-opensource-src-5.4.1/.qmake.conf 
new/qtwebsockets-opensource-src-5.4.2/.qmake.conf
--- old/qtwebsockets-opensource-src-5.4.1/.qmake.conf   2015-02-17 
05:57:30.000000000 +0100
+++ new/qtwebsockets-opensource-src-5.4.2/.qmake.conf   2015-05-29 
22:32:12.000000000 +0200
@@ -3,4 +3,4 @@
 CONFIG += qt_example_installs
 CONFIG += warning_clean
 
-MODULE_VERSION = 5.4.1
+MODULE_VERSION = 5.4.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qtwebsockets-opensource-src-5.4.1/.tag 
new/qtwebsockets-opensource-src-5.4.2/.tag
--- old/qtwebsockets-opensource-src-5.4.1/.tag  2015-02-17 05:57:31.000000000 
+0100
+++ new/qtwebsockets-opensource-src-5.4.2/.tag  2015-05-29 22:32:12.000000000 
+0200
@@ -1 +1 @@
-5f8093e6f985a7a887ffaa1e2fecd7314b5444c6
+5b469aa3c4d6b9c68feb9cf92d03614077518894
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/examples/websockets/doc/echoserver.qdoc 
new/qtwebsockets-opensource-src-5.4.2/examples/websockets/doc/echoserver.qdoc
--- 
old/qtwebsockets-opensource-src-5.4.1/examples/websockets/doc/echoserver.qdoc   
    2015-02-17 05:57:30.000000000 +0100
+++ 
new/qtwebsockets-opensource-src-5.4.2/examples/websockets/doc/echoserver.qdoc   
    2015-05-29 22:32:12.000000000 +0200
@@ -39,7 +39,14 @@
     sends back the messages it receives.
 
     The Echo Server Example shows how to create a simple server application 
that
-    sends back the messages it receives, using the WebSocket API.
+    sends back the messages it receives, using the \l {Qt 
WebSockets}{WebSocket} API.
+
+    If your web browser supports \l {Qt WebSockets}{WebSocket}, you can also 
use it
+    to open the \l {echoserver/echoclient.html}{echoclient.html} file, and 
operate
+    like the following screenshot.
+
+    \image echoclient-html-example.png Screenshot of the HTML version of Echo
+    Client example
 
     \sa {Echo Client Example}
 */
Files 
old/qtwebsockets-opensource-src-5.4.1/examples/websockets/doc/images/echoclient-html-example.png
 and 
new/qtwebsockets-opensource-src-5.4.2/examples/websockets/doc/images/echoclient-html-example.png
 differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/examples/websockets/echoclient/echoclient.cpp
 
new/qtwebsockets-opensource-src-5.4.2/examples/websockets/echoclient/echoclient.cpp
--- 
old/qtwebsockets-opensource-src-5.4.1/examples/websockets/echoclient/echoclient.cpp
 2015-02-17 05:57:30.000000000 +0100
+++ 
new/qtwebsockets-opensource-src-5.4.2/examples/websockets/echoclient/echoclient.cpp
 2015-05-29 22:32:12.000000000 +0200
@@ -36,10 +36,13 @@
 QT_USE_NAMESPACE
 
 //! [constructor]
-EchoClient::EchoClient(const QUrl &url, QObject *parent) :
+EchoClient::EchoClient(const QUrl &url, bool debug, QObject *parent) :
     QObject(parent),
-    m_url(url)
+    m_url(url),
+    m_debug(debug)
 {
+    if (m_debug)
+        qDebug() << "WebSocket server:" << url;
     connect(&m_webSocket, &QWebSocket::connected, this, 
&EchoClient::onConnected);
     connect(&m_webSocket, &QWebSocket::disconnected, this, 
&EchoClient::closed);
     m_webSocket.open(QUrl(url));
@@ -49,7 +52,8 @@
 //! [onConnected]
 void EchoClient::onConnected()
 {
-    qDebug() << "WebSocket connected";
+    if (m_debug)
+        qDebug() << "WebSocket connected";
     connect(&m_webSocket, &QWebSocket::textMessageReceived,
             this, &EchoClient::onTextMessageReceived);
     m_webSocket.sendTextMessage(QStringLiteral("Hello, world!"));
@@ -59,7 +63,8 @@
 //! [onTextMessageReceived]
 void EchoClient::onTextMessageReceived(QString message)
 {
-    qDebug() << "Message received:" << message;
+    if (m_debug)
+        qDebug() << "Message received:" << message;
     m_webSocket.close();
 }
 //! [onTextMessageReceived]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/examples/websockets/echoclient/echoclient.h
 
new/qtwebsockets-opensource-src-5.4.2/examples/websockets/echoclient/echoclient.h
--- 
old/qtwebsockets-opensource-src-5.4.1/examples/websockets/echoclient/echoclient.h
   2015-02-17 05:57:30.000000000 +0100
+++ 
new/qtwebsockets-opensource-src-5.4.2/examples/websockets/echoclient/echoclient.h
   2015-05-29 22:32:12.000000000 +0200
@@ -40,7 +40,7 @@
 {
     Q_OBJECT
 public:
-    explicit EchoClient(const QUrl &url, QObject *parent = Q_NULLPTR);
+    explicit EchoClient(const QUrl &url, bool debug = false, QObject *parent = 
Q_NULLPTR);
 
 Q_SIGNALS:
     void closed();
@@ -52,6 +52,7 @@
 private:
     QWebSocket m_webSocket;
     QUrl m_url;
+    bool m_debug;
 };
 
 #endif // ECHOCLIENT_H
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/examples/websockets/echoclient/main.cpp 
new/qtwebsockets-opensource-src-5.4.2/examples/websockets/echoclient/main.cpp
--- 
old/qtwebsockets-opensource-src-5.4.1/examples/websockets/echoclient/main.cpp   
    2015-02-17 05:57:30.000000000 +0100
+++ 
new/qtwebsockets-opensource-src-5.4.2/examples/websockets/echoclient/main.cpp   
    2015-05-29 22:32:12.000000000 +0200
@@ -31,12 +31,25 @@
 **
 ****************************************************************************/
 #include <QtCore/QCoreApplication>
+#include <QtCore/QCommandLineParser>
+#include <QtCore/QCommandLineOption>
 #include "echoclient.h"
 
 int main(int argc, char *argv[])
 {
     QCoreApplication a(argc, argv);
-    EchoClient client(QUrl(QStringLiteral("ws://localhost:1234")));
+
+    QCommandLineParser parser;
+    parser.setApplicationDescription("QtWebSockets example: echoclient");
+    parser.addHelpOption();
+
+    QCommandLineOption dbgOption(QStringList() << "d" << "debug",
+            QCoreApplication::translate("main", "Debug output [default: 
off]."));
+    parser.addOption(dbgOption);
+    parser.process(a);
+    bool debug = parser.isSet(dbgOption);
+
+    EchoClient client(QUrl(QStringLiteral("ws://localhost:1234")), debug);
     QObject::connect(&client, &EchoClient::closed, &a, 
&QCoreApplication::quit);
 
     return a.exec();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/examples/websockets/echoserver/echoserver.cpp
 
new/qtwebsockets-opensource-src-5.4.2/examples/websockets/echoserver/echoserver.cpp
--- 
old/qtwebsockets-opensource-src-5.4.1/examples/websockets/echoserver/echoserver.cpp
 2015-02-17 05:57:30.000000000 +0100
+++ 
new/qtwebsockets-opensource-src-5.4.2/examples/websockets/echoserver/echoserver.cpp
 2015-05-29 22:32:12.000000000 +0200
@@ -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,10 +78,11 @@
 void EchoServer::processTextMessage(QString message)
 {
     QWebSocket *pClient = qobject_cast<QWebSocket *>(sender());
+    if (m_debug)
+        qDebug() << "Message received:" << message;
     if (pClient) {
         pClient->sendTextMessage(message);
     }
-    m_pWebSocketServer->close();
 }
 //! [processTextMessage]
 
@@ -87,6 +90,8 @@
 void EchoServer::processBinaryMessage(QByteArray message)
 {
     QWebSocket *pClient = qobject_cast<QWebSocket *>(sender());
+    if (m_debug)
+        qDebug() << "Binary Message received:" << message;
     if (pClient) {
         pClient->sendBinaryMessage(message);
     }
@@ -97,6 +102,8 @@
 void EchoServer::socketDisconnected()
 {
     QWebSocket *pClient = qobject_cast<QWebSocket *>(sender());
+    if (m_debug)
+        qDebug() << "socketDisconnected:" << pClient;
     if (pClient) {
         m_clients.removeAll(pClient);
         pClient->deleteLater();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/examples/websockets/echoserver/echoserver.h
 
new/qtwebsockets-opensource-src-5.4.2/examples/websockets/echoserver/echoserver.h
--- 
old/qtwebsockets-opensource-src-5.4.1/examples/websockets/echoserver/echoserver.h
   2015-02-17 05:57:30.000000000 +0100
+++ 
new/qtwebsockets-opensource-src-5.4.2/examples/websockets/echoserver/echoserver.h
   2015-05-29 22:32:12.000000000 +0200
@@ -44,7 +44,7 @@
 {
     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:
     QWebSocketServer *m_pWebSocketServer;
     QList<QWebSocket *> m_clients;
+    bool m_debug;
 };
 
 #endif //ECHOSERVER_H
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/examples/websockets/echoserver/main.cpp 
new/qtwebsockets-opensource-src-5.4.2/examples/websockets/echoserver/main.cpp
--- 
old/qtwebsockets-opensource-src-5.4.1/examples/websockets/echoserver/main.cpp   
    2015-02-17 05:57:30.000000000 +0100
+++ 
new/qtwebsockets-opensource-src-5.4.2/examples/websockets/echoserver/main.cpp   
    2015-05-29 22:32:12.000000000 +0200
@@ -31,12 +31,30 @@
 **
 ****************************************************************************/
 #include <QtCore/QCoreApplication>
+#include <QtCore/QCommandLineParser>
+#include <QtCore/QCommandLineOption>
 #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();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/examples/websockets/sslechoserver/securesocketclient.qrc
 
new/qtwebsockets-opensource-src-5.4.2/examples/websockets/sslechoserver/securesocketclient.qrc
--- 
old/qtwebsockets-opensource-src-5.4.1/examples/websockets/sslechoserver/securesocketclient.qrc
      1970-01-01 01:00:00.000000000 +0100
+++ 
new/qtwebsockets-opensource-src-5.4.2/examples/websockets/sslechoserver/securesocketclient.qrc
      2015-05-29 22:32:12.000000000 +0200
@@ -0,0 +1,6 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+    <file>localhost.cert</file>
+    <file>localhost.key</file>
+</qresource>
+</RCC>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/examples/websockets/sslechoserver/sslechoserver.cpp
 
new/qtwebsockets-opensource-src-5.4.2/examples/websockets/sslechoserver/sslechoserver.cpp
--- 
old/qtwebsockets-opensource-src-5.4.1/examples/websockets/sslechoserver/sslechoserver.cpp
   2015-02-17 05:57:30.000000000 +0100
+++ 
new/qtwebsockets-opensource-src-5.4.2/examples/websockets/sslechoserver/sslechoserver.cpp
   2015-05-29 22:32:12.000000000 +0200
@@ -50,8 +50,8 @@
                                               QWebSocketServer::SecureMode,
                                               this);
     QSslConfiguration sslConfiguration;
-    QFile certFile(QStringLiteral("./localhost.cert"));
-    QFile keyFile(QStringLiteral("./localhost.key"));
+    QFile certFile(QStringLiteral(":/localhost.cert"));
+    QFile keyFile(QStringLiteral(":/localhost.key"));
     certFile.open(QIODevice::ReadOnly);
     keyFile.open(QIODevice::ReadOnly);
     QSslCertificate certificate(&certFile, QSsl::Pem);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/examples/websockets/sslechoserver/sslechoserver.pro
 
new/qtwebsockets-opensource-src-5.4.2/examples/websockets/sslechoserver/sslechoserver.pro
--- 
old/qtwebsockets-opensource-src-5.4.1/examples/websockets/sslechoserver/sslechoserver.pro
   2015-02-17 05:57:30.000000000 +0100
+++ 
new/qtwebsockets-opensource-src-5.4.2/examples/websockets/sslechoserver/sslechoserver.pro
   2015-05-29 22:32:12.000000000 +0200
@@ -15,3 +15,5 @@
     sslechoserver.h
 
 OTHER_FILES += sslechoclient.html
+
+RESOURCES += securesocketclient.qrc
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.1/QtWebSockets/private/qdefaultmaskgenerator_p.h
 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.1/QtWebSockets/private/qdefaultmaskgenerator_p.h
--- 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.1/QtWebSockets/private/qdefaultmaskgenerator_p.h
     2015-02-17 05:57:31.000000000 +0100
+++ 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.1/QtWebSockets/private/qdefaultmaskgenerator_p.h
     1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-#include "../../../../../src/websockets/qdefaultmaskgenerator_p.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.1/QtWebSockets/private/qsslserver_p.h
 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.1/QtWebSockets/private/qsslserver_p.h
--- 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.1/QtWebSockets/private/qsslserver_p.h
        2015-02-17 05:57:31.000000000 +0100
+++ 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.1/QtWebSockets/private/qsslserver_p.h
        1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-#include "../../../../../src/websockets/qsslserver_p.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.1/QtWebSockets/private/qwebsocket_p.h
 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.1/QtWebSockets/private/qwebsocket_p.h
--- 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.1/QtWebSockets/private/qwebsocket_p.h
        2015-02-17 05:57:31.000000000 +0100
+++ 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.1/QtWebSockets/private/qwebsocket_p.h
        1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-#include "../../../../../src/websockets/qwebsocket_p.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.1/QtWebSockets/private/qwebsocketcorsauthenticator_p.h
 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.1/QtWebSockets/private/qwebsocketcorsauthenticator_p.h
--- 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.1/QtWebSockets/private/qwebsocketcorsauthenticator_p.h
       2015-02-17 05:57:31.000000000 +0100
+++ 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.1/QtWebSockets/private/qwebsocketcorsauthenticator_p.h
       1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-#include "../../../../../src/websockets/qwebsocketcorsauthenticator_p.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.1/QtWebSockets/private/qwebsocketdataprocessor_p.h
 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.1/QtWebSockets/private/qwebsocketdataprocessor_p.h
--- 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.1/QtWebSockets/private/qwebsocketdataprocessor_p.h
   2015-02-17 05:57:31.000000000 +0100
+++ 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.1/QtWebSockets/private/qwebsocketdataprocessor_p.h
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-#include "../../../../../src/websockets/qwebsocketdataprocessor_p.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.1/QtWebSockets/private/qwebsocketframe_p.h
 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.1/QtWebSockets/private/qwebsocketframe_p.h
--- 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.1/QtWebSockets/private/qwebsocketframe_p.h
   2015-02-17 05:57:31.000000000 +0100
+++ 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.1/QtWebSockets/private/qwebsocketframe_p.h
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-#include "../../../../../src/websockets/qwebsocketframe_p.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.1/QtWebSockets/private/qwebsockethandshakerequest_p.h
 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.1/QtWebSockets/private/qwebsockethandshakerequest_p.h
--- 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.1/QtWebSockets/private/qwebsockethandshakerequest_p.h
        2015-02-17 05:57:31.000000000 +0100
+++ 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.1/QtWebSockets/private/qwebsockethandshakerequest_p.h
        1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-#include "../../../../../src/websockets/qwebsockethandshakerequest_p.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.1/QtWebSockets/private/qwebsockethandshakeresponse_p.h
 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.1/QtWebSockets/private/qwebsockethandshakeresponse_p.h
--- 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.1/QtWebSockets/private/qwebsockethandshakeresponse_p.h
       2015-02-17 05:57:31.000000000 +0100
+++ 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.1/QtWebSockets/private/qwebsockethandshakeresponse_p.h
       1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-#include "../../../../../src/websockets/qwebsockethandshakeresponse_p.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.1/QtWebSockets/private/qwebsocketprotocol_p.h
 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.1/QtWebSockets/private/qwebsocketprotocol_p.h
--- 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.1/QtWebSockets/private/qwebsocketprotocol_p.h
        2015-02-17 05:57:31.000000000 +0100
+++ 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.1/QtWebSockets/private/qwebsocketprotocol_p.h
        1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-#include "../../../../../src/websockets/qwebsocketprotocol_p.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.1/QtWebSockets/private/qwebsocketserver_p.h
 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.1/QtWebSockets/private/qwebsocketserver_p.h
--- 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.1/QtWebSockets/private/qwebsocketserver_p.h
  2015-02-17 05:57:31.000000000 +0100
+++ 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.1/QtWebSockets/private/qwebsocketserver_p.h
  1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-#include "../../../../../src/websockets/qwebsocketserver_p.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.2/QtWebSockets/private/qdefaultmaskgenerator_p.h
 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.2/QtWebSockets/private/qdefaultmaskgenerator_p.h
--- 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.2/QtWebSockets/private/qdefaultmaskgenerator_p.h
     1970-01-01 01:00:00.000000000 +0100
+++ 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.2/QtWebSockets/private/qdefaultmaskgenerator_p.h
     2015-05-29 22:32:12.000000000 +0200
@@ -0,0 +1 @@
+#include "../../../../../src/websockets/qdefaultmaskgenerator_p.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.2/QtWebSockets/private/qsslserver_p.h
 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.2/QtWebSockets/private/qsslserver_p.h
--- 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.2/QtWebSockets/private/qsslserver_p.h
        1970-01-01 01:00:00.000000000 +0100
+++ 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.2/QtWebSockets/private/qsslserver_p.h
        2015-05-29 22:32:12.000000000 +0200
@@ -0,0 +1 @@
+#include "../../../../../src/websockets/qsslserver_p.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.2/QtWebSockets/private/qwebsocket_p.h
 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.2/QtWebSockets/private/qwebsocket_p.h
--- 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.2/QtWebSockets/private/qwebsocket_p.h
        1970-01-01 01:00:00.000000000 +0100
+++ 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.2/QtWebSockets/private/qwebsocket_p.h
        2015-05-29 22:32:12.000000000 +0200
@@ -0,0 +1 @@
+#include "../../../../../src/websockets/qwebsocket_p.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.2/QtWebSockets/private/qwebsocketcorsauthenticator_p.h
 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.2/QtWebSockets/private/qwebsocketcorsauthenticator_p.h
--- 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.2/QtWebSockets/private/qwebsocketcorsauthenticator_p.h
       1970-01-01 01:00:00.000000000 +0100
+++ 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.2/QtWebSockets/private/qwebsocketcorsauthenticator_p.h
       2015-05-29 22:32:12.000000000 +0200
@@ -0,0 +1 @@
+#include "../../../../../src/websockets/qwebsocketcorsauthenticator_p.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.2/QtWebSockets/private/qwebsocketdataprocessor_p.h
 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.2/QtWebSockets/private/qwebsocketdataprocessor_p.h
--- 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.2/QtWebSockets/private/qwebsocketdataprocessor_p.h
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.2/QtWebSockets/private/qwebsocketdataprocessor_p.h
   2015-05-29 22:32:12.000000000 +0200
@@ -0,0 +1 @@
+#include "../../../../../src/websockets/qwebsocketdataprocessor_p.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.2/QtWebSockets/private/qwebsocketframe_p.h
 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.2/QtWebSockets/private/qwebsocketframe_p.h
--- 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.2/QtWebSockets/private/qwebsocketframe_p.h
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.2/QtWebSockets/private/qwebsocketframe_p.h
   2015-05-29 22:32:12.000000000 +0200
@@ -0,0 +1 @@
+#include "../../../../../src/websockets/qwebsocketframe_p.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.2/QtWebSockets/private/qwebsockethandshakerequest_p.h
 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.2/QtWebSockets/private/qwebsockethandshakerequest_p.h
--- 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.2/QtWebSockets/private/qwebsockethandshakerequest_p.h
        1970-01-01 01:00:00.000000000 +0100
+++ 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.2/QtWebSockets/private/qwebsockethandshakerequest_p.h
        2015-05-29 22:32:12.000000000 +0200
@@ -0,0 +1 @@
+#include "../../../../../src/websockets/qwebsockethandshakerequest_p.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.2/QtWebSockets/private/qwebsockethandshakeresponse_p.h
 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.2/QtWebSockets/private/qwebsockethandshakeresponse_p.h
--- 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.2/QtWebSockets/private/qwebsockethandshakeresponse_p.h
       1970-01-01 01:00:00.000000000 +0100
+++ 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.2/QtWebSockets/private/qwebsockethandshakeresponse_p.h
       2015-05-29 22:32:12.000000000 +0200
@@ -0,0 +1 @@
+#include "../../../../../src/websockets/qwebsockethandshakeresponse_p.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.2/QtWebSockets/private/qwebsocketprotocol_p.h
 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.2/QtWebSockets/private/qwebsocketprotocol_p.h
--- 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.2/QtWebSockets/private/qwebsocketprotocol_p.h
        1970-01-01 01:00:00.000000000 +0100
+++ 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.2/QtWebSockets/private/qwebsocketprotocol_p.h
        2015-05-29 22:32:12.000000000 +0200
@@ -0,0 +1 @@
+#include "../../../../../src/websockets/qwebsocketprotocol_p.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.2/QtWebSockets/private/qwebsocketserver_p.h
 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.2/QtWebSockets/private/qwebsocketserver_p.h
--- 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/5.4.2/QtWebSockets/private/qwebsocketserver_p.h
  1970-01-01 01:00:00.000000000 +0100
+++ 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/5.4.2/QtWebSockets/private/qwebsocketserver_p.h
  2015-05-29 22:32:12.000000000 +0200
@@ -0,0 +1 @@
+#include "../../../../../src/websockets/qwebsocketserver_p.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/qtwebsocketsversion.h
 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/qtwebsocketsversion.h
--- 
old/qtwebsockets-opensource-src-5.4.1/include/QtWebSockets/qtwebsocketsversion.h
    2015-02-17 05:57:31.000000000 +0100
+++ 
new/qtwebsockets-opensource-src-5.4.2/include/QtWebSockets/qtwebsocketsversion.h
    2015-05-29 22:32:12.000000000 +0200
@@ -2,8 +2,8 @@
 #ifndef QT_QTWEBSOCKETS_VERSION_H
 #define QT_QTWEBSOCKETS_VERSION_H
 
-#define QTWEBSOCKETS_VERSION_STR "5.4.1"
+#define QTWEBSOCKETS_VERSION_STR "5.4.2"
 
-#define QTWEBSOCKETS_VERSION 0x050401
+#define QTWEBSOCKETS_VERSION 0x050402
 
 #endif // QT_QTWEBSOCKETS_VERSION_H
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/src/websockets/doc/qtwebsockets.qdocconf 
new/qtwebsockets-opensource-src-5.4.2/src/websockets/doc/qtwebsockets.qdocconf
--- 
old/qtwebsockets-opensource-src-5.4.1/src/websockets/doc/qtwebsockets.qdocconf  
    2015-02-17 05:57:31.000000000 +0100
+++ 
new/qtwebsockets-opensource-src-5.4.2/src/websockets/doc/qtwebsockets.qdocconf  
    2015-05-29 22:32:12.000000000 +0200
@@ -37,7 +37,7 @@
 
 tagfile                                             = 
../../../doc/qtwebsockets/qtwebsockets.tags
 
-depends                                             += qtcore qtnetwork qtdoc
+depends                                             += qtcore qtnetwork qtdoc 
qmake
 
 headerdirs                                          += .. \
                                                        ../../imports
@@ -50,6 +50,10 @@
 exampledirs                                         += 
../../../examples/websockets \
                                                        snippets
 
+examples.fileextensions                             += "*.html"
+
+imagedirs                                           += 
../../../examples/websockets/doc/images
+
 manifestmeta.thumbnail.names                        += "QtWebSockets/*"
 
 navigation.landingpage                              = "Qt WebSockets"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/src/websockets/qwebsocket_p.cpp 
new/qtwebsockets-opensource-src-5.4.2/src/websockets/qwebsocket_p.cpp
--- old/qtwebsockets-opensource-src-5.4.1/src/websockets/qwebsocket_p.cpp       
2015-02-17 05:57:31.000000000 +0100
+++ new/qtwebsockets-opensource-src-5.4.2/src/websockets/qwebsocket_p.cpp       
2015-05-29 22:32:12.000000000 +0200
@@ -440,8 +440,13 @@
 {
     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);
@@ -537,6 +542,10 @@
         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);
@@ -1043,6 +1052,13 @@
     }
 }
 
+void QWebSocketPrivate::socketDestroyed(QObject *socket)
+{
+    Q_ASSERT(m_pSocket);
+    if (m_pSocket.data() == socket)
+        m_pSocket.take();
+}
+
 /*!
  \internal
  */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/src/websockets/qwebsocket_p.h 
new/qtwebsockets-opensource-src-5.4.2/src/websockets/qwebsocket_p.h
--- old/qtwebsockets-opensource-src-5.4.1/src/websockets/qwebsocket_p.h 
2015-02-17 05:57:31.000000000 +0100
+++ new/qtwebsockets-opensource-src-5.4.2/src/websockets/qwebsocket_p.h 
2015-05-29 22:32:12.000000000 +0200
@@ -162,6 +162,8 @@
     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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/src/websockets/qwebsocketframe.cpp 
new/qtwebsockets-opensource-src-5.4.2/src/websockets/qwebsocketframe.cpp
--- old/qtwebsockets-opensource-src-5.4.1/src/websockets/qwebsocketframe.cpp    
2015-02-17 05:57:31.000000000 +0100
+++ new/qtwebsockets-opensource-src-5.4.2/src/websockets/qwebsocketframe.cpp    
2015-05-29 22:32:12.000000000 +0200
@@ -307,7 +307,7 @@
 // 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
 
@@ -340,7 +340,7 @@
             //maybe, a QStateMachine should be used
             if (!pIoDevice->waitForReadyRead(5000)) {
                 frame.setError(QWebSocketProtocol::CloseCodeGoingAway,
-                               QObject::tr("Timeout when reading data from 
socket."));
+                               tr("Timeout when reading data from socket."));
                 processingState = PS_DISPATCH_RESULT;
             } else {
                 processingState = returnState;
@@ -394,7 +394,7 @@
                 bytesRead = pIoDevice->read(reinterpret_cast<char *>(length), 
2);
                 if (Q_UNLIKELY(bytesRead == -1)) {
                     frame.setError(QWebSocketProtocol::CloseCodeGoingAway,
-                                   QObject::tr("Error occurred while reading 
from the network: %1")
+                                   tr("Error occurred while reading from the 
network: %1")
                                         .arg(pIoDevice->errorString()));
                     processingState = PS_DISPATCH_RESULT;
                 } else {
@@ -405,7 +405,7 @@
                         //the length, for example, the length of a 
124-byte-long string
                         //can't be encoded as the sequence 126, 0, 124"
                         
frame.setError(QWebSocketProtocol::CloseCodeProtocolError,
-                                       QObject::tr("Lengths smaller than 126 " 
\
+                                       tr("Lengths smaller than 126 " \
                                                    "must be expressed as one 
byte."));
                         processingState = PS_DISPATCH_RESULT;
                     } else {
@@ -423,7 +423,7 @@
                 bytesRead = pIoDevice->read(reinterpret_cast<char *>(length), 
8);
                 if (Q_UNLIKELY(bytesRead < 8)) {
                     
frame.setError(QWebSocketProtocol::CloseCodeAbnormalDisconnection,
-                                   QObject::tr("Something went wrong during "\
+                                   tr("Something went wrong during "\
                                                "reading from the network."));
                     processingState = PS_DISPATCH_RESULT;
                 } else {
@@ -432,7 +432,7 @@
                     payloadLength = qFromBigEndian<quint64>(length);
                     if (Q_UNLIKELY(payloadLength & (quint64(1) << 63))) {
                         
frame.setError(QWebSocketProtocol::CloseCodeProtocolError,
-                                       QObject::tr("Highest bit of payload 
length is not 0."));
+                                       tr("Highest bit of payload length is 
not 0."));
                         processingState = PS_DISPATCH_RESULT;
                     } else if (Q_UNLIKELY(payloadLength <= 0xFFFFu)) {
                         //see http://tools.ietf.org/html/rfc6455#page-28 
paragraph 5.2
@@ -440,7 +440,7 @@
                         //the length, for example, the length of a 
124-byte-long string
                         //can't be encoded as the sequence 126, 0, 124"
                         
frame.setError(QWebSocketProtocol::CloseCodeProtocolError,
-                                       QObject::tr("Lengths smaller than 65536 
(2^16) " \
+                                       tr("Lengths smaller than 65536 (2^16) " 
\
                                                    "must be expressed as 2 
bytes."));
                         processingState = PS_DISPATCH_RESULT;
                     } else {
@@ -459,7 +459,7 @@
                                             sizeof(frame.m_mask));
                 if (bytesRead == -1) {
                     frame.setError(QWebSocketProtocol::CloseCodeGoingAway,
-                                   QObject::tr("Error while reading from the 
network: %1.")
+                                   tr("Error while reading from the network: 
%1.")
                                         .arg(pIoDevice->errorString()));
                     processingState = PS_DISPATCH_RESULT;
                 } else {
@@ -476,7 +476,7 @@
                 processingState = PS_DISPATCH_RESULT;
             } else if (Q_UNLIKELY(payloadLength > MAX_FRAME_SIZE_IN_BYTES)) {
                 frame.setError(QWebSocketProtocol::CloseCodeTooMuchData,
-                               QObject::tr("Maximum framesize exceeded."));
+                               tr("Maximum framesize exceeded."));
                 processingState = PS_DISPATCH_RESULT;
             } else {
                 quint64 bytesAvailable = quint64(pIoDevice->bytesAvailable());
@@ -487,7 +487,7 @@
                     if (Q_UNLIKELY(frame.m_payload.length() != 
int(payloadLength))) {
                         //some error occurred; refer to the Qt documentation 
of QIODevice::read()
                         
frame.setError(QWebSocketProtocol::CloseCodeAbnormalDisconnection,
-                                       QObject::tr("Some serious error 
occurred " \
+                                       tr("Some serious error occurred " \
                                                    "while reading from the 
network."));
                         processingState = PS_DISPATCH_RESULT;
                     } else {
@@ -519,7 +519,7 @@
     return frame;
 }
 
-#if defined(Q_OS_WINPHONE) && defined(__ARM__)
+#if (defined(Q_OS_WINPHONE) || defined(Q_OS_WINRT)) && defined(__ARM__)
 #  pragma optimize("", on)
 #endif
 
@@ -540,16 +540,16 @@
 bool QWebSocketFrame::checkValidity()
 {
     if (Q_UNLIKELY(m_rsv1 || m_rsv2 || m_rsv3)) {
-        setError(QWebSocketProtocol::CloseCodeProtocolError, QObject::tr("Rsv 
field is non-zero"));
+        setError(QWebSocketProtocol::CloseCodeProtocolError, tr("Rsv field is 
non-zero"));
     } else if (Q_UNLIKELY(QWebSocketProtocol::isOpCodeReserved(m_opCode))) {
-        setError(QWebSocketProtocol::CloseCodeProtocolError, QObject::tr("Used 
reserved opcode"));
+        setError(QWebSocketProtocol::CloseCodeProtocolError, tr("Used reserved 
opcode"));
     } else if (isControlFrame()) {
         if (Q_UNLIKELY(m_length > 125)) {
             setError(QWebSocketProtocol::CloseCodeProtocolError,
-                     QObject::tr("Controle frame is larger than 125 bytes"));
+                     tr("Controle frame is larger than 125 bytes"));
         } else if (Q_UNLIKELY(!m_isFinalFrame)) {
             setError(QWebSocketProtocol::CloseCodeProtocolError,
-                     QObject::tr("Controle frames cannot be fragmented"));
+                     tr("Controle frames cannot be fragmented"));
         } else {
             m_isValid = true;
         }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/src/websockets/qwebsocketframe_p.h 
new/qtwebsockets-opensource-src-5.4.2/src/websockets/qwebsocketframe_p.h
--- old/qtwebsockets-opensource-src-5.4.1/src/websockets/qwebsocketframe_p.h    
2015-02-17 05:57:31.000000000 +0100
+++ new/qtwebsockets-opensource-src-5.4.2/src/websockets/qwebsocketframe_p.h    
2015-05-29 22:32:12.000000000 +0200
@@ -36,6 +36,7 @@
 
 #include <QtCore/QString>
 #include <QtCore/QByteArray>
+#include <QtCore/QCoreApplication>
 #include <limits.h>
 
 #include "qwebsockets_global.h"
@@ -51,6 +52,8 @@
 
 class Q_AUTOTEST_EXPORT QWebSocketFrame
 {
+    Q_DECLARE_TR_FUNCTIONS(QWebSocketFrame)
+
 public:
     QWebSocketFrame();
     QWebSocketFrame(const QWebSocketFrame &other);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/src/websockets/qwebsockethandshakerequest.cpp
 
new/qtwebsockets-opensource-src-5.4.2/src/websockets/qwebsockethandshakerequest.cpp
--- 
old/qtwebsockets-opensource-src-5.4.1/src/websockets/qwebsockethandshakerequest.cpp
 2015-02-17 05:57:31.000000000 +0100
+++ 
new/qtwebsockets-opensource-src-5.4.2/src/websockets/qwebsockethandshakerequest.cpp
 2015-05-29 22:32:12.000000000 +0200
@@ -222,10 +222,22 @@
         headerLine = textStream.readLine();
     }
 
-    const QString host = m_headers.value(QStringLiteral("host"), QString());
     m_requestUrl = QUrl::fromEncoded(resourceName.toLatin1());
-    if (m_requestUrl.isRelative())
+    QString host = m_headers.value(QStringLiteral("host"), QString());
+    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(":");
+        bool ok = false;
+        int port;
+        if (idx != -1) {
+            port = host.rightRef(host.length() - idx - 1).toInt(&ok);
+            host.truncate(idx);
+        }
         m_requestUrl.setHost(host);
+        if (ok)
+            m_requestUrl.setPort(port);
+    }
     if (m_requestUrl.scheme().isEmpty()) {
         const QString scheme =  isSecure() ? QStringLiteral("wss") : 
QStringLiteral("ws");
         m_requestUrl.setScheme(scheme);
@@ -260,7 +272,7 @@
         connectionValues << (*c).trimmed();
 
     //optional headers
-    m_origin = m_headers.value(QStringLiteral("sec-websocket-origin"), 
QString());
+    m_origin = m_headers.value(QStringLiteral("origin"), QString());
     const QStringList protocolLines = 
m_headers.values(QStringLiteral("sec-websocket-protocol"));
     for (QStringList::const_iterator pl = protocolLines.begin(); pl != 
protocolLines.end(); ++pl) {
         QStringList protocols = (*pl).split(QStringLiteral(","), 
QString::SkipEmptyParts);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/tests/auto/handshakerequest/tst_handshakerequest.cpp
 
new/qtwebsockets-opensource-src-5.4.2/tests/auto/handshakerequest/tst_handshakerequest.cpp
--- 
old/qtwebsockets-opensource-src-5.4.1/tests/auto/handshakerequest/tst_handshakerequest.cpp
  2015-02-17 05:57:31.000000000 +0100
+++ 
new/qtwebsockets-opensource-src-5.4.2/tests/auto/handshakerequest/tst_handshakerequest.cpp
  2015-05-29 22:32:12.000000000 +0200
@@ -65,6 +65,8 @@
 
     void tst_multipleValuesInConnectionHeader();
     void tst_multipleVersions();
+
+    void tst_qtbug_39355();
 };
 
 tst_HandshakeRequest::tst_HandshakeRequest()
@@ -290,6 +292,26 @@
     QCOMPARE(request.versions().at(0), QWebSocketProtocol::Version13);
 }
 
+void tst_HandshakeRequest::tst_qtbug_39355()
+{
+    QString header = QStringLiteral("GET /ABC/DEF/ HTTP/1.1\r\nHost: 
localhost:1234\r\n") +
+                     QStringLiteral("Sec-WebSocket-Version: 13\r\n") +
+                     QStringLiteral("Sec-WebSocket-Key: 
2Wg20829/4ziWlmsUAD8Dg==\r\n") +
+                     QStringLiteral("Upgrade: websocket\r\n") +
+                     QStringLiteral("Connection: Upgrade\r\n\r\n");
+    QByteArray data;
+    QTextStream textStream(&data);
+    QWebSocketHandshakeRequest request(8080, false);
+
+    textStream << header;
+    textStream.seek(0);
+    request.readHandshake(textStream);
+
+    QVERIFY(request.isValid());
+    QCOMPARE(request.port(), 1234);
+    QCOMPARE(request.host(), QStringLiteral("localhost"));
+}
+
 QTEST_MAIN(tst_HandshakeRequest)
 
 #include "tst_handshakerequest.moc"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/tests/auto/qwebsocket/tst_qwebsocket.cpp 
new/qtwebsockets-opensource-src-5.4.2/tests/auto/qwebsocket/tst_qwebsocket.cpp
--- 
old/qtwebsockets-opensource-src-5.4.1/tests/auto/qwebsocket/tst_qwebsocket.cpp  
    2015-02-17 05:57:31.000000000 +0100
+++ 
new/qtwebsockets-opensource-src-5.4.2/tests/auto/qwebsocket/tst_qwebsocket.cpp  
    2015-05-29 22:32:12.000000000 +0200
@@ -50,9 +50,6 @@
     QHostAddress hostAddress() const { return 
m_pWebSocketServer->serverAddress(); }
     quint16 port() const { return m_pWebSocketServer->serverPort(); }
 
-Q_SIGNALS:
-    void closed();
-
 private Q_SLOTS:
     void onNewConnection();
     void processTextMessage(QString message);
@@ -71,9 +68,8 @@
     m_clients()
 {
     if (m_pWebSocketServer->listen()) {
-        connect(m_pWebSocketServer, &QWebSocketServer::newConnection,
-                this, &EchoServer::onNewConnection);
-        connect(m_pWebSocketServer, &QWebSocketServer::closed, this, 
&EchoServer::closed);
+        connect(m_pWebSocketServer, SIGNAL(newConnection()),
+                this, SLOT(onNewConnection()));
     }
 }
 
@@ -87,9 +83,9 @@
 {
     QWebSocket *pSocket = m_pWebSocketServer->nextPendingConnection();
 
-    connect(pSocket, &QWebSocket::textMessageReceived, this, 
&EchoServer::processTextMessage);
-    connect(pSocket, &QWebSocket::binaryMessageReceived, this, 
&EchoServer::processBinaryMessage);
-    connect(pSocket, &QWebSocket::disconnected, this, 
&EchoServer::socketDisconnected);
+    connect(pSocket, SIGNAL(textMessageReceived(QString)), this, 
SLOT(processTextMessage(QString)));
+    connect(pSocket, SIGNAL(binaryMessageReceived(QByteArray)), this, 
SLOT(processBinaryMessage(QByteArray)));
+    connect(pSocket, SIGNAL(disconnected()), this, SLOT(socketDisconnected()));
 
     m_clients << pSocket;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebsockets-opensource-src-5.4.1/tests/auto/qwebsocketserver/tst_qwebsocketserver.cpp
 
new/qtwebsockets-opensource-src-5.4.2/tests/auto/qwebsocketserver/tst_qwebsocketserver.cpp
--- 
old/qtwebsockets-opensource-src-5.4.1/tests/auto/qwebsocketserver/tst_qwebsocketserver.cpp
  2015-02-17 05:57:31.000000000 +0100
+++ 
new/qtwebsockets-opensource-src-5.4.2/tests/auto/qwebsocketserver/tst_qwebsocketserver.cpp
  2015-05-29 22:32:12.000000000 +0200
@@ -64,6 +64,7 @@
     void tst_listening();
     void tst_connectivity();
     void tst_maxPendingConnections();
+    void tst_serverDestroyedWhileSocketConnected();
 };
 
 tst_QWebSocketServer::tst_QWebSocketServer()
@@ -350,6 +351,39 @@
     QCOMPARE(serverAcceptErrorSpy.count(), 0);
 }
 
+void tst_QWebSocketServer::tst_serverDestroyedWhileSocketConnected()
+{
+    QWebSocketServer * server = new QWebSocketServer(QString(), 
QWebSocketServer::NonSecureMode);
+    QSignalSpy serverConnectionSpy(server, SIGNAL(newConnection()));
+    QSignalSpy corsAuthenticationSpy(server,
+                              
SIGNAL(originAuthenticationRequired(QWebSocketCorsAuthenticator*)));
+    QSignalSpy serverClosedSpy(server, SIGNAL(closed()));
+
+    QWebSocket socket;
+    QSignalSpy socketConnectedSpy(&socket, SIGNAL(connected()));
+    QSignalSpy socketDisconnectedSpy(&socket, SIGNAL(disconnected()));
+
+    QVERIFY(server->listen());
+    QCOMPARE(server->serverAddress(), QHostAddress(QHostAddress::Any));
+    QCOMPARE(server->serverUrl(), QUrl(QStringLiteral("ws://") + 
QHostAddress(QHostAddress::LocalHost).toString() +
+                                  
QStringLiteral(":").append(QString::number(server->serverPort()))));
+
+    socket.open(server->serverUrl().toString());
+
+    if (socketConnectedSpy.count() == 0)
+        QVERIFY(socketConnectedSpy.wait());
+    QCOMPARE(socket.state(), QAbstractSocket::ConnectedState);
+    QCOMPARE(serverConnectionSpy.count(), 1);
+    QCOMPARE(corsAuthenticationSpy.count(), 1);
+
+    QCOMPARE(serverClosedSpy.count(), 0);
+
+    delete server;
+
+    if (socketDisconnectedSpy.count() == 0)
+        QVERIFY(socketDisconnectedSpy.wait());
+    QCOMPARE(socketDisconnectedSpy.count(), 1);
+}
 
 QTEST_MAIN(tst_QWebSocketServer)
 


Reply via email to