summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLuca Niccoli <lultimouomo@gmail.com>2015-04-02 07:28:20 +0200
committerLiang Qi <liang.qi@theqtcompany.com>2015-04-08 08:46:04 +0000
commitba3b71327577f3ea348e9511c1475cf48f821880 (patch)
tree823caec3379843d8f4b564fe6eed37b5b0204a45 /src
parent01eaae540cace513fa73340631dbb3a854c713b5 (diff)
downloadqtwebsockets-ba3b71327577f3ea348e9511c1475cf48f821880.tar.gz
Add open(const QNetworkRequest &) and request()
Request headers are not yet handled, only the QNetworkRequest::url() is taken into consideration. [ChangeLog][QWebSocket] Added open(const QNetworkRequest &) and request() Task-number: QTBUG-40842 Change-Id: Ia2e10f22c79b0a085afb9a2eb8437b7a73d4a045 Reviewed-by: Liang Qi <liang.qi@theqtcompany.com>
Diffstat (limited to 'src')
-rw-r--r--src/websockets/qwebsocket.cpp27
-rw-r--r--src/websockets/qwebsocket.h3
-rw-r--r--src/websockets/qwebsocket_p.cpp28
-rw-r--r--src/websockets/qwebsocket_p.h8
4 files changed, 47 insertions, 19 deletions
diff --git a/src/websockets/qwebsocket.cpp b/src/websockets/qwebsocket.cpp
index a77f23c..3d948a5 100644
--- a/src/websockets/qwebsocket.cpp
+++ b/src/websockets/qwebsocket.cpp
@@ -389,7 +389,20 @@ void QWebSocket::close(QWebSocketProtocol::CloseCode closeCode, const QString &r
void QWebSocket::open(const QUrl &url)
{
Q_D(QWebSocket);
- d->open(url, true);
+ QNetworkRequest request(url);
+ d->open(request, true);
+}
+
+/*!
+ \brief Opens a WebSocket connection using the given \a request.
+ \since 5.6
+
+ The \a request url will be used to open the WebSocket connection.
+ */
+void QWebSocket::open(const QNetworkRequest &request)
+{
+ Q_D(QWebSocket);
+ d->open(request, true);
}
/*!
@@ -512,7 +525,17 @@ QString QWebSocket::resourceName() const
QUrl QWebSocket::requestUrl() const
{
Q_D(const QWebSocket);
- return d->requestUrl();
+ return d->request().url();
+}
+
+/*!
+ \brief Returns the request that was or will be used to open this socket.
+ \since 5.6
+ */
+QNetworkRequest QWebSocket::request() const
+{
+ Q_D(const QWebSocket);
+ return d->request();
}
/*!
diff --git a/src/websockets/qwebsocket.h b/src/websockets/qwebsocket.h
index 9fdc6eb..7ee4bc6 100644
--- a/src/websockets/qwebsocket.h
+++ b/src/websockets/qwebsocket.h
@@ -36,6 +36,7 @@
#include <QtCore/QUrl>
#include <QtNetwork/QAbstractSocket>
+#include <QtNetwork/QNetworkRequest>
#ifndef QT_NO_NETWORKPROXY
#include <QtNetwork/QNetworkProxy>
#endif
@@ -92,6 +93,7 @@ public:
QWebSocketProtocol::Version version() const;
QString resourceName() const;
QUrl requestUrl() const;
+ QNetworkRequest request() const;
QString origin() const;
QWebSocketProtocol::CloseCode closeCode() const;
QString closeReason() const;
@@ -109,6 +111,7 @@ public Q_SLOTS:
void close(QWebSocketProtocol::CloseCode closeCode = QWebSocketProtocol::CloseCodeNormal,
const QString &reason = QString());
void open(const QUrl &url);
+ void open(const QNetworkRequest &request);
void ping(const QByteArray &payload = QByteArray());
#ifndef QT_NO_SSL
void ignoreSslErrors();
diff --git a/src/websockets/qwebsocket_p.cpp b/src/websockets/qwebsocket_p.cpp
index 2bb5151..ab466bd 100644
--- a/src/websockets/qwebsocket_p.cpp
+++ b/src/websockets/qwebsocket_p.cpp
@@ -88,7 +88,7 @@ QWebSocketPrivate::QWebSocketPrivate(const QString &origin, QWebSocketProtocol::
m_errorString(),
m_version(version),
m_resourceName(),
- m_requestUrl(),
+ m_request(),
m_origin(origin),
m_protocol(),
m_extension(),
@@ -120,7 +120,7 @@ QWebSocketPrivate::QWebSocketPrivate(QTcpSocket *pTcpSocket, QWebSocketProtocol:
m_errorString(pTcpSocket->errorString()),
m_version(version),
m_resourceName(),
- m_requestUrl(),
+ m_request(),
m_origin(),
m_protocol(),
m_extension(),
@@ -280,9 +280,10 @@ QWebSocket *QWebSocketPrivate::upgradeFrom(QTcpSocket *pTcpSocket,
{
QWebSocket *pWebSocket = new QWebSocket(pTcpSocket, response.acceptedVersion(), parent);
if (Q_LIKELY(pWebSocket)) {
+ QNetworkRequest netRequest(request.requestUrl());
pWebSocket->d_func()->setExtension(response.acceptedExtension());
pWebSocket->d_func()->setOrigin(request.origin());
- pWebSocket->d_func()->setRequestUrl(request.requestUrl());
+ pWebSocket->d_func()->setRequest(netRequest);
pWebSocket->d_func()->setProtocol(response.acceptedProtocol());
pWebSocket->d_func()->setResourceName(request.requestUrl().toString(QUrl::RemoveUserInfo));
//a server should not send masked frames
@@ -329,12 +330,13 @@ void QWebSocketPrivate::close(QWebSocketProtocol::CloseCode closeCode, QString r
/*!
\internal
*/
-void QWebSocketPrivate::open(const QUrl &url, bool mask)
+void QWebSocketPrivate::open(const QNetworkRequest &request, bool mask)
{
//just delete the old socket for the moment;
//later, we can add more 'intelligent' handling by looking at the URL
//m_pSocket.reset();
Q_Q(QWebSocket);
+ QUrl url = request.url();
if (!url.isValid() || url.toString().contains(QStringLiteral("\r\n"))) {
setErrorString(QWebSocket::tr("Invalid URL."));
Q_EMIT q->error(QAbstractSocket::ConnectionRefusedError);
@@ -351,10 +353,10 @@ void QWebSocketPrivate::open(const QUrl &url, bool mask)
m_isClosingHandshakeReceived = false;
m_isClosingHandshakeSent = false;
- setRequestUrl(url);
+ setRequest(request);
QString resourceName = url.path();
if (resourceName.contains(QStringLiteral("\r\n"))) {
- setRequestUrl(QUrl()); //clear requestUrl
+ setRequest(QNetworkRequest()); //clear request
setErrorString(QWebSocket::tr("Invalid resource name."));
Q_EMIT q->error(QAbstractSocket::ConnectionRefusedError);
return;
@@ -477,10 +479,10 @@ void QWebSocketPrivate::setResourceName(const QString &resourceName)
/*!
\internal
*/
-void QWebSocketPrivate::setRequestUrl(const QUrl &requestUrl)
+void QWebSocketPrivate::setRequest(const QNetworkRequest &request)
{
- if (m_requestUrl != requestUrl)
- m_requestUrl = requestUrl;
+ if (m_request != request)
+ m_request = request;
}
/*!
@@ -614,9 +616,9 @@ QString QWebSocketPrivate::resourceName() const
/*!
\internal
*/
-QUrl QWebSocketPrivate::requestUrl() const
+QNetworkRequest QWebSocketPrivate::request() const
{
- return m_requestUrl;
+ return m_request;
}
/*!
@@ -1038,9 +1040,9 @@ void QWebSocketPrivate::processStateChanged(QAbstractSocket::SocketState socketS
m_key = generateKey();
const QString handshake =
createHandShakeRequest(m_resourceName,
- m_requestUrl.host()
+ m_request.url().host()
% QStringLiteral(":")
- % QString::number(m_requestUrl.port(80)),
+ % QString::number(m_request.url().port(80)),
origin(),
QString(),
QString(),
diff --git a/src/websockets/qwebsocket_p.h b/src/websockets/qwebsocket_p.h
index d9d0689..e688463 100644
--- a/src/websockets/qwebsocket_p.h
+++ b/src/websockets/qwebsocket_p.h
@@ -126,7 +126,7 @@ public:
QWebSocketProtocol::Version version() const;
QString resourceName() const;
- QUrl requestUrl() const;
+ QNetworkRequest request() const;
QString origin() const;
QString protocol() const;
QString extension() const;
@@ -144,7 +144,7 @@ public:
#endif
void close(QWebSocketProtocol::CloseCode closeCode, QString reason);
- void open(const QUrl &url, bool mask);
+ void open(const QNetworkRequest &request, bool mask);
void ping(const QByteArray &payload);
QWebSocket * const q_ptr;
@@ -154,7 +154,7 @@ private:
QWebSocket *pWebSocket);
void setVersion(QWebSocketProtocol::Version version);
void setResourceName(const QString &resourceName);
- void setRequestUrl(const QUrl &requestUrl);
+ void setRequest(const QNetworkRequest &request);
void setOrigin(const QString &origin);
void setProtocol(const QString &protocol);
void setExtension(const QString &extension);
@@ -199,7 +199,7 @@ private:
QWebSocketProtocol::Version m_version;
QUrl m_resource;
QString m_resourceName;
- QUrl m_requestUrl;
+ QNetworkRequest m_request;
QString m_origin;
QString m_protocol;
QString m_extension;