diff options
Diffstat (limited to 'src/websockets/qwebsocket_p.cpp')
-rw-r--r-- | src/websockets/qwebsocket_p.cpp | 67 |
1 files changed, 38 insertions, 29 deletions
diff --git a/src/websockets/qwebsocket_p.cpp b/src/websockets/qwebsocket_p.cpp index d233b66..8529538 100644 --- a/src/websockets/qwebsocket_p.cpp +++ b/src/websockets/qwebsocket_p.cpp @@ -87,10 +87,8 @@ QWebSocketConfiguration::QWebSocketConfiguration() : /*! \internal */ -QWebSocketPrivate::QWebSocketPrivate(const QString &origin, QWebSocketProtocol::Version version, - QWebSocket *pWebSocket) : +QWebSocketPrivate::QWebSocketPrivate(const QString &origin, QWebSocketProtocol::Version version) : QObjectPrivate(), - q_ptr(pWebSocket), m_pSocket(nullptr), m_errorString(), m_version(version), @@ -120,10 +118,8 @@ QWebSocketPrivate::QWebSocketPrivate(const QString &origin, QWebSocketProtocol:: /*! \internal */ -QWebSocketPrivate::QWebSocketPrivate(QTcpSocket *pTcpSocket, QWebSocketProtocol::Version version, - QWebSocket *pWebSocket) : +QWebSocketPrivate::QWebSocketPrivate(QTcpSocket *pTcpSocket, QWebSocketProtocol::Version version) : QObjectPrivate(), - q_ptr(pWebSocket), m_pSocket(pTcpSocket), m_errorString(pTcpSocket->errorString()), m_version(version), @@ -228,6 +224,8 @@ bool QWebSocketPrivate::flush() return result; } +#ifndef Q_OS_WASM + /*! \internal */ @@ -244,6 +242,8 @@ qint64 QWebSocketPrivate::sendBinaryMessage(const QByteArray &data) return doWriteFrames(data, true); } +#endif + #ifndef QT_NO_SSL /*! \internal @@ -324,6 +324,8 @@ QWebSocket *QWebSocketPrivate::upgradeFrom(QTcpSocket *pTcpSocket, return pWebSocket; } +#ifndef Q_OS_WASM + /*! \internal */ @@ -345,10 +347,10 @@ void QWebSocketPrivate::close(QWebSocketProtocol::CloseCode closeCode, QString r quint32 maskingKey = 0; if (m_mustMask) { maskingKey = generateMaskingKey(); - QWebSocketProtocol::mask(payload.data(), payload.size(), maskingKey); + QWebSocketProtocol::mask(payload.data(), quint64(payload.size()), maskingKey); } QByteArray frame = getFrameHeader(QWebSocketProtocol::OpCodeClose, - payload.size(), maskingKey, true); + quint64(payload.size()), maskingKey, true); Q_ASSERT(payload.length() <= 125); frame.append(payload); @@ -416,7 +418,7 @@ void QWebSocketPrivate::open(const QNetworkRequest &request, bool mask) setErrorString(message); Q_EMIT q->error(QAbstractSocket::UnsupportedSocketOperationError); } else { - QSslSocket *sslSocket = new QSslSocket(q_ptr); + QSslSocket *sslSocket = new QSslSocket(q); m_pSocket = sslSocket; if (Q_LIKELY(m_pSocket)) { m_pSocket->setSocketOption(QAbstractSocket::LowDelayOption, 1); @@ -435,7 +437,7 @@ void QWebSocketPrivate::open(const QNetworkRequest &request, bool mask) #ifndef QT_NO_NETWORKPROXY sslSocket->setProxy(m_configuration.m_proxy); #endif - sslSocket->connectToHostEncrypted(url.host(), url.port(443)); + sslSocket->connectToHostEncrypted(url.host(), quint16(url.port(443))); } else { const QString message = QWebSocket::tr("Out of memory."); setErrorString(message); @@ -445,7 +447,7 @@ void QWebSocketPrivate::open(const QNetworkRequest &request, bool mask) } else #endif if (url.scheme() == QStringLiteral("ws")) { - m_pSocket = new QTcpSocket(q_ptr); + m_pSocket = new QTcpSocket(q); if (Q_LIKELY(m_pSocket)) { m_pSocket->setSocketOption(QAbstractSocket::LowDelayOption, 1); m_pSocket->setSocketOption(QAbstractSocket::KeepAliveOption, 1); @@ -457,7 +459,7 @@ void QWebSocketPrivate::open(const QNetworkRequest &request, bool mask) #ifndef QT_NO_NETWORKPROXY m_pSocket->setProxy(m_configuration.m_proxy); #endif - m_pSocket->connectToHost(url.host(), url.port(80)); + m_pSocket->connectToHost(url.host(), quint16(url.port(80))); } else { const QString message = QWebSocket::tr("Out of memory."); setErrorString(message); @@ -472,6 +474,8 @@ void QWebSocketPrivate::open(const QNetworkRequest &request, bool mask) } } +#endif + /*! \internal */ @@ -482,7 +486,8 @@ void QWebSocketPrivate::ping(const QByteArray &payload) quint32 maskingKey = 0; if (m_mustMask) maskingKey = generateMaskingKey(); - QByteArray pingFrame = getFrameHeader(QWebSocketProtocol::OpCodePing, payloadTruncated.size(), + QByteArray pingFrame = getFrameHeader(QWebSocketProtocol::OpCodePing, + quint64(payloadTruncated.size()), maskingKey, true); if (m_mustMask) QWebSocketProtocol::mask(&payloadTruncated, maskingKey); @@ -710,6 +715,7 @@ QByteArray QWebSocketPrivate::getFrameHeader(QWebSocketProtocol::OpCode opCode, quint64 payloadLength, quint32 maskingKey, bool lastFrame) { + Q_Q(QWebSocket); QByteArray header; bool ok = payloadLength <= 0x7FFFFFFFFFFFFFFFULL; @@ -743,7 +749,7 @@ QByteArray QWebSocketPrivate::getFrameHeader(QWebSocketProtocol::OpCode opCode, } } else { setErrorString(QStringLiteral("WebSocket::getHeader: payload too big!")); - Q_EMIT q_ptr->error(QAbstractSocket::DatagramTooLargeError); + Q_EMIT q->error(QAbstractSocket::DatagramTooLargeError); } return header; @@ -762,7 +768,7 @@ qint64 QWebSocketPrivate::doWriteFrames(const QByteArray &data, bool isBinary) const QWebSocketProtocol::OpCode firstOpCode = isBinary ? QWebSocketProtocol::OpCodeBinary : QWebSocketProtocol::OpCodeText; - int numFrames = data.size() / FRAME_SIZE_IN_BYTES; + int numFrames = data.size() / int(FRAME_SIZE_IN_BYTES); QByteArray tmpData(data); tmpData.detach(); char *payload = tmpData.data(); @@ -775,7 +781,7 @@ qint64 QWebSocketPrivate::doWriteFrames(const QByteArray &data, bool isBinary) if (Q_UNLIKELY(numFrames == 0)) numFrames = 1; quint64 currentPosition = 0; - quint64 bytesLeft = data.size(); + quint64 bytesLeft = quint64(data.size()); for (int i = 0; i < numFrames; ++i) { quint32 maskingKey = 0; @@ -1108,16 +1114,18 @@ void QWebSocketPrivate::processStateChanged(QAbstractSocket::SocketState socketS headers << qMakePair(QString::fromLatin1(key), QString::fromLatin1(m_request.rawHeader(key))); - const QString handshake = - createHandShakeRequest(m_resourceName, - m_request.url().host() - % QStringLiteral(":") - % QString::number(m_request.url().port(port)), - origin(), - QString(), - QString(), - m_key, - headers); + const auto format = QUrl::RemoveScheme | QUrl::RemoveUserInfo + | QUrl::RemovePath | QUrl::RemoveQuery + | QUrl::RemoveFragment | QUrl::RemovePort; + const QString host = m_request.url().toString(format).mid(2); + const QString handshake = createHandShakeRequest(m_resourceName, + host % QStringLiteral(":") + % QString::number(m_request.url().port(port)), + origin(), + QString(), + QString(), + m_key, + headers); if (handshake.isEmpty()) { m_pSocket->abort(); Q_EMIT q->error(QAbstractSocket::ConnectionRefusedError); @@ -1146,8 +1154,6 @@ void QWebSocketPrivate::processStateChanged(QAbstractSocket::SocketState socketS //do nothing //to make C++ compiler happy; break; - default: - break; } } @@ -1185,7 +1191,10 @@ void QWebSocketPrivate::processPing(const QByteArray &data) quint32 maskingKey = 0; if (m_mustMask) maskingKey = generateMaskingKey(); - m_pSocket->write(getFrameHeader(QWebSocketProtocol::OpCodePong, data.size(), maskingKey, true)); + m_pSocket->write(getFrameHeader(QWebSocketProtocol::OpCodePong, + unsigned(data.size()), + maskingKey, + true)); if (data.size() > 0) { QByteArray maskedData = data; if (m_mustMask) |