5#ifndef QHTTP2PROTOCOLHANDLER_P_H
6#define QHTTP2PROTOCOLHANDLER_P_H
19#include <private/qhttpnetworkconnectionchannel_p.h>
20#include <private/qabstractprotocolhandler_p.h>
21#include <private/qhttpnetworkrequest_p.h>
23#include <QtNetwork/qhttp2configuration.h>
25#include <private/qhttp2connection_p.h>
26#include <private/http2protocol_p.h>
27#include <private/http2streams_p.h>
28#include <private/http2frames_p.h>
29#include <private/hpacktable_p.h>
30#include <private/hpack_p.h>
32#include <QtCore/qnamespace.h>
33#include <QtCore/qbytearray.h>
34#include <QtCore/qobject.h>
35#include <QtCore/qflags.h>
36#include <QtCore/qhash.h>
77 bool sendSETTINGS_ACK();
78 bool sendHEADERS(QHttp2Stream *stream, QHttpNetworkRequest &request);
79 bool sendDATA(QHttp2Stream *stream, QHttpNetworkReply *reply);
81 bool acceptSetting(
Http2::
Settings identifier, quint32 newValue);
83 void handleAuthorization(QHttp2Stream *stream);
84 void handleHeadersReceived(
const HPack::HttpHeader &headers,
bool endStream);
85 void handleDataReceived(
const QByteArray &data,
bool endStream);
86 void finishStream(QHttp2Stream *stream,
87 Qt::ConnectionType connectionType = Qt::DirectConnection);
90 void finishStreamWithError(QHttp2Stream *stream,
Http2::
Http2Error errorCode);
92 void finishStreamWithError(QHttp2Stream *stream, QNetworkReply::NetworkError error,
93 const QString &message);
96 QHttp2Stream *createNewStream(
const HttpMessagePair &message,
bool uploadDone =
false);
97 void connectStream(
const HttpMessagePair &message, QHttp2Stream *stream);
98 void clearStreamState(QHttp2Stream *stream);
100 QHttp2Connection *h2Connection;
105 bool waitingForSettingsACK =
false;
110 QHash<QHttp2Stream *, HttpMessagePair> requestReplyPairs;
112 void initReplyFromPushPromise(
const HttpMessagePair &message,
const QUrl &cacheKey);
114 void connectionError(
Http2::
Http2Error errorCode,
const QString &message);
The QAuthenticator class provides an authentication object.
QHttp2ProtocolHandler(QHttpNetworkConnectionChannel *channel)
Q_INVOKABLE void handleConnectionClosure()
Q_INVOKABLE void _q_receiveReply() override
QHttp2ProtocolHandler & operator=(const QHttp2ProtocolHandler &rhs)=delete
QHttp2ProtocolHandler & operator=(QHttp2ProtocolHandler &&rhs)=delete
Q_INVOKABLE bool sendRequest() override
void _q_readyRead() override
bool tryRemoveReply(QHttpNetworkReply *reply) override
QHttp2ProtocolHandler(QHttp2ProtocolHandler &&rhs)=delete
QHttp2ProtocolHandler(const QHttp2ProtocolHandler &rhs)=delete
qint64 uncompressedBytesAvailableNextBlock(const QHttpNetworkReply &reply) const
void startNetworkLayerStateLookup()
bool shouldEmitChannelError(QIODevice *socket)
void createAuthorization(QIODevice *socket, QHttpNetworkRequest &request)
void emitReplyError(QIODevice *socket, QHttpNetworkReply *reply, QNetworkReply::NetworkError errorCode)
void fillPipeline(QIODevice *socket)
QTcpKeepAliveConfiguration tcpKeepAliveConfiguration
QUrl parseRedirectResponse(QIODevice *socket, QHttpNetworkReply *reply)
QHttpNetworkRequest predictNextRequest() const
NetworkLayerPreferenceState
void prepareRequest(HttpMessagePair &request)
void startHostInfoLookup()
NetworkLayerPreferenceState networkLayerState
void copyCredentials(int fromChannel, QAuthenticator *auth, bool isProxy)
std::shared_ptr< QSslContext > sslContext
void _q_connectDelayedChannel()
static const int defaultRePipelineLength
void networkLayerDetected(QAbstractSocket::NetworkLayerProtocol protocol)
void _q_startNextRequest()
void requeueRequest(const HttpMessagePair &pair)
QList< HttpMessagePair > lowPriorityQueue
void removeReply(QHttpNetworkReply *reply)
void _q_hostLookupFinished(const QHostInfo &info)
QHttpNetworkReply * predictNextRequestsReply() const
QList< HttpMessagePair > highPriorityQueue
void updateChannel(int i, const HttpMessagePair &messagePair)
bool handleAuthenticateChallenge(QIODevice *socket, QHttpNetworkReply *reply, bool isProxy, bool &resend)
QHttpNetworkReply * queueRequest(const QHttpNetworkRequest &request)
QHttpNetworkConnectionChannel *const channels
void readMoreLater(QHttpNetworkReply *reply)
bool dequeueRequest(QIODevice *socket)
QTimer delayedConnectionTimer
QHttp2Configuration http2Parameters
QNetworkProxy networkProxy
int indexOf(QIODevice *socket) const
~QHttpNetworkConnectionPrivate()
qint64 uncompressedBytesAvailable(const QHttpNetworkReply &reply) const
static const int defaultPipelineLength
static ParseRedirectResult parseRedirectResponse(QHttpNetworkReply *reply)
The QNetworkProxyQuery class is used to query the proxy settings for a socket.
The QNetworkProxy class provides a network layer proxy.
Combined button and popup list for selecting options.
Q_CORE_EXPORT QDebug operator<<(QDebug debug, QDir::Filters filters)
std::pair< QHttpNetworkRequest, QHttpNetworkReply * > HttpMessagePair
QNetworkReply::NetworkError errorCode