diff options
author | Timur Pocheptsov <timur.pocheptsov@theqtcompany.com> | 2016-07-14 16:49:16 +0200 |
---|---|---|
committer | Timur Pocheptsov <timur.pocheptsov@theqtcompany.com> | 2016-08-03 15:31:20 +0000 |
commit | 12d71f4ea20415ff2274e1e90f9e4d5a8b935d7f (patch) | |
tree | 8ba8d02c73305bb533267bbe3784fc6e607716ad /src/network/access/qhttpprotocolhandler.cpp | |
parent | d7132c6c6d3bb9d1362744f36b2995b1d2daf4fe (diff) |
Implement protocol upgrade for HTTP/2 enabled requests
Without ALPN/NPN (== without OpenSSL) we can negotiate HTTP/2
using the protocol upgrade procedure as described by RFC7540.
Since there is no TLS handshake, after our http channel was connected
we first send an 'augmented' HTTP/1.1 request - its header
contains additional 'HTTP2-Settings' and 'Upgrade' (to 'h2c') fields.
If we receive reponse 101 (switch protocol) we re-create a protocol
handler and switch to HTTP/2.
Task-number: QTBUG-50955
Change-Id: I36e9985e06ba76edaf7fdb22bb43770f8d593c61
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Diffstat (limited to 'src/network/access/qhttpprotocolhandler.cpp')
-rw-r--r-- | src/network/access/qhttpprotocolhandler.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/network/access/qhttpprotocolhandler.cpp b/src/network/access/qhttpprotocolhandler.cpp index b486b75449..ab136af083 100644 --- a/src/network/access/qhttpprotocolhandler.cpp +++ b/src/network/access/qhttpprotocolhandler.cpp @@ -129,6 +129,15 @@ void QHttpProtocolHandler::_q_receiveReply() } else { replyPrivate->autoDecompress = false; } + if (m_connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2) { + if (replyPrivate->statusCode == 101) { + QMetaObject::invokeMethod(m_channel, "_q_protocolSwitch", Qt::QueuedConnection); + return; + } + + // HTTP/2 is not supported? TODO - but can it be something else? + m_channel->requeueSpdyRequests(); + } if (replyPrivate->statusCode == 100) { replyPrivate->clearHttpLayerInformation(); replyPrivate->state = QHttpNetworkReplyPrivate::ReadingStatusState; |