Add a few more const refs
authorFrederik Gladhorn <frederik.gladhorn@digia.com>
Fri, 17 Jan 2014 17:20:40 +0000 (18:20 +0100)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Fri, 17 Jan 2014 23:20:27 +0000 (00:20 +0100)
In case of processPing we need to make a copy that potentially detaches
when masking is requested, but pings are < 125 bytes.
Before this code would copy the byte array in the same way much earlier.

Change-Id: If0592bb4b508eeb11fdbf05c4bb98b9679ed0549
Reviewed-by: Kurt Pattyn <pattyn.kurt@gmail.com>
src/websockets/qwebsocket_p.cpp
src/websockets/qwebsocket_p.h
src/websockets/qwebsocketdataprocessor_p.h
src/websockets/qwebsocketframe.cpp
src/websockets/qwebsocketframe_p.h
src/websockets/qwebsocketserver_p.cpp
src/websockets/qwebsocketserver_p.h

index 8505ddb..e00f209 100644 (file)
@@ -440,14 +440,13 @@ void QWebSocketPrivate::open(const QUrl &url, bool mask)
 /*!
     \internal
  */
-void QWebSocketPrivate::ping(QByteArray payload)
+void QWebSocketPrivate::ping(const QByteArray &payload)
 {
-    if (payload.length() > 125)
-        payload.truncate(125);
+    QByteArray payloadTruncated = payload.left(125);
     m_pingTimer.restart();
-    QByteArray pingFrame = getFrameHeader(QWebSocketProtocol::OC_PING, payload.size(),
+    QByteArray pingFrame = getFrameHeader(QWebSocketProtocol::OC_PING, payloadTruncated.size(),
                                           0 /*do not mask*/, true);
-    pingFrame.append(payload);
+    pingFrame.append(payloadTruncated);
     qint64 ret = writeFrame(pingFrame);
     Q_UNUSED(ret);
 }
@@ -1024,7 +1023,7 @@ void QWebSocketPrivate::processData()
 /*!
  \internal
  */
-void QWebSocketPrivate::processPing(QByteArray data)
+void QWebSocketPrivate::processPing(const QByteArray &data)
 {
     Q_ASSERT(m_pSocket);
     quint32 maskingKey = 0;
@@ -1032,16 +1031,17 @@ void QWebSocketPrivate::processPing(QByteArray data)
         maskingKey = generateMaskingKey();
     m_pSocket->write(getFrameHeader(QWebSocketProtocol::OC_PONG, data.size(), maskingKey, true));
     if (data.size() > 0) {
+        QByteArray maskedData = data;
         if (m_mustMask)
-            QWebSocketProtocol::mask(&data, maskingKey);
-        m_pSocket->write(data);
+            QWebSocketProtocol::mask(&maskedData, maskingKey);
+        m_pSocket->write(maskedData);
     }
 }
 
 /*!
  \internal
  */
-void QWebSocketPrivate::processPong(QByteArray data)
+void QWebSocketPrivate::processPong(const QByteArray &data)
 {
     Q_Q(QWebSocket);
     Q_EMIT q->pong(static_cast<quint64>(m_pingTimer.elapsed()), data);
index 2786727..8f5d054 100644 (file)
@@ -154,7 +154,7 @@ public:
 public Q_SLOTS:
     void close(QWebSocketProtocol::CloseCode closeCode, QString reason);
     void open(const QUrl &url, bool mask);
-    void ping(QByteArray payload);
+    void ping(const QByteArray &payload);
 
 #ifndef QT_NO_SSL
     void ignoreSslErrors();
@@ -162,8 +162,8 @@ public Q_SLOTS:
 
 private Q_SLOTS:
     void processData();
-    void processPing(QByteArray data);
-    void processPong(QByteArray data);
+    void processPing(const QByteArray &data);
+    void processPong(const QByteArray &data);
     void processClose(QWebSocketProtocol::CloseCode closeCode, QString closeReason);
     void processHandshake(QTcpSocket *pSocket);
     void processStateChanged(QAbstractSocket::SocketState socketState);
index 256bcf4..983d391 100644 (file)
@@ -78,14 +78,14 @@ public:
     static quint64 maxFrameSize();
 
 Q_SIGNALS:
-    void pingReceived(QByteArray data);
-    void pongReceived(QByteArray data);
-    void closeReceived(QWebSocketProtocol::CloseCode closeCode, QString closeReason);
-    void textFrameReceived(QString frame, bool lastFrame);
-    void binaryFrameReceived(QByteArray frame, bool lastFrame);
-    void textMessageReceived(QString message);
-    void binaryMessageReceived(QByteArray message);
-    void errorEncountered(QWebSocketProtocol::CloseCode code, QString description);
+    void pingReceived(const QByteArray &data);
+    void pongReceived(const QByteArray &data);
+    void closeReceived(QWebSocketProtocol::CloseCode closeCode, const QString &closeReason);
+    void textFrameReceived(const QString &frame, bool lastFrame);
+    void binaryFrameReceived(const QByteArray &frame, bool lastFrame);
+    void textMessageReceived(const QString &message);
+    void binaryMessageReceived(const QByteArray &message);
+    void errorEncountered(QWebSocketProtocol::CloseCode code, const QString &description);
 
 public Q_SLOTS:
     void process(QIODevice *pIoDevice);
index 9765027..7c50e81 100644 (file)
@@ -523,7 +523,7 @@ QWebSocketFrame QWebSocketFrame::readFrame(QIODevice *pIoDevice)
 /*!
     \internal
  */
-void QWebSocketFrame::setError(QWebSocketProtocol::CloseCode code, QString closeReason)
+void QWebSocketFrame::setError(QWebSocketProtocol::CloseCode code, const QString &closeReason)
 {
     clear();
     m_closeCode = code;
index 74597a2..8c06a27 100644 (file)
@@ -118,7 +118,7 @@ private:
         PS_WAIT_FOR_MORE_DATA
     };
 
-    void setError(QWebSocketProtocol::CloseCode code, QString closeReason);
+    void setError(QWebSocketProtocol::CloseCode code, const QString &closeReason);
     bool checkValidity();
 };
 
index 747586c..52955ad 100644 (file)
@@ -341,7 +341,7 @@ QSslConfiguration QWebSocketServerPrivate::sslConfiguration() const
 }
 #endif
 
-void QWebSocketServerPrivate::setError(QWebSocketProtocol::CloseCode code, QString errorString)
+void QWebSocketServerPrivate::setError(QWebSocketProtocol::CloseCode code, const QString &errorString)
 {
     if ((m_error != code) || (m_errorString != errorString)) {
         Q_Q(QWebSocketServer);
index 8bf5725..b7072e0 100644 (file)
@@ -120,7 +120,7 @@ public:
     QSslConfiguration sslConfiguration() const;
 #endif
 
-    void setError(QWebSocketProtocol::CloseCode code, QString errorString);
+    void setError(QWebSocketProtocol::CloseCode code, const QString &errorString);
 
 private Q_SLOTS:
     void onNewConnection();