Locally cache read buffer size and pause mode
authorKurt Pattyn <pattyn.kurt@gmail.com>
Sun, 26 Jan 2014 16:48:07 +0000 (17:48 +0100)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Sat, 1 Feb 2014 16:02:48 +0000 (17:02 +0100)
When calling setReadBufferSize() and setPauseMode(), the internal socket
is not yet created. So we cache these values and apply them when the
internal socket is created.

Change-Id: I4299232342438c7a6c52fa8ea4a95461b3f85ebf
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@digia.com>
src/websockets/qwebsocket_p.cpp
src/websockets/qwebsocket_p.h

index 5d64f8f..646e24f 100644 (file)
@@ -99,6 +99,8 @@ QWebSocketPrivate::QWebSocketPrivate(const QString &origin, QWebSocketProtocol::
     m_protocol(),
     m_extension(),
     m_socketState(QAbstractSocket::UnconnectedState),
+    m_pauseMode(QAbstractSocket::PauseNever),
+    m_readBufferSize(0),
     m_key(),
     m_mustMask(true),
     m_isClosingHandshakeSent(false),
@@ -128,6 +130,8 @@ QWebSocketPrivate::QWebSocketPrivate(QTcpSocket *pTcpSocket, QWebSocketProtocol:
     m_protocol(),
     m_extension(),
     m_socketState(pTcpSocket->state()),
+    m_pauseMode(pTcpSocket->pauseMode()),
+    m_readBufferSize(pTcpSocket->readBufferSize()),
     m_key(),
     m_mustMask(true),
     m_isClosingHandshakeSent(false),
@@ -365,6 +369,8 @@ void QWebSocketPrivate::open(const QUrl &url, bool mask)
                 if (Q_LIKELY(m_pSocket)) {
                     m_pSocket->setSocketOption(QAbstractSocket::LowDelayOption, 1);
                     m_pSocket->setSocketOption(QAbstractSocket::KeepAliveOption, 1);
+                    m_pSocket->setReadBufferSize(m_readBufferSize);
+                    m_pSocket->setPauseMode(m_pauseMode);
 
                     makeConnections(m_pSocket.data());
                     connect(sslSocket, &QSslSocket::encryptedBytesWritten, q,
@@ -393,6 +399,8 @@ void QWebSocketPrivate::open(const QUrl &url, bool mask)
             if (Q_LIKELY(m_pSocket)) {
                 m_pSocket->setSocketOption(QAbstractSocket::LowDelayOption, 1);
                 m_pSocket->setSocketOption(QAbstractSocket::KeepAliveOption, 1);
+                m_pSocket->setReadBufferSize(m_readBufferSize);
+                m_pSocket->setPauseMode(m_pauseMode);
 
                 makeConnections(m_pSocket.data());
                 connect(m_pSocket.data(), &QAbstractSocket::bytesWritten, q,
@@ -1120,10 +1128,7 @@ quint16 QWebSocketPrivate::localPort() const
  */
 QAbstractSocket::PauseModes QWebSocketPrivate::pauseMode() const
 {
-    QAbstractSocket::PauseModes mode = QAbstractSocket::PauseNever;
-    if (Q_LIKELY(m_pSocket))
-        mode = m_pSocket->pauseMode();
-    return mode;
+    return m_pauseMode;
 }
 
 /*!
@@ -1183,10 +1188,7 @@ void QWebSocketPrivate::setProxy(const QNetworkProxy &networkProxy)
  */
 qint64 QWebSocketPrivate::readBufferSize() const
 {
-    qint64 size = 0;
-    if (Q_LIKELY(m_pSocket))
-        size = m_pSocket->readBufferSize();
-    return size;
+    return m_readBufferSize;
 }
 
 /*!
@@ -1203,8 +1205,9 @@ void QWebSocketPrivate::resume()
  */
 void QWebSocketPrivate::setPauseMode(QAbstractSocket::PauseModes pauseMode)
 {
+    m_pauseMode = pauseMode;
     if (Q_LIKELY(m_pSocket))
-        m_pSocket->setPauseMode(pauseMode);
+        m_pSocket->setPauseMode(m_pauseMode);
 }
 
 /*!
@@ -1212,8 +1215,9 @@ void QWebSocketPrivate::setPauseMode(QAbstractSocket::PauseModes pauseMode)
  */
 void QWebSocketPrivate::setReadBufferSize(qint64 size)
 {
+    m_readBufferSize = size;
     if (Q_LIKELY(m_pSocket))
-        m_pSocket->setReadBufferSize(size);
+        m_pSocket->setReadBufferSize(m_readBufferSize);
 }
 
 /*!
index f02e7ad..a837aff 100644 (file)
@@ -215,6 +215,8 @@ private:
     QString m_protocol;
     QString m_extension;
     QAbstractSocket::SocketState m_socketState;
+    QAbstractSocket::PauseModes m_pauseMode;
+    qint64 m_readBufferSize;
 
     QByteArray m_key;  //identification key used in handshake requests