Added missing functionality after a comparison between QWebSocket and QTcpSocket...
authorKurt Pattyn <pattyn.kurt@gmail.com>
Sun, 25 Aug 2013 13:22:23 +0000 (15:22 +0200)
committerKurt Pattyn <pattyn.kurt@gmail.com>
Sun, 25 Aug 2013 13:22:23 +0000 (15:22 +0200)
src/qwebsocket.cpp
src/qwebsocket.h
src/qwebsocket_p.cpp
src/qwebsocket_p.h
src/qwebsocketserver.cpp
src/qwebsocketserver.h
src/qwebsocketserver_p.cpp
src/qwebsocketserver_p.h

index 7360105..0a37887 100644 (file)
@@ -416,6 +416,14 @@ quint16 QWebSocket::localPort() const
 }
 
 /*!
+  Returns the pause mode of this socket
+ */
+QAbstractSocket::PauseModes QWebSocket::pauseMode() const
+{
+       return d_ptr->pauseMode();
+}
+
+/*!
   Returns the peer address
  */
 QHostAddress QWebSocket::peerAddress() const
@@ -466,11 +474,32 @@ qint64 QWebSocket::readBufferSize() const
 }
 
 /*!
-  Sets the proxy to \a networkProxy
+       Continues data transfer on the socket. This method should only be used after the socket
+       has been set to pause upon notifications and a notification has been received.
+       The only notification currently supported is sslErrors().
+       Calling this method if the socket is not paused results in undefined behavior.
+
+       \sa pauseMode() and setPauseMode()
  */
-void QWebSocket::setProxy(const QNetworkProxy &networkProxy)
+void QWebSocket::resume()
 {
-       d_ptr->setProxy(networkProxy);
+       d_ptr->resume();
+}
+
+/*!
+  Controls whether to pause upon receiving a notification. The \a pauseMode parameter specifies
+  the conditions in which the socket should be paused.
+  The only notification currently supported is sslErrors().
+  If set to PauseOnSslErrors, data transfer on the socket will be paused
+  and needs to be enabled explicitly again by calling resume().
+  By default, this option is set to PauseNever. This option must be called
+  before connecting to the server, otherwise it will result in undefined behavior.
+
+  \sa pauseMode() and resume()
+ */
+void QWebSocket::setPauseMode(QAbstractSocket::PauseModes pauseMode)
+{
+       d_ptr->setPauseMode(pauseMode);
 }
 
 /**
index 7248b7e..227bc25 100644 (file)
@@ -41,6 +41,7 @@ public:
        bool isValid();
        QHostAddress localAddress() const;
        quint16 localPort() const;
+       QAbstractSocket::PauseModes pauseMode() const;
        QHostAddress peerAddress() const;
        QString peerName() const;
        quint16 peerPort() const;
@@ -50,6 +51,10 @@ public:
 #endif
        qint64 readBufferSize() const;
        void setReadBufferSize(qint64 size);
+
+       void resume();
+       void setPauseMode(QAbstractSocket::PauseModes pauseMode);
+
        void setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value);
        QVariant socketOption(QAbstractSocket::SocketOption option);
        QAbstractSocket::SocketState state() const;
index 6dd4528..660c1f3 100644 (file)
@@ -1037,6 +1037,19 @@ quint16 QWebSocketPrivate::localPort() const
 /*!
        \internal
  */
+QAbstractSocket::PauseModes QWebSocketPrivate::pauseMode() const
+{
+       QAbstractSocket::PauseModes mode = QAbstractSocket::PauseNever;
+       if (m_pSocket)
+       {
+               mode = m_pSocket->pauseMode();
+       }
+       return mode;
+}
+
+/*!
+       \internal
+ */
 QHostAddress QWebSocketPrivate::peerAddress() const
 {
        QHostAddress peer;
@@ -1102,6 +1115,28 @@ qint64 QWebSocketPrivate::readBufferSize() const
 /*!
        \internal
  */
+void QWebSocketPrivate::resume()
+{
+       if (m_pSocket)
+       {
+               m_pSocket->resume();
+       }
+}
+
+/*!
+  \internal
+ */
+void QWebSocketPrivate::setPauseMode(QAbstractSocket::PauseModes pauseMode)
+{
+       if (m_pSocket)
+       {
+               m_pSocket->setPauseMode(pauseMode);
+       }
+}
+
+/*!
+       \internal
+ */
 void QWebSocketPrivate::setProxy(const QNetworkProxy &networkProxy)
 {
        if (m_pSocket)
index 9625e82..a921827 100644 (file)
@@ -57,6 +57,7 @@ public:
        bool isValid();
        QHostAddress localAddress() const;
        quint16 localPort() const;
+       QAbstractSocket::PauseModes pauseMode() const;
        QHostAddress peerAddress() const;
        QString peerName() const;
        quint16 peerPort() const;
@@ -65,6 +66,8 @@ public:
        void setProxy(const QNetworkProxy &networkProxy);
 #endif
        qint64 readBufferSize() const;
+       void resume();
+       void setPauseMode(QAbstractSocket::PauseModes pauseMode);
        void setReadBufferSize(qint64 size);
        void setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value);
        QVariant socketOption(QAbstractSocket::SocketOption option);
index 13c2f98..6ab29a6 100644 (file)
 */
 
 /*!
+       \fn void WebSocketServer::acceptError(QAbstractSocket::SocketError socketError)
+       This signal is emitted when accepting a new connection results in an error.
+       The \a socketError parameter describes the type of error that occurred
+
+       \sa pauseAccepting() and resumeAccepting().
+*/
+
+/*!
        \fn void WebSocketServer::newConnection()
        This signal is emitted every time a new connection is available.
 
@@ -167,6 +175,14 @@ QWebSocket *QWebSocketServer::nextPendingConnection()
 }
 
 /*!
+       Pauses incoming new connections. Queued connections will remain in queue.
+       \sa resumeAccepting()
+ */
+void QWebSocketServer::pauseAccepting()
+{
+       d_ptr->pauseAccepting();
+}
+
 #ifndef QT_NO_NETWORKPROXY
 /*!
        Returns the network proxy for this socket. By default QNetworkProxy::DefaultProxy is used.
@@ -194,6 +210,16 @@ void QWebSocketServer::setProxy(const QNetworkProxy &networkProxy)
        d_ptr->setProxy(networkProxy);
 }
 #endif
+/*!
+       Resumes accepting new connections.
+       \sa pauseAccepting()
+ */
+void QWebSocketServer::resumeAccepting()
+{
+       d_ptr->resumeAccepting();
+}
+
+/*!
        Returns the server's address if the server is listening for connections; otherwise returns QHostAddress::Null.
 
        \sa serverPort() and listen().
index 95adb41..424221e 100644 (file)
@@ -55,6 +55,7 @@ protected:
        virtual bool isOriginAllowed(const QString &origin) const;
 
 Q_SIGNALS:
+       void acceptError(QAbstractSocket::SocketError socketError);
        void newConnection();
 
 private:
index b5381b4..ee3ef9f 100644 (file)
@@ -112,6 +112,14 @@ QWebSocket *QWebSocketServerPrivate::nextPendingConnection()
        return pWebSocket;
 }
 
+/*!
+       \internal
+ */
+void QWebSocketServerPrivate::pauseAccepting()
+{
+       m_pTcpServer->pauseAccepting();
+}
+
 #ifndef QT_NO_NETWORKPROXY
 /*!
        \internal
@@ -132,6 +140,14 @@ void QWebSocketServerPrivate::setProxy(const QNetworkProxy &networkProxy)
 /*!
        \internal
  */
+void QWebSocketServerPrivate::resumeAccepting()
+{
+       m_pTcpServer->resumeAccepting();
+}
+
+/*!
+       \internal
+ */
 QHostAddress QWebSocketServerPrivate::serverAddress() const
 {
        return m_pTcpServer->serverAddress();
index a853fb4..45b0b87 100644 (file)
@@ -43,10 +43,12 @@ public:
        bool listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0);
        int maxPendingConnections() const;
        virtual QWebSocket *nextPendingConnection();
+       void pauseAccepting();
 #ifndef QT_NO_NETWORKPROXY
        QNetworkProxy proxy() const;
        void setProxy(const QNetworkProxy &networkProxy);
 #endif
+       void resumeAccepting();
        QHostAddress serverAddress() const;
        QAbstractSocket::SocketError serverError() const;
        quint16 serverPort() const;