diff options
author | Timur Pocheptsov <timur.pocheptsov@qt.io> | 2018-05-14 12:41:23 +0200 |
---|---|---|
committer | Timur Pocheptsov <timur.pocheptsov@qt.io> | 2018-05-16 07:31:29 +0000 |
commit | a4afeaa8b0b00373eab1b2a974aed2cbed128844 (patch) | |
tree | 508cd57c3e5eb627f8158274c42632e83a1700ff | |
parent | ba7881a0818204c7cc4a361ac20e2c34c8d6f185 (diff) | |
download | qtwebsockets-a4afeaa8b0b00373eab1b2a974aed2cbed128844.tar.gz |
Use QUrl::toString() when forming the 'Host' header
This allows to correctly use IPv6 literals and also
deals (correctly) with a port (if it's set at all).
Task-number: QTBUG-68245
Change-Id: I6d29543887c4ab58d70f0970a6f0a1b822c301df
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io>
-rw-r--r-- | src/websockets/qwebsocket_p.cpp | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/src/websockets/qwebsocket_p.cpp b/src/websockets/qwebsocket_p.cpp index f4ed311..45d6a6f 100644 --- a/src/websockets/qwebsocket_p.cpp +++ b/src/websockets/qwebsocket_p.cpp @@ -1104,16 +1104,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); |