From aa66bb128b4d853c6de200bf374758025dcd94b2 Mon Sep 17 00:00:00 2001 From: Frederik Gladhorn Date: Fri, 17 Jan 2014 18:20:40 +0100 Subject: Add a few more const refs 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 --- src/websockets/qwebsocket_p.cpp | 18 +++++++++--------- src/websockets/qwebsocket_p.h | 6 +++--- src/websockets/qwebsocketdataprocessor_p.h | 16 ++++++++-------- src/websockets/qwebsocketframe.cpp | 2 +- src/websockets/qwebsocketframe_p.h | 2 +- src/websockets/qwebsocketserver_p.cpp | 2 +- src/websockets/qwebsocketserver_p.h | 2 +- 7 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/websockets/qwebsocket_p.cpp b/src/websockets/qwebsocket_p.cpp index 8505ddb..e00f209 100644 --- a/src/websockets/qwebsocket_p.cpp +++ b/src/websockets/qwebsocket_p.cpp @@ -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(m_pingTimer.elapsed()), data); diff --git a/src/websockets/qwebsocket_p.h b/src/websockets/qwebsocket_p.h index 2786727..8f5d054 100644 --- a/src/websockets/qwebsocket_p.h +++ b/src/websockets/qwebsocket_p.h @@ -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); diff --git a/src/websockets/qwebsocketdataprocessor_p.h b/src/websockets/qwebsocketdataprocessor_p.h index 256bcf4..983d391 100644 --- a/src/websockets/qwebsocketdataprocessor_p.h +++ b/src/websockets/qwebsocketdataprocessor_p.h @@ -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); diff --git a/src/websockets/qwebsocketframe.cpp b/src/websockets/qwebsocketframe.cpp index 9765027..7c50e81 100644 --- a/src/websockets/qwebsocketframe.cpp +++ b/src/websockets/qwebsocketframe.cpp @@ -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; diff --git a/src/websockets/qwebsocketframe_p.h b/src/websockets/qwebsocketframe_p.h index 74597a2..8c06a27 100644 --- a/src/websockets/qwebsocketframe_p.h +++ b/src/websockets/qwebsocketframe_p.h @@ -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(); }; diff --git a/src/websockets/qwebsocketserver_p.cpp b/src/websockets/qwebsocketserver_p.cpp index 747586c..52955ad 100644 --- a/src/websockets/qwebsocketserver_p.cpp +++ b/src/websockets/qwebsocketserver_p.cpp @@ -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); diff --git a/src/websockets/qwebsocketserver_p.h b/src/websockets/qwebsocketserver_p.h index 8bf5725..b7072e0 100644 --- a/src/websockets/qwebsocketserver_p.h +++ b/src/websockets/qwebsocketserver_p.h @@ -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(); -- cgit v1.2.1