5#ifndef QHTTPNETWORKCONNECTION_H
6#define QHTTPNETWORKCONNECTION_H
19#include <QtNetwork/private/qtnetworkglobal_p.h>
20#include <QtNetwork/qnetworkrequest.h>
21#include <QtNetwork/qnetworkreply.h>
22#include <QtNetwork/qabstractsocket.h>
24#include <qhttp2configuration.h>
26#include <private/qobject_p.h>
27#include <qauthenticator.h>
28#include <qnetworkproxy.h>
31#include <qsharedpointer.h>
33#include <private/qhttpnetworkheader_p.h>
34#include <private/qhttpnetworkrequest_p.h>
35#include <private/qhttpnetworkreply_p.h>
36#include <private/http2protocol_p.h>
38#include <private/qhttpnetworkconnectionchannel_p.h>
39#include <private/qtcpkeepaliveconfiguration_p.h>
47class QHttpNetworkRequest;
48class QHttpNetworkReply;
53class QSslConfiguration;
66 ConnectionTypeHTTP2Direct
69 QHttpNetworkConnection(quint16 channelCount,
const QString &hostName, quint16 port = 80,
70 bool encrypt =
false,
bool isLocalSocket =
false,
71 QObject *parent =
nullptr,
72 ConnectionType connectionType = ConnectionTypeHTTP);
73 ~QHttpNetworkConnection();
76 QString hostName()
const;
81 QHttpNetworkReply* sendRequest(
const QHttpNetworkRequest &request);
82 void fillHttp2Queue();
84#ifndef QT_NO_NETWORKPROXY
86 void setCacheProxy(
const QNetworkProxy &networkProxy);
87 QNetworkProxy cacheProxy()
const;
88 void setTransparentProxy(
const QNetworkProxy &networkProxy);
89 QNetworkProxy transparentProxy()
const;
94 QHttpNetworkConnectionChannel *channels()
const;
96 ConnectionType connectionType()
const;
97 void setConnectionType(ConnectionType type);
99 QHttp2Configuration http2Parameters()
const;
100 void setHttp2Parameters(
const QHttp2Configuration ¶ms);
102 QTcpKeepAliveConfiguration tcpKeepAliveParameters()
const;
103 void setTcpKeepAliveParameters(QTcpKeepAliveConfiguration config);
106 void setSslConfiguration(
const QSslConfiguration &config);
107 void ignoreSslErrors(
int channel = -1);
108 void ignoreSslErrors(
const QList<QSslError> &errors,
int channel = -1);
109 std::shared_ptr<QSslContext> sslContext()
const;
110 void setSslContext(std::shared_ptr<QSslContext> context);
113 void preConnectFinished();
115 QString peerVerifyName()
const;
116 void setPeerVerifyName(
const QString &peerName);
119 void onlineStateChanged(
bool isOnline);
122 Q_DECLARE_PRIVATE(QHttpNetworkConnection)
123 Q_DISABLE_COPY_MOVE(QHttpNetworkConnection)
124 friend class QHttpThreadDelegate;
125 friend class QHttpNetworkReply;
126 friend class QHttpNetworkReplyPrivate;
127 friend class QHttpNetworkConnectionChannel;
128 friend class QHttp2ProtocolHandler;
129 friend class QHttpProtocolHandler;
131 Q_PRIVATE_SLOT(d_func(),
void _q_startNextRequest())
132 Q_PRIVATE_SLOT(d_func(),
void _q_hostLookupFinished(QHostInfo))
133 Q_PRIVATE_SLOT(d_func(),
void _q_connectDelayedChannel())
143 Q_DECLARE_PUBLIC(QHttpNetworkConnection)
165 bool encrypt,
bool isLocalSocket,
166 QHttpNetworkConnection::ConnectionType type);
177 int indexOf(QIODevice *socket)
const;
179 QHttpNetworkReply *
queueRequest(
const QHttpNetworkRequest &request);
189 bool fillPipeline(QList<HttpMessagePair> &queue, QHttpNetworkConnectionChannel &channel);
194 void copyCredentials(
int fromChannel, QAuthenticator *auth,
bool isProxy);
208 QString
errorDetail(QNetworkReply::NetworkError errorCode, QIODevice *socket,
209 const QString &extraDetail = QString());
231 void emitReplyError(QIODevice *socket, QHttpNetworkReply *reply, QNetworkReply::NetworkError errorCode);
241#ifndef QT_NO_NETWORKPROXY
QString errorDetail(QNetworkReply::NetworkError errorCode, QIODevice *socket, const QString &extraDetail=QString())
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()
QHttpNetworkConnectionPrivate(quint16 connectionCount, const QString &hostName, quint16 port, bool encrypt, bool isLocalSocket, QHttpNetworkConnection::ConnectionType type)
void emitProxyAuthenticationRequired(const QHttpNetworkConnectionChannel *chan, const QNetworkProxy &proxy, QAuthenticator *auth)
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 fillPipeline(QList< HttpMessagePair > &queue, QHttpNetworkConnectionChannel &channel)
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)
Combined button and popup list for selecting options.
std::pair< QHttpNetworkRequest, QHttpNetworkReply * > HttpMessagePair
QNetworkReply::NetworkError errorCode