From ac4ae5a8950a1756a5bd937d33e543a2ed7c8f25 Mon Sep 17 00:00:00 2001 From: Kurt Pattyn Date: Sat, 4 Jan 2014 13:56:01 +0100 Subject: Adapt to Qt coding style Change-Id: I137ac180b19228e0a5683e21ca87e3fe2db9f97b Reviewed-by: Kurt Pattyn --- src/websockets/qwebsocket_p.cpp | 189 +++++--------- src/websockets/qwebsocketcorsauthenticator.cpp | 3 +- src/websockets/qwebsocketdataprocessor_p.cpp | 124 +++++----- src/websockets/qwebsocketframe_p.cpp | 298 +++++++++++------------ src/websockets/qwebsockethandshakerequest_p.cpp | 18 +- src/websockets/qwebsockethandshakeresponse_p.cpp | 11 +- src/websockets/qwebsocketprotocol_p.cpp | 10 +- src/websockets/qwebsocketserver_p.cpp | 32 +-- 8 files changed, 287 insertions(+), 398 deletions(-) (limited to 'src/websockets') diff --git a/src/websockets/qwebsocket_p.cpp b/src/websockets/qwebsocket_p.cpp index 7b7af11..eaa07ab 100644 --- a/src/websockets/qwebsocket_p.cpp +++ b/src/websockets/qwebsocket_p.cpp @@ -145,12 +145,10 @@ QWebSocketPrivate::QWebSocketPrivate(QTcpSocket *pTcpSocket, QWebSocketProtocol: */ QWebSocketPrivate::~QWebSocketPrivate() { - if (!m_pSocket) { + if (!m_pSocket) return; - } - if (state() == QAbstractSocket::ConnectedState) { + if (state() == QAbstractSocket::ConnectedState) close(QWebSocketProtocol::CC_GOING_AWAY, tr("Connection closed")); - } releaseConnections(m_pSocket.data()); } @@ -159,9 +157,8 @@ QWebSocketPrivate::~QWebSocketPrivate() */ void QWebSocketPrivate::abort() { - if (m_pSocket) { + if (m_pSocket) m_pSocket->abort(); - } } /*! @@ -170,9 +167,8 @@ void QWebSocketPrivate::abort() QAbstractSocket::SocketError QWebSocketPrivate::error() const { QAbstractSocket::SocketError err = QAbstractSocket::OperationError; - if (Q_LIKELY(m_pSocket)) { + if (Q_LIKELY(m_pSocket)) err = m_pSocket->error(); - } return err; } @@ -182,11 +178,10 @@ QAbstractSocket::SocketError QWebSocketPrivate::error() const QString QWebSocketPrivate::errorString() const { QString errMsg; - if (!m_errorString.isEmpty()) { + if (!m_errorString.isEmpty()) errMsg = m_errorString; - } else if (m_pSocket) { + else if (m_pSocket) errMsg = m_pSocket->errorString(); - } return errMsg; } @@ -196,9 +191,8 @@ QString QWebSocketPrivate::errorString() const bool QWebSocketPrivate::flush() { bool result = true; - if (Q_LIKELY(m_pSocket)) { + if (Q_LIKELY(m_pSocket)) result = m_pSocket->flush(); - } return result; } @@ -274,9 +268,8 @@ void QWebSocketPrivate::ignoreSslErrors() m_configuration.m_ignoreSslErrors = true; if (Q_LIKELY(m_pSocket)) { QSslSocket *pSslSocket = qobject_cast(m_pSocket.data()); - if (Q_LIKELY(pSslSocket)) { + if (Q_LIKELY(pSslSocket)) pSslSocket->ignoreSslErrors(); - } } } @@ -310,24 +303,20 @@ QWebSocket *QWebSocketPrivate::upgradeFrom(QTcpSocket *pTcpSocket, */ void QWebSocketPrivate::close(QWebSocketProtocol::CloseCode closeCode, QString reason) { - if (Q_UNLIKELY(!m_pSocket)) { + if (Q_UNLIKELY(!m_pSocket)) return; - } if (!m_isClosingHandshakeSent) { Q_Q(QWebSocket); quint32 maskingKey = 0; - if (m_mustMask) { + if (m_mustMask) maskingKey = generateMaskingKey(); - } const quint16 code = qToBigEndian(closeCode); QByteArray payload; payload.append(static_cast(static_cast(&code)), 2); - if (!reason.isEmpty()) { + if (!reason.isEmpty()) payload.append(reason.toUtf8()); - } - if (m_mustMask) { + if (m_mustMask) QWebSocketProtocol::mask(payload.data(), payload.size(), maskingKey); - } QByteArray frame = getFrameHeader(QWebSocketProtocol::OC_CLOSE, payload.size(), maskingKey, true); frame.append(payload); m_pSocket->write(frame); @@ -367,9 +356,8 @@ void QWebSocketPrivate::open(const QUrl &url, bool mask) } resourceName.append(url.query()); } - if (resourceName.isEmpty()) { + if (resourceName.isEmpty()) resourceName = QStringLiteral("/"); - } setResourceName(resourceName); enableMasking(mask); @@ -391,11 +379,10 @@ void QWebSocketPrivate::open(const QUrl &url, bool mask) setSocketState(QAbstractSocket::ConnectingState); sslSocket->setSslConfiguration(m_configuration.m_sslConfiguration); - if (Q_UNLIKELY(m_configuration.m_ignoreSslErrors)) { + if (Q_UNLIKELY(m_configuration.m_ignoreSslErrors)) sslSocket->ignoreSslErrors(); - } else { + else sslSocket->ignoreSslErrors(m_configuration.m_ignoredSslErrors); - } #ifndef QT_NO_NETWORKPROXY sslSocket->setProxy(m_configuration.m_proxy); #endif @@ -439,9 +426,8 @@ void QWebSocketPrivate::open(const QUrl &url, bool mask) */ void QWebSocketPrivate::ping(QByteArray payload) { - if (payload.length() > 125) { + if (payload.length() > 125) payload.truncate(125); - } m_pingTimer.restart(); QByteArray pingFrame = getFrameHeader(QWebSocketProtocol::OC_PING, payload.size(), 0 /*do not mask*/, true); pingFrame.append(payload); @@ -454,9 +440,8 @@ void QWebSocketPrivate::ping(QByteArray payload) */ void QWebSocketPrivate::setVersion(QWebSocketProtocol::Version version) { - if (m_version != version) { + if (m_version != version) m_version = version; - } } /*! @@ -465,9 +450,8 @@ void QWebSocketPrivate::setVersion(QWebSocketProtocol::Version version) */ void QWebSocketPrivate::setResourceName(const QString &resourceName) { - if (m_resourceName != resourceName) { + if (m_resourceName != resourceName) m_resourceName = resourceName; - } } /*! @@ -475,9 +459,8 @@ void QWebSocketPrivate::setResourceName(const QString &resourceName) */ void QWebSocketPrivate::setRequestUrl(const QUrl &requestUrl) { - if (m_requestUrl != requestUrl) { + if (m_requestUrl != requestUrl) m_requestUrl = requestUrl; - } } /*! @@ -485,9 +468,8 @@ void QWebSocketPrivate::setRequestUrl(const QUrl &requestUrl) */ void QWebSocketPrivate::setOrigin(const QString &origin) { - if (m_origin != origin) { + if (m_origin != origin) m_origin = origin; - } } /*! @@ -495,9 +477,8 @@ void QWebSocketPrivate::setOrigin(const QString &origin) */ void QWebSocketPrivate::setProtocol(const QString &protocol) { - if (m_protocol != protocol) { + if (m_protocol != protocol) m_protocol = protocol; - } } /*! @@ -505,9 +486,8 @@ void QWebSocketPrivate::setProtocol(const QString &protocol) */ void QWebSocketPrivate::setExtension(const QString &extension) { - if (m_extension != extension) { + if (m_extension != extension) m_extension = extension; - } } /*! @@ -515,9 +495,8 @@ void QWebSocketPrivate::setExtension(const QString &extension) */ void QWebSocketPrivate::enableMasking(bool enable) { - if (m_mustMask != enable) { + if (m_mustMask != enable) m_mustMask = enable; - } } /*! @@ -556,9 +535,8 @@ void QWebSocketPrivate::makeConnections(const QTcpSocket *pTcpSocket) */ void QWebSocketPrivate::releaseConnections(const QTcpSocket *pTcpSocket) { - if (Q_LIKELY(pTcpSocket)) { + if (Q_LIKELY(pTcpSocket)) disconnect(pTcpSocket); - } disconnect(&m_dataProcessor); } @@ -642,9 +620,8 @@ QByteArray QWebSocketPrivate::getFrameHeader(QWebSocketProtocol::OpCode opCode, header.append(static_cast(byte)); byte = 0x00; - if (maskingKey != 0) { + if (maskingKey != 0) byte |= 0x80; - } if (payloadLength <= 125) { byte |= static_cast(payloadLength); header.append(static_cast(byte)); @@ -678,9 +655,9 @@ QByteArray QWebSocketPrivate::getFrameHeader(QWebSocketProtocol::OpCode opCode, qint64 QWebSocketPrivate::doWriteFrames(const QByteArray &data, bool isBinary) { qint64 payloadWritten = 0; - if (Q_UNLIKELY(!m_pSocket)) { + if (Q_UNLIKELY(!m_pSocket)) return payloadWritten; - } + Q_Q(QWebSocket); const QWebSocketProtocol::OpCode firstOpCode = isBinary ? QWebSocketProtocol::OC_BINARY : QWebSocketProtocol::OC_TEXT; @@ -690,23 +667,21 @@ qint64 QWebSocketPrivate::doWriteFrames(const QByteArray &data, bool isBinary) tmpData.detach(); char *payload = tmpData.data(); quint64 sizeLeft = quint64(data.size()) % FRAME_SIZE_IN_BYTES; - if (Q_LIKELY(sizeLeft)) { + if (Q_LIKELY(sizeLeft)) ++numFrames; - } + //catch the case where the payload is zero bytes; //in this case, we still need to send a frame - if (Q_UNLIKELY(numFrames == 0)) { + if (Q_UNLIKELY(numFrames == 0)) numFrames = 1; - } quint64 currentPosition = 0; qint64 bytesWritten = 0; quint64 bytesLeft = data.size(); for (int i = 0; i < numFrames; ++i) { quint32 maskingKey = 0; - if (m_mustMask) { + if (m_mustMask) maskingKey = generateMaskingKey(); - } const bool isLastFrame = (i == (numFrames - 1)); const bool isFirstFrame = (i == 0); @@ -720,9 +695,8 @@ qint64 QWebSocketPrivate::doWriteFrames(const QByteArray &data, bool isBinary) //write payload if (Q_LIKELY(size > 0)) { char *currentData = payload + currentPosition; - if (m_mustMask) { + if (m_mustMask) QWebSocketProtocol::mask(currentData, size, maskingKey); - } qint64 written = m_pSocket->write(currentData, static_cast(size)); if (Q_LIKELY(written > 0)) { bytesWritten += written; @@ -794,9 +768,8 @@ qint64 QWebSocketPrivate::writeFrames(const QList &frames) qint64 written = 0; if (Q_LIKELY(m_pSocket)) { QList::const_iterator it; - for (it = frames.cbegin(); it < frames.cend(); ++it) { + for (it = frames.cbegin(); it < frames.cend(); ++it) written += writeFrame(*it); - } } return written; } @@ -807,9 +780,8 @@ qint64 QWebSocketPrivate::writeFrames(const QList &frames) qint64 QWebSocketPrivate::writeFrame(const QByteArray &frame) { qint64 written = 0; - if (Q_LIKELY(m_pSocket)) { + if (Q_LIKELY(m_pSocket)) written = m_pSocket->write(frame); - } return written; } @@ -839,9 +811,8 @@ QString readLine(QTcpSocket *pSocket) void QWebSocketPrivate::processHandshake(QTcpSocket *pSocket) { Q_Q(QWebSocket); - if (!pSocket) { + if (Q_UNLIKELY(!pSocket)) return; - } bool ok = false; QString errorDescription; @@ -894,9 +865,8 @@ void QWebSocketPrivate::processHandshake(QTcpSocket *pSocket) if (ok) { const QString accept = calculateAcceptKey(m_key); ok = (accept == acceptKey); - if (!ok) { + if (!ok) errorDescription = tr("Accept-Key received from server %1 does not match the client key %2.").arg(acceptKey).arg(accept); - } } else { errorDescription = tr("QWebSocketPrivate::processHandshake: Invalid statusline in response: %1.").arg(statusLine); } @@ -939,46 +909,37 @@ void QWebSocketPrivate::processStateChanged(QAbstractSocket::SocketState socketS Q_ASSERT(m_pSocket); Q_Q(QWebSocket); QAbstractSocket::SocketState webSocketState = this->state(); - switch (socketState) - { + switch (socketState) { case QAbstractSocket::ConnectedState: - { if (webSocketState == QAbstractSocket::ConnectingState) { m_key = generateKey(); const QString handshake = createHandShakeRequest(m_resourceName, m_requestUrl.host() % QStringLiteral(":") % QString::number(m_requestUrl.port(80)), origin(), QStringLiteral(""), QStringLiteral(""), m_key); m_pSocket->write(handshake.toLatin1()); } break; - } + case QAbstractSocket::ClosingState: - { - if (webSocketState == QAbstractSocket::ConnectedState) { + if (webSocketState == QAbstractSocket::ConnectedState) setSocketState(QAbstractSocket::ClosingState); - } break; - } + case QAbstractSocket::UnconnectedState: - { if (webSocketState != QAbstractSocket::UnconnectedState) { setSocketState(QAbstractSocket::UnconnectedState); Q_EMIT q->disconnected(); } break; - } + case QAbstractSocket::HostLookupState: case QAbstractSocket::ConnectingState: case QAbstractSocket::BoundState: case QAbstractSocket::ListeningState: - { //do nothing //to make C++ compiler happy; break; - } default: - { break; } - } } //order of events: @@ -997,11 +958,10 @@ void QWebSocketPrivate::processData() { Q_ASSERT(m_pSocket); while (m_pSocket->bytesAvailable()) { - if (state() == QAbstractSocket::ConnectingState) { + if (state() == QAbstractSocket::ConnectingState) processHandshake(m_pSocket.data()); - } else { + else m_dataProcessor.process(m_pSocket.data()); - } } } @@ -1012,14 +972,12 @@ void QWebSocketPrivate::processPing(QByteArray data) { Q_ASSERT(m_pSocket); quint32 maskingKey = 0; - if (m_mustMask) { + if (m_mustMask) maskingKey = generateMaskingKey(); - } m_pSocket->write(getFrameHeader(QWebSocketProtocol::OC_PONG, data.size(), maskingKey, true)); if (data.size() > 0) { - if (m_mustMask) { + if (m_mustMask) QWebSocketProtocol::mask(&data, maskingKey); - } m_pSocket->write(data); } } @@ -1059,16 +1017,13 @@ QString QWebSocketPrivate::createHandShakeRequest(QString resourceName, QStringLiteral("Upgrade: websocket") << QStringLiteral("Connection: Upgrade") << QStringLiteral("Sec-WebSocket-Key: ") % QString::fromLatin1(key); - if (!origin.isEmpty()) { + if (!origin.isEmpty()) handshakeRequest << QStringLiteral("Origin: ") % origin; - } handshakeRequest << QStringLiteral("Sec-WebSocket-Version: ") % QString::number(QWebSocketProtocol::currentVersion()); - if (extensions.length() > 0) { + if (extensions.length() > 0) handshakeRequest << QStringLiteral("Sec-WebSocket-Extensions: ") % extensions; - } - if (protocols.length() > 0) { + if (protocols.length() > 0) handshakeRequest << QStringLiteral("Sec-WebSocket-Protocol: ") % protocols; - } handshakeRequest << QStringLiteral("\r\n"); return handshakeRequest.join(QStringLiteral("\r\n")); @@ -1088,9 +1043,8 @@ QAbstractSocket::SocketState QWebSocketPrivate::state() const bool QWebSocketPrivate::waitForConnected(int msecs) { bool result = false; - if (Q_LIKELY(m_pSocket)) { + if (Q_LIKELY(m_pSocket)) result = m_pSocket->waitForConnected(msecs); - } return result; } @@ -1100,9 +1054,8 @@ bool QWebSocketPrivate::waitForConnected(int msecs) bool QWebSocketPrivate::waitForDisconnected(int msecs) { bool result = false; - if (Q_LIKELY(m_pSocket)) { + if (Q_LIKELY(m_pSocket)) result = m_pSocket->waitForDisconnected(msecs); - } return result; } @@ -1123,9 +1076,8 @@ void QWebSocketPrivate::setSocketState(QAbstractSocket::SocketState state) */ void QWebSocketPrivate::setErrorString(const QString &errorString) { - if (m_errorString != errorString) { + if (m_errorString != errorString) m_errorString = errorString; - } } /*! @@ -1134,9 +1086,8 @@ void QWebSocketPrivate::setErrorString(const QString &errorString) QHostAddress QWebSocketPrivate::localAddress() const { QHostAddress address; - if (Q_LIKELY(m_pSocket)) { + if (Q_LIKELY(m_pSocket)) address = m_pSocket->localAddress(); - } return address; } @@ -1146,9 +1097,8 @@ QHostAddress QWebSocketPrivate::localAddress() const quint16 QWebSocketPrivate::localPort() const { quint16 port = 0; - if (Q_LIKELY(m_pSocket)) { + if (Q_LIKELY(m_pSocket)) port = m_pSocket->localPort(); - } return port; } @@ -1158,9 +1108,8 @@ quint16 QWebSocketPrivate::localPort() const QAbstractSocket::PauseModes QWebSocketPrivate::pauseMode() const { QAbstractSocket::PauseModes mode = QAbstractSocket::PauseNever; - if (Q_LIKELY(m_pSocket)) { + if (Q_LIKELY(m_pSocket)) mode = m_pSocket->pauseMode(); - } return mode; } @@ -1170,9 +1119,8 @@ QAbstractSocket::PauseModes QWebSocketPrivate::pauseMode() const QHostAddress QWebSocketPrivate::peerAddress() const { QHostAddress address; - if (Q_LIKELY(m_pSocket)) { + if (Q_LIKELY(m_pSocket)) address = m_pSocket->peerAddress(); - } return address; } @@ -1182,9 +1130,8 @@ QHostAddress QWebSocketPrivate::peerAddress() const QString QWebSocketPrivate::peerName() const { QString name; - if (Q_LIKELY(m_pSocket)) { + if (Q_LIKELY(m_pSocket)) name = m_pSocket->peerName(); - } return name; } @@ -1194,9 +1141,8 @@ QString QWebSocketPrivate::peerName() const quint16 QWebSocketPrivate::peerPort() const { quint16 port = 0; - if (Q_LIKELY(m_pSocket)) { + if (Q_LIKELY(m_pSocket)) port = m_pSocket->peerPort(); - } return port; } @@ -1214,9 +1160,8 @@ QNetworkProxy QWebSocketPrivate::proxy() const */ void QWebSocketPrivate::setProxy(const QNetworkProxy &networkProxy) { - if (networkProxy != networkProxy) { + if (networkProxy != networkProxy) m_configuration.m_proxy = networkProxy; - } } #endif //QT_NO_NETWORKPROXY @@ -1226,9 +1171,8 @@ void QWebSocketPrivate::setProxy(const QNetworkProxy &networkProxy) qint64 QWebSocketPrivate::readBufferSize() const { qint64 size = 0; - if (Q_LIKELY(m_pSocket)) { + if (Q_LIKELY(m_pSocket)) size = m_pSocket->readBufferSize(); - } return size; } @@ -1237,9 +1181,8 @@ qint64 QWebSocketPrivate::readBufferSize() const */ void QWebSocketPrivate::resume() { - if (Q_LIKELY(m_pSocket)) { + if (Q_LIKELY(m_pSocket)) m_pSocket->resume(); - } } /*! @@ -1247,9 +1190,8 @@ void QWebSocketPrivate::resume() */ void QWebSocketPrivate::setPauseMode(QAbstractSocket::PauseModes pauseMode) { - if (Q_LIKELY(m_pSocket)) { + if (Q_LIKELY(m_pSocket)) m_pSocket->setPauseMode(pauseMode); - } } /*! @@ -1257,9 +1199,8 @@ void QWebSocketPrivate::setPauseMode(QAbstractSocket::PauseModes pauseMode) */ void QWebSocketPrivate::setReadBufferSize(qint64 size) { - if (Q_LIKELY(m_pSocket)) { + if (Q_LIKELY(m_pSocket)) m_pSocket->setReadBufferSize(size); - } } /*! @@ -1267,9 +1208,8 @@ void QWebSocketPrivate::setReadBufferSize(qint64 size) */ void QWebSocketPrivate::setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value) { - if (Q_LIKELY(m_pSocket)) { + if (Q_LIKELY(m_pSocket)) m_pSocket->setSocketOption(option, value); - } } /*! @@ -1278,9 +1218,8 @@ void QWebSocketPrivate::setSocketOption(QAbstractSocket::SocketOption option, co QVariant QWebSocketPrivate::socketOption(QAbstractSocket::SocketOption option) { QVariant val; - if (Q_LIKELY(m_pSocket)) { + if (Q_LIKELY(m_pSocket)) val = m_pSocket->socketOption(option); - } return val; } diff --git a/src/websockets/qwebsocketcorsauthenticator.cpp b/src/websockets/qwebsocketcorsauthenticator.cpp index dd0c0ec..72ccf7d 100644 --- a/src/websockets/qwebsocketcorsauthenticator.cpp +++ b/src/websockets/qwebsocketcorsauthenticator.cpp @@ -143,9 +143,8 @@ QWebSocketCorsAuthenticator &QWebSocketCorsAuthenticator::operator =(QWebSocketC */ void QWebSocketCorsAuthenticator::swap(QWebSocketCorsAuthenticator &other) { - if (&other != this) { + if (&other != this) qSwap(d_ptr, other.d_ptr); - } } /*! diff --git a/src/websockets/qwebsocketdataprocessor_p.cpp b/src/websockets/qwebsocketdataprocessor_p.cpp index 1b3c8c3..68791ff 100644 --- a/src/websockets/qwebsocketdataprocessor_p.cpp +++ b/src/websockets/qwebsocketdataprocessor_p.cpp @@ -167,11 +167,10 @@ void QWebSocketDataProcessor::process(QIODevice *pIoDevice) } if (frame.isFinalFrame()) { - if (m_opCode == QWebSocketProtocol::OC_TEXT) { + if (m_opCode == QWebSocketProtocol::OC_TEXT) Q_EMIT textMessageReceived(m_textMessage); - } else { + else Q_EMIT binaryMessageReceived(m_binaryMessage); - } clear(); isDone = true; } @@ -205,9 +204,7 @@ void QWebSocketDataProcessor::clear() } } if (!m_pConverterState) - { m_pConverterState = new QTextCodec::ConverterState(QTextCodec::ConvertInvalidToNull | QTextCodec::IgnoreHeader); - } } /*! @@ -216,73 +213,68 @@ void QWebSocketDataProcessor::clear() bool QWebSocketDataProcessor::processControlFrame(const QWebSocketFrame &frame) { bool mustStopProcessing = true; //control frames never expect additional frames to be processed - switch (frame.opCode()) + switch (frame.opCode()) { + case QWebSocketProtocol::OC_PING: + Q_EMIT pingReceived(frame.payload()); + break; + + case QWebSocketProtocol::OC_PONG: + Q_EMIT pongReceived(frame.payload()); + break; + + case QWebSocketProtocol::OC_CLOSE: { - case QWebSocketProtocol::OC_PING: - { - Q_EMIT pingReceived(frame.payload()); - break; - } - case QWebSocketProtocol::OC_PONG: - { - Q_EMIT pongReceived(frame.payload()); - break; - } - case QWebSocketProtocol::OC_CLOSE: - { - quint16 closeCode = QWebSocketProtocol::CC_NORMAL; - QString closeReason; - QByteArray payload = frame.payload(); - if (Q_UNLIKELY(payload.size() == 1)) { - //size is either 0 (no close code and no reason) or >= 2 (at least a close code of 2 bytes) + quint16 closeCode = QWebSocketProtocol::CC_NORMAL; + QString closeReason; + QByteArray payload = frame.payload(); + if (Q_UNLIKELY(payload.size() == 1)) { + //size is either 0 (no close code and no reason) or >= 2 (at least a close code of 2 bytes) + closeCode = QWebSocketProtocol::CC_PROTOCOL_ERROR; + closeReason = tr("Payload of close frame is too small."); + } else if (Q_LIKELY(payload.size() > 1)) { + //close frame can have a close code and reason + closeCode = qFromBigEndian(reinterpret_cast(payload.constData())); + if (Q_UNLIKELY(!QWebSocketProtocol::isCloseCodeValid(closeCode))) { closeCode = QWebSocketProtocol::CC_PROTOCOL_ERROR; - closeReason = tr("Payload of close frame is too small."); - } else if (Q_LIKELY(payload.size() > 1)) { - //close frame can have a close code and reason - closeCode = qFromBigEndian(reinterpret_cast(payload.constData())); - if (Q_UNLIKELY(!QWebSocketProtocol::isCloseCodeValid(closeCode))) { - closeCode = QWebSocketProtocol::CC_PROTOCOL_ERROR; - closeReason = tr("Invalid close code %1 detected.").arg(closeCode); - } else { - if (payload.size() > 2) { - QTextCodec *tc = QTextCodec::codecForName("UTF-8"); - QTextCodec::ConverterState state(QTextCodec::ConvertInvalidToNull); - closeReason = tc->toUnicode(payload.constData() + 2, payload.size() - 2, &state); - const bool failed = (state.invalidChars != 0) || (state.remainingChars != 0); - if (Q_UNLIKELY(failed)) { - closeCode = QWebSocketProtocol::CC_WRONG_DATATYPE; - closeReason = tr("Invalid UTF-8 code encountered."); - } + closeReason = tr("Invalid close code %1 detected.").arg(closeCode); + } else { + if (payload.size() > 2) { + QTextCodec *tc = QTextCodec::codecForName(QByteArrayLiteral("UTF-8")); + QTextCodec::ConverterState state(QTextCodec::ConvertInvalidToNull); + closeReason = tc->toUnicode(payload.constData() + 2, payload.size() - 2, &state); + const bool failed = (state.invalidChars != 0) || (state.remainingChars != 0); + if (Q_UNLIKELY(failed)) { + closeCode = QWebSocketProtocol::CC_WRONG_DATATYPE; + closeReason = tr("Invalid UTF-8 code encountered."); } } } - Q_EMIT closeReceived(static_cast(closeCode), closeReason); - break; - } - case QWebSocketProtocol::OC_CONTINUE: - case QWebSocketProtocol::OC_BINARY: - case QWebSocketProtocol::OC_TEXT: - case QWebSocketProtocol::OC_RESERVED_3: - case QWebSocketProtocol::OC_RESERVED_4: - case QWebSocketProtocol::OC_RESERVED_5: - case QWebSocketProtocol::OC_RESERVED_6: - case QWebSocketProtocol::OC_RESERVED_7: - case QWebSocketProtocol::OC_RESERVED_C: - case QWebSocketProtocol::OC_RESERVED_B: - case QWebSocketProtocol::OC_RESERVED_D: - case QWebSocketProtocol::OC_RESERVED_E: - case QWebSocketProtocol::OC_RESERVED_F: - { - //do nothing - //case added to make C++ compiler happy - break; - } - default: - { - Q_EMIT errorEncountered(QWebSocketProtocol::CC_PROTOCOL_ERROR, tr("Invalid opcode detected: %1").arg(int(frame.opCode()))); - //Do nothing - break; } + Q_EMIT closeReceived(static_cast(closeCode), closeReason); + break; + } + + case QWebSocketProtocol::OC_CONTINUE: + case QWebSocketProtocol::OC_BINARY: + case QWebSocketProtocol::OC_TEXT: + case QWebSocketProtocol::OC_RESERVED_3: + case QWebSocketProtocol::OC_RESERVED_4: + case QWebSocketProtocol::OC_RESERVED_5: + case QWebSocketProtocol::OC_RESERVED_6: + case QWebSocketProtocol::OC_RESERVED_7: + case QWebSocketProtocol::OC_RESERVED_C: + case QWebSocketProtocol::OC_RESERVED_B: + case QWebSocketProtocol::OC_RESERVED_D: + case QWebSocketProtocol::OC_RESERVED_E: + case QWebSocketProtocol::OC_RESERVED_F: + //do nothing + //case statements added to make C++ compiler happy + break; + + default: + Q_EMIT errorEncountered(QWebSocketProtocol::CC_PROTOCOL_ERROR, tr("Invalid opcode detected: %1").arg(int(frame.opCode()))); + //do nothing + break; } return mustStopProcessing; } diff --git a/src/websockets/qwebsocketframe_p.cpp b/src/websockets/qwebsocketframe_p.cpp index c075e9e..87011f5 100644 --- a/src/websockets/qwebsocketframe_p.cpp +++ b/src/websockets/qwebsocketframe_p.cpp @@ -326,187 +326,168 @@ QWebSocketFrame QWebSocketFrame::readFrame(QIODevice *pIoDevice) while (!isDone) { - switch (processingState) - { - case PS_WAIT_FOR_MORE_DATA: - { - //TODO: waitForReadyRead should really be changed - //now, when a websocket is used in a GUI thread - //the GUI will hang for at most 5 seconds - //maybe, a QStateMachine should be used - bool ok = pIoDevice->waitForReadyRead(5000); - if (!ok) { - frame.setError(QWebSocketProtocol::CC_GOING_AWAY, QObject::tr("Timeout when reading data from socket.")); - processingState = PS_DISPATCH_RESULT; - } else { - processingState = returnState; - } - break; + switch (processingState) { + case PS_WAIT_FOR_MORE_DATA: + //TODO: waitForReadyRead should really be changed + //now, when a websocket is used in a GUI thread + //the GUI will hang for at most 5 seconds + //maybe, a QStateMachine should be used + if (!pIoDevice->waitForReadyRead(5000)) { + frame.setError(QWebSocketProtocol::CC_GOING_AWAY, QObject::tr("Timeout when reading data from socket.")); + processingState = PS_DISPATCH_RESULT; + } else { + processingState = returnState; } - case PS_READ_HEADER: - { - if (Q_LIKELY(pIoDevice->bytesAvailable() >= 2)) { - //FIN, RSV1-3, Opcode - char header[2] = {0}; - bytesRead = pIoDevice->read(header, 2); - frame.m_isFinalFrame = (header[0] & 0x80) != 0; - frame.m_rsv1 = (header[0] & 0x40); - frame.m_rsv2 = (header[0] & 0x20); - frame.m_rsv3 = (header[0] & 0x10); - frame.m_opCode = static_cast(header[0] & 0x0F); - - //Mask, PayloadLength - hasMask = (header[1] & 0x80) != 0; - frame.m_length = (header[1] & 0x7F); - - switch (frame.m_length) + break; + + case PS_READ_HEADER: + if (Q_LIKELY(pIoDevice->bytesAvailable() >= 2)) { + //FIN, RSV1-3, Opcode + char header[2] = {0}; + bytesRead = pIoDevice->read(header, 2); + frame.m_isFinalFrame = (header[0] & 0x80) != 0; + frame.m_rsv1 = (header[0] & 0x40); + frame.m_rsv2 = (header[0] & 0x20); + frame.m_rsv3 = (header[0] & 0x10); + frame.m_opCode = static_cast(header[0] & 0x0F); + + //Mask, PayloadLength + hasMask = (header[1] & 0x80) != 0; + frame.m_length = (header[1] & 0x7F); + + switch (frame.m_length) + { + case 126: { - case 126: - { - processingState = PS_READ_PAYLOAD_LENGTH; - break; - } - case 127: - { - processingState = PS_READ_BIG_PAYLOAD_LENGTH; - break; - } - default: - { - payloadLength = frame.m_length; - processingState = hasMask ? PS_READ_MASK : PS_READ_PAYLOAD; - break; - } + processingState = PS_READ_PAYLOAD_LENGTH; + break; } - if (!frame.checkValidity()) { - processingState = PS_DISPATCH_RESULT; + case 127: + { + processingState = PS_READ_BIG_PAYLOAD_LENGTH; + break; } - } else { - WAIT_FOR_MORE_DATA(2); - } - break; - } - - case PS_READ_PAYLOAD_LENGTH: - { - if (Q_LIKELY(pIoDevice->bytesAvailable() >= 2)) { - uchar length[2] = {0}; - bytesRead = pIoDevice->read(reinterpret_cast(length), 2); - if (Q_UNLIKELY(bytesRead == -1)) { - frame.setError(QWebSocketProtocol::CC_GOING_AWAY, QObject::tr("Error occurred while reading from the network: %1").arg(pIoDevice->errorString())); - processingState = PS_DISPATCH_RESULT; - } else { - payloadLength = qFromBigEndian(reinterpret_cast(length)); - if (Q_UNLIKELY(payloadLength < 126)) { - //see http://tools.ietf.org/html/rfc6455#page-28 paragraph 5.2 - //"in all cases, the minimal number of bytes MUST be used to encode - //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::CC_PROTOCOL_ERROR, QObject::tr("Lengths smaller than 126 must be expressed as one byte.")); - processingState = PS_DISPATCH_RESULT; - } else { - processingState = hasMask ? PS_READ_MASK : PS_READ_PAYLOAD; - } + default: + { + payloadLength = frame.m_length; + processingState = hasMask ? PS_READ_MASK : PS_READ_PAYLOAD; + break; } - } else { - WAIT_FOR_MORE_DATA(2); } - break; + if (!frame.checkValidity()) + processingState = PS_DISPATCH_RESULT; + } else { + WAIT_FOR_MORE_DATA(2); } - - case PS_READ_BIG_PAYLOAD_LENGTH: - { - if (Q_LIKELY(pIoDevice->bytesAvailable() >= 8)) { - uchar length[8] = {0}; - bytesRead = pIoDevice->read(reinterpret_cast(length), 8); - if (Q_UNLIKELY(bytesRead < 8)) { - frame.setError(QWebSocketProtocol::CC_ABNORMAL_DISCONNECTION, QObject::tr("Something went wrong during reading from the network.")); + break; + + case PS_READ_PAYLOAD_LENGTH: + if (Q_LIKELY(pIoDevice->bytesAvailable() >= 2)) { + uchar length[2] = {0}; + bytesRead = pIoDevice->read(reinterpret_cast(length), 2); + if (Q_UNLIKELY(bytesRead == -1)) { + frame.setError(QWebSocketProtocol::CC_GOING_AWAY, QObject::tr("Error occurred while reading from the network: %1").arg(pIoDevice->errorString())); + processingState = PS_DISPATCH_RESULT; + } else { + payloadLength = qFromBigEndian(reinterpret_cast(length)); + if (Q_UNLIKELY(payloadLength < 126)) { + //see http://tools.ietf.org/html/rfc6455#page-28 paragraph 5.2 + //"in all cases, the minimal number of bytes MUST be used to encode + //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::CC_PROTOCOL_ERROR, QObject::tr("Lengths smaller than 126 must be expressed as one byte.")); processingState = PS_DISPATCH_RESULT; } else { - //Most significant bit must be set to 0 as per http://tools.ietf.org/html/rfc6455#section-5.2 - payloadLength = qFromBigEndian(length); - if (Q_UNLIKELY(payloadLength & (quint64(1) << 63))) { - frame.setError(QWebSocketProtocol::CC_PROTOCOL_ERROR, QObject::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 - //"in all cases, the minimal number of bytes MUST be used to encode - //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::CC_PROTOCOL_ERROR, QObject::tr("Lengths smaller than 65536 (2^16) must be expressed as 2 bytes.")); - processingState = PS_DISPATCH_RESULT; - } else { - processingState = hasMask ? PS_READ_MASK : PS_READ_PAYLOAD; - } + processingState = hasMask ? PS_READ_MASK : PS_READ_PAYLOAD; } - } else { - WAIT_FOR_MORE_DATA(8); } - - break; + } else { + WAIT_FOR_MORE_DATA(2); } - - case PS_READ_MASK: - { - if (Q_LIKELY(pIoDevice->bytesAvailable() >= 4)) { - bytesRead = pIoDevice->read(reinterpret_cast(&frame.m_mask), sizeof(frame.m_mask)); - if (bytesRead == -1) { - frame.setError(QWebSocketProtocol::CC_GOING_AWAY, QObject::tr("Error while reading from the network: %1.").arg(pIoDevice->errorString())); + break; + + case PS_READ_BIG_PAYLOAD_LENGTH: + if (Q_LIKELY(pIoDevice->bytesAvailable() >= 8)) { + uchar length[8] = {0}; + bytesRead = pIoDevice->read(reinterpret_cast(length), 8); + if (Q_UNLIKELY(bytesRead < 8)) { + frame.setError(QWebSocketProtocol::CC_ABNORMAL_DISCONNECTION, QObject::tr("Something went wrong during reading from the network.")); + processingState = PS_DISPATCH_RESULT; + } else { + //Most significant bit must be set to 0 as per http://tools.ietf.org/html/rfc6455#section-5.2 + payloadLength = qFromBigEndian(length); + if (Q_UNLIKELY(payloadLength & (quint64(1) << 63))) { + frame.setError(QWebSocketProtocol::CC_PROTOCOL_ERROR, QObject::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 + //"in all cases, the minimal number of bytes MUST be used to encode + //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::CC_PROTOCOL_ERROR, QObject::tr("Lengths smaller than 65536 (2^16) must be expressed as 2 bytes.")); processingState = PS_DISPATCH_RESULT; } else { - frame.m_mask = qFromBigEndian(frame.m_mask); - processingState = PS_READ_PAYLOAD; + processingState = hasMask ? PS_READ_MASK : PS_READ_PAYLOAD; } - } else { - WAIT_FOR_MORE_DATA(4); } - break; + } else { + WAIT_FOR_MORE_DATA(8); } - case PS_READ_PAYLOAD: - { - if (!payloadLength) { - processingState = PS_DISPATCH_RESULT; - } else if (Q_UNLIKELY(payloadLength > MAX_FRAME_SIZE_IN_BYTES)) { - frame.setError(QWebSocketProtocol::CC_TOO_MUCH_DATA, QObject::tr("Maximum framesize exceeded.")); + break; + + case PS_READ_MASK: + if (Q_LIKELY(pIoDevice->bytesAvailable() >= 4)) { + bytesRead = pIoDevice->read(reinterpret_cast(&frame.m_mask), sizeof(frame.m_mask)); + if (bytesRead == -1) { + frame.setError(QWebSocketProtocol::CC_GOING_AWAY, QObject::tr("Error while reading from the network: %1.").arg(pIoDevice->errorString())); processingState = PS_DISPATCH_RESULT; } else { - quint64 bytesAvailable = quint64(pIoDevice->bytesAvailable()); - if (bytesAvailable >= payloadLength) { - frame.m_payload = pIoDevice->read(payloadLength); - //payloadLength can be safely cast to an integer, as the MAX_FRAME_SIZE_IN_BYTES = MAX_INT - if (Q_UNLIKELY(frame.m_payload.length() != int(payloadLength))) { - //some error occurred; refer to the Qt documentation of QIODevice::read() - frame.setError(QWebSocketProtocol::CC_ABNORMAL_DISCONNECTION, QObject::tr("Some serious error occurred while reading from the network.")); - processingState = PS_DISPATCH_RESULT; - } else { - if (hasMask) { - QWebSocketProtocol::mask(&frame.m_payload, frame.m_mask); - } - processingState = PS_DISPATCH_RESULT; - } + frame.m_mask = qFromBigEndian(frame.m_mask); + processingState = PS_READ_PAYLOAD; + } + } else { + WAIT_FOR_MORE_DATA(4); + } + break; + + case PS_READ_PAYLOAD: + if (!payloadLength) { + processingState = PS_DISPATCH_RESULT; + } else if (Q_UNLIKELY(payloadLength > MAX_FRAME_SIZE_IN_BYTES)) { + frame.setError(QWebSocketProtocol::CC_TOO_MUCH_DATA, QObject::tr("Maximum framesize exceeded.")); + processingState = PS_DISPATCH_RESULT; + } else { + quint64 bytesAvailable = quint64(pIoDevice->bytesAvailable()); + if (bytesAvailable >= payloadLength) { + frame.m_payload = pIoDevice->read(payloadLength); + //payloadLength can be safely cast to an integer, as the MAX_FRAME_SIZE_IN_BYTES = MAX_INT + if (Q_UNLIKELY(frame.m_payload.length() != int(payloadLength))) { + //some error occurred; refer to the Qt documentation of QIODevice::read() + frame.setError(QWebSocketProtocol::CC_ABNORMAL_DISCONNECTION, QObject::tr("Some serious error occurred while reading from the network.")); + processingState = PS_DISPATCH_RESULT; } else { - WAIT_FOR_MORE_DATA(payloadLength); //if payload is too big, then this will timeout + if (hasMask) + QWebSocketProtocol::mask(&frame.m_payload, frame.m_mask); + processingState = PS_DISPATCH_RESULT; } + } else { + WAIT_FOR_MORE_DATA(payloadLength); //if payload is too big, then this will timeout } - break; - } - - case PS_DISPATCH_RESULT: - { - processingState = PS_READ_HEADER; - isDone = true; - break; - } - - default: - { - //should not come here - qWarning() << "DataProcessor::process: Found invalid state. This should not happen!"; - frame.clear(); - isDone = true; - break; } + break; + + case PS_DISPATCH_RESULT: + processingState = PS_READ_HEADER; + isDone = true; + break; + + default: + //should not come here + qWarning() << "DataProcessor::process: Found invalid state. This should not happen!"; + frame.clear(); + isDone = true; + break; } //end switch } @@ -529,9 +510,8 @@ void QWebSocketFrame::setError(QWebSocketProtocol::CloseCode code, QString close */ bool QWebSocketFrame::checkValidity() { - if (isValid()) { + if (isValid()) return true; - } if (Q_UNLIKELY(m_rsv1 || m_rsv2 || m_rsv3)) { setError(QWebSocketProtocol::CC_PROTOCOL_ERROR, QObject::tr("Rsv field is non-zero")); } else if (Q_UNLIKELY(QWebSocketProtocol::isOpCodeReserved(m_opCode))) { diff --git a/src/websockets/qwebsockethandshakerequest_p.cpp b/src/websockets/qwebsockethandshakerequest_p.cpp index 2b557df..5def894 100644 --- a/src/websockets/qwebsockethandshakerequest_p.cpp +++ b/src/websockets/qwebsockethandshakerequest_p.cpp @@ -196,9 +196,8 @@ QTextStream &QWebSocketHandshakeRequest::readFromStream(QTextStream &textStream) { m_isValid = false; clear(); - if (Q_UNLIKELY(textStream.status() != QTextStream::Ok)) { + if (Q_UNLIKELY(textStream.status() != QTextStream::Ok)) return textStream; - } const QString requestLine = textStream.readLine(); const QStringList tokens = requestLine.split(' ', QString::SkipEmptyParts); if (Q_UNLIKELY(tokens.length() < 3)) { @@ -231,9 +230,8 @@ QTextStream &QWebSocketHandshakeRequest::readFromStream(QTextStream &textStream) const QString host = m_headers.value(QStringLiteral("Host"), QStringLiteral("")); m_requestUrl = QUrl::fromEncoded(resourceName.toLatin1()); - if (m_requestUrl.isRelative()) { + if (m_requestUrl.isRelative()) m_requestUrl.setHost(host); - } if (m_requestUrl.scheme().isEmpty()) { const QString scheme = isSecure() ? QStringLiteral("wss") : QStringLiteral("ws"); m_requestUrl.setScheme(scheme); @@ -262,25 +260,22 @@ QTextStream &QWebSocketHandshakeRequest::readFromStream(QTextStream &textStream) const QString connection = m_headers.value(QStringLiteral("Connection"), QStringLiteral("")); const QStringList connectionLine = connection.split(QStringLiteral(","), QString::SkipEmptyParts); QStringList connectionValues; - for (QStringList::const_iterator c = connectionLine.begin(); c != connectionLine.end(); ++c) { + for (QStringList::const_iterator c = connectionLine.begin(); c != connectionLine.end(); ++c) connectionValues << (*c).trimmed(); - } //optional headers m_origin = m_headers.value(QStringLiteral("Sec-WebSocket-Origin"), QStringLiteral("")); 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); - for (QStringList::const_iterator p = protocols.begin(); p != protocols.end(); ++p) { + for (QStringList::const_iterator p = protocols.begin(); p != protocols.end(); ++p) m_protocols << (*p).trimmed(); - } } const QStringList extensionLines = m_headers.values(QStringLiteral("Sec-WebSocket-Extensions")); for (QStringList::const_iterator el = extensionLines.begin(); el != extensionLines.end(); ++el) { QStringList extensions = (*el).split(QStringLiteral(","), QString::SkipEmptyParts); - for (QStringList::const_iterator e = extensions.begin(); e != extensions.end(); ++e) { + for (QStringList::const_iterator e = extensions.begin(); e != extensions.end(); ++e) m_extensions << (*e).trimmed(); - } } //TODO: authentication field @@ -293,9 +288,8 @@ QTextStream &QWebSocketHandshakeRequest::readFromStream(QTextStream &textStream) (!conversionOk || (httpVersion < 1.1f)) || (upgrade.toLower() != QStringLiteral("websocket")) || (!connectionValues.contains(QStringLiteral("upgrade"), Qt::CaseInsensitive))); - if (Q_UNLIKELY(!m_isValid)) { + if (Q_UNLIKELY(!m_isValid)) clear(); - } return textStream; } diff --git a/src/websockets/qwebsockethandshakeresponse_p.cpp b/src/websockets/qwebsockethandshakeresponse_p.cpp index 4831a78..2202234 100644 --- a/src/websockets/qwebsockethandshakeresponse_p.cpp +++ b/src/websockets/qwebsockethandshakeresponse_p.cpp @@ -168,9 +168,8 @@ QString QWebSocketHandshakeResponse::getHandshakeResponse(const QWebSocketHandsh response << QStringLiteral("Sec-WebSocket-Extensions: ") % m_acceptedExtension; } QString origin = request.origin().trimmed(); - if (origin.isEmpty()) { + if (origin.isEmpty()) origin = QStringLiteral("*"); - } response << QStringLiteral("Server: ") % serverName << QStringLiteral("Access-Control-Allow-Credentials: false") << //do not allow credentialed request (containing cookies) QStringLiteral("Access-Control-Allow-Methods: GET") << //only GET is allowed during handshaking @@ -189,9 +188,8 @@ QString QWebSocketHandshakeResponse::getHandshakeResponse(const QWebSocketHandsh if (Q_UNLIKELY(!m_canUpgrade)) { response << QStringLiteral("HTTP/1.1 400 Bad Request"); QStringList versions; - Q_FOREACH (QWebSocketProtocol::Version version, supportedVersions) { + Q_FOREACH (QWebSocketProtocol::Version version, supportedVersions) versions << QString::number(static_cast(version)); - } response << QStringLiteral("Sec-WebSocket-Version: ") % versions.join(QStringLiteral(", ")); } } @@ -204,11 +202,10 @@ QString QWebSocketHandshakeResponse::getHandshakeResponse(const QWebSocketHandsh */ QTextStream &QWebSocketHandshakeResponse::writeToStream(QTextStream &textStream) const { - if (Q_LIKELY(!m_response.isEmpty())) { + if (Q_LIKELY(!m_response.isEmpty())) textStream << m_response.toLatin1().constData(); - } else { + else textStream.setStatus(QTextStream::WriteFailed); - } return textStream; } diff --git a/src/websockets/qwebsocketprotocol_p.cpp b/src/websockets/qwebsocketprotocol_p.cpp index ab51dd8..65ddee9 100644 --- a/src/websockets/qwebsocketprotocol_p.cpp +++ b/src/websockets/qwebsocketprotocol_p.cpp @@ -140,11 +140,8 @@ Version versionFromString(const QString &versionString) const int ver = versionString.toInt(&ok); QSet supportedVersions; supportedVersions << V_0 << V_4 << V_5 << V_6 << V_7 << V_8 << V_13; - if (Q_LIKELY(ok)) { - if (supportedVersions.contains(static_cast(ver))) { - version = static_cast(ver); - } - } + if (Q_LIKELY(ok) && (supportedVersions.contains(static_cast(ver)))) + version = static_cast(ver); return version; } @@ -171,9 +168,8 @@ void mask(char *payload, quint64 size, quint32 maskingKey) quint8((maskingKey & 0x000000FFu)) }; int i = 0; - while (size-- > 0) { + while (size-- > 0) *payload++ ^= mask[i++ % 4]; - } } } //end namespace WebSocketProtocol diff --git a/src/websockets/qwebsocketserver_p.cpp b/src/websockets/qwebsocketserver_p.cpp index d8533fc..e5e0f1e 100644 --- a/src/websockets/qwebsocketserver_p.cpp +++ b/src/websockets/qwebsocketserver_p.cpp @@ -74,11 +74,10 @@ QWebSocketServerPrivate::QWebSocketServerPrivate(const QString &serverName, QWeb Q_ASSERT(pWebSocketServer); if (m_secureMode == NON_SECURE_MODE) { m_pTcpServer = new QTcpServer(this); - if (Q_LIKELY(m_pTcpServer)) { + if (Q_LIKELY(m_pTcpServer)) connect(m_pTcpServer, SIGNAL(newConnection()), this, SLOT(onNewConnection())); - } else { + else qFatal("Could not allocate memory for tcp server."); - } } else { #ifndef QT_NO_SSL QSslServer *pSslServer = new QSslServer(this); @@ -126,11 +125,10 @@ void QWebSocketServerPrivate::close() */ QString QWebSocketServerPrivate::errorString() const { - if (m_errorString.isEmpty()) { + if (m_errorString.isEmpty()) return m_pTcpServer->errorString(); - } else { + else return m_errorString; - } } /*! @@ -170,9 +168,8 @@ int QWebSocketServerPrivate::maxPendingConnections() const */ void QWebSocketServerPrivate::addPendingConnection(QWebSocket *pWebSocket) { - if (m_pendingConnections.size() < maxPendingConnections()) { + if (m_pendingConnections.size() < maxPendingConnections()) m_pendingConnections.enqueue(pWebSocket); - } } /*! @@ -181,9 +178,8 @@ void QWebSocketServerPrivate::addPendingConnection(QWebSocket *pWebSocket) QWebSocket *QWebSocketServerPrivate::nextPendingConnection() { QWebSocket *pWebSocket = Q_NULLPTR; - if (Q_LIKELY(!m_pendingConnections.isEmpty())) { + if (Q_LIKELY(!m_pendingConnections.isEmpty())) pWebSocket = m_pendingConnections.dequeue(); - } return pWebSocket; } @@ -309,9 +305,8 @@ QStringList QWebSocketServerPrivate::supportedExtensions() const */ void QWebSocketServerPrivate::setServerName(const QString &serverName) { - if (m_serverName != serverName) { + if (m_serverName != serverName) m_serverName = serverName; - } } /*! @@ -333,20 +328,18 @@ QWebSocketServerPrivate::SecureMode QWebSocketServerPrivate::secureMode() const #ifndef QT_NO_SSL void QWebSocketServerPrivate::setSslConfiguration(const QSslConfiguration &sslConfiguration) { - if (m_secureMode == SECURE_MODE) { + if (m_secureMode == SECURE_MODE) qobject_cast(m_pTcpServer)->setSslConfiguration(sslConfiguration); - } else { + else qWarning() << tr("Cannot set SSL configuration for non-secure server."); - } } QSslConfiguration QWebSocketServerPrivate::sslConfiguration() const { - if (m_secureMode == SECURE_MODE) { + if (m_secureMode == SECURE_MODE) return qobject_cast(m_pTcpServer)->sslConfiguration(); - } else { + else return QSslConfiguration::defaultConfiguration(); - } } #endif @@ -375,9 +368,8 @@ void QWebSocketServerPrivate::onNewConnection() void QWebSocketServerPrivate::onCloseConnection() { QTcpSocket *pTcpSocket = qobject_cast(sender()); - if (Q_LIKELY(pTcpSocket)) { + if (Q_LIKELY(pTcpSocket)) pTcpSocket->close(); - } } /*! -- cgit v1.2.1