Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qnetworkproxy.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5#ifndef QNETWORKPROXY_H
6#define QNETWORKPROXY_H
7
8#include <QtNetwork/qtnetworkglobal.h>
9#include <QtNetwork/qhostaddress.h>
10#include <QtNetwork/qnetworkrequest.h>
11#include <QtCore/qshareddata.h>
12
13#ifndef QT_NO_NETWORKPROXY
14
16
17
18class QUrl;
19
21class Q_NETWORK_EXPORT QNetworkProxyQuery
22{
23 Q_GADGET
24
25public:
26 enum QueryType {
27 TcpSocket,
28 UdpSocket,
29 SctpSocket,
30 TcpServer = 100,
31 UrlRequest,
32 SctpServer
33 };
34 Q_ENUM(QueryType)
35
36 QNetworkProxyQuery();
37 explicit QNetworkProxyQuery(const QUrl &requestUrl, QueryType queryType = UrlRequest);
38 QNetworkProxyQuery(const QString &hostname, int port, const QString &protocolTag = QString(),
39 QueryType queryType = TcpSocket);
40 explicit QNetworkProxyQuery(quint16 bindPort, const QString &protocolTag = QString(),
41 QueryType queryType = TcpServer);
42 QNetworkProxyQuery(const QNetworkProxyQuery &other);
43 QNetworkProxyQuery &operator=(QNetworkProxyQuery &&other) noexcept { swap(other); return *this; }
44 QNetworkProxyQuery &operator=(const QNetworkProxyQuery &other);
45 ~QNetworkProxyQuery();
46
47 void swap(QNetworkProxyQuery &other) noexcept { d.swap(other.d); }
48
49 bool operator==(const QNetworkProxyQuery &other) const;
50 inline bool operator!=(const QNetworkProxyQuery &other) const
51 { return !(*this == other); }
52
53 QueryType queryType() const;
54 void setQueryType(QueryType type);
55
56 int peerPort() const;
57 void setPeerPort(int port);
58
59 QString peerHostName() const;
60 void setPeerHostName(const QString &hostname);
61
62 int localPort() const;
63 void setLocalPort(int port);
64
65 QString protocolTag() const;
66 void setProtocolTag(const QString &protocolTag);
67
68 QUrl url() const;
69 void setUrl(const QUrl &url);
70
71private:
72 QSharedDataPointer<QNetworkProxyQueryPrivate> d;
73};
74
76
78
79class Q_NETWORK_EXPORT QNetworkProxy
80{
81 Q_GADGET
82public:
83 enum ProxyType {
84 DefaultProxy,
85 Socks5Proxy,
86 NoProxy,
87 HttpProxy,
88 HttpCachingProxy,
89 FtpCachingProxy
90 };
91
92 enum Capability {
93 TunnelingCapability = 0x0001,
94 ListeningCapability = 0x0002,
95 UdpTunnelingCapability = 0x0004,
96 CachingCapability = 0x0008,
97 HostNameLookupCapability = 0x0010,
98 SctpTunnelingCapability = 0x00020,
99 SctpListeningCapability = 0x00040
100 };
101 Q_DECLARE_FLAGS(Capabilities, Capability)
102
103 QNetworkProxy();
104 QNetworkProxy(ProxyType type, const QString &hostName = QString(), quint16 port = 0,
105 const QString &user = QString(), const QString &password = QString());
106 QNetworkProxy(const QNetworkProxy &other);
107 QNetworkProxy &operator=(QNetworkProxy &&other) noexcept { swap(other); return *this; }
108 QNetworkProxy &operator=(const QNetworkProxy &other);
109 ~QNetworkProxy();
110
111 void swap(QNetworkProxy &other) noexcept { d.swap(other.d); }
112
113 bool operator==(const QNetworkProxy &other) const;
114 inline bool operator!=(const QNetworkProxy &other) const
115 { return !(*this == other); }
116
117 void setType(QNetworkProxy::ProxyType type);
118 QNetworkProxy::ProxyType type() const;
119
120 void setCapabilities(Capabilities capab);
121 Capabilities capabilities() const;
122 bool isCachingProxy() const;
123 bool isTransparentProxy() const;
124
125 void setUser(const QString &userName);
126 QString user() const;
127
128 void setPassword(const QString &password);
129 QString password() const;
130
131 void setHostName(const QString &hostName);
132 QString hostName() const;
133
134 void setPort(quint16 port);
135 quint16 port() const;
136
137 static void setApplicationProxy(const QNetworkProxy &proxy);
138 static QNetworkProxy applicationProxy();
139
140 QHttpHeaders headers() const;
141 void setHeaders(const QHttpHeaders &newHeaders);
142 void setHeaders(QHttpHeaders &&newHeaders);
143
144 // "cooked" headers
145 QVariant header(QNetworkRequest::KnownHeaders header) const;
146 void setHeader(QNetworkRequest::KnownHeaders header, const QVariant &value);
147
148 // raw headers:
149 bool hasRawHeader(const QByteArray &headerName) const;
150 QList<QByteArray> rawHeaderList() const;
151 QByteArray rawHeader(const QByteArray &headerName) const;
152 void setRawHeader(const QByteArray &headerName, const QByteArray &value);
153
154private:
155 QSharedDataPointer<QNetworkProxyPrivate> d;
156};
157
159Q_DECLARE_OPERATORS_FOR_FLAGS(QNetworkProxy::Capabilities)
160
161class Q_NETWORK_EXPORT QNetworkProxyFactory
162{
163public:
164 QNetworkProxyFactory();
165 virtual ~QNetworkProxyFactory();
166
167 virtual QList<QNetworkProxy> queryProxy(const QNetworkProxyQuery &query = QNetworkProxyQuery()) = 0;
168
169 static bool usesSystemConfiguration();
170 static void setUseSystemConfiguration(bool enable);
171 static void setApplicationProxyFactory(QNetworkProxyFactory *factory);
172 static QList<QNetworkProxy> proxyForQuery(const QNetworkProxyQuery &query);
173 static QList<QNetworkProxy> systemProxyForQuery(const QNetworkProxyQuery &query = QNetworkProxyQuery());
174};
175
176#ifndef QT_NO_DEBUG_STREAM
177Q_NETWORK_EXPORT QDebug operator<<(QDebug debug, const QNetworkProxy &proxy);
178Q_NETWORK_EXPORT QDebug operator<<(QDebug debug, const QNetworkProxyQuery &proxyQuery);
179#endif
180
181QT_END_NAMESPACE
182
183QT_DECL_METATYPE_EXTERN(QNetworkProxy, Q_NETWORK_EXPORT)
184
185#endif // QT_NO_NETWORKPROXY
186
187#endif // QHOSTINFO_H
The QAuthenticator class provides an authentication object.
QString errorDetail(QNetworkReply::NetworkError errorCode, QIODevice *socket, const QString &extraDetail=QString())
qint64 uncompressedBytesAvailableNextBlock(const QHttpNetworkReply &reply) const
bool shouldEmitChannelError(QIODevice *socket)
void createAuthorization(QIODevice *socket, QHttpNetworkRequest &request)
void emitReplyError(QIODevice *socket, QHttpNetworkReply *reply, QNetworkReply::NetworkError errorCode)
QUrl parseRedirectResponse(QIODevice *socket, QHttpNetworkReply *reply)
QHttpNetworkRequest predictNextRequest() const
void prepareRequest(HttpMessagePair &request)
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 networkLayerDetected(QAbstractSocket::NetworkLayerProtocol protocol)
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)
int indexOf(QIODevice *socket) const
qint64 uncompressedBytesAvailable(const QHttpNetworkReply &reply) const
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.
Q_CORE_EXPORT QDebug operator<<(QDebug debug, QDir::Filters filters)
Definition qdir.cpp:2568
QT_REQUIRE_CONFIG(http)
std::pair< QHttpNetworkRequest, QHttpNetworkReply * > HttpMessagePair