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 | |
4 | #ifndef QNETWORKACCESSMANAGER_H |
5 | #define QNETWORKACCESSMANAGER_H |
6 | |
7 | #include <QtNetwork/qtnetworkglobal.h> |
8 | #include <QtNetwork/qnetworkrequest.h> |
9 | #include <QtCore/QString> |
10 | #include <QtCore/QList> |
11 | #include <QtCore/QObject> |
12 | #ifndef QT_NO_SSL |
13 | #include <QtNetwork/QSslConfiguration> |
14 | #include <QtNetwork/QSslPreSharedKeyAuthenticator> |
15 | #endif |
16 | Q_MOC_INCLUDE(<QtNetwork/QSslError>) |
17 | |
18 | QT_BEGIN_NAMESPACE |
19 | |
20 | class QIODevice; |
21 | class QAbstractNetworkCache; |
22 | class QAuthenticator; |
23 | class QByteArray; |
24 | class QNetworkCookie; |
25 | class QNetworkCookieJar; |
26 | class QNetworkReply; |
27 | class QNetworkProxy; |
28 | class QNetworkProxyFactory; |
29 | class QSslError; |
30 | class QHstsPolicy; |
31 | class QHttpMultiPart; |
32 | |
33 | class QNetworkReplyImplPrivate; |
34 | class QNetworkAccessManagerPrivate; |
35 | class Q_NETWORK_EXPORT QNetworkAccessManager: public QObject |
36 | { |
37 | Q_OBJECT |
38 | |
39 | |
40 | public: |
41 | enum Operation { |
42 | HeadOperation = 1, |
43 | GetOperation, |
44 | PutOperation, |
45 | PostOperation, |
46 | DeleteOperation, |
47 | CustomOperation, |
48 | |
49 | UnknownOperation = 0 |
50 | }; |
51 | |
52 | explicit QNetworkAccessManager(QObject *parent = nullptr); |
53 | ~QNetworkAccessManager(); |
54 | |
55 | virtual QStringList supportedSchemes() const; |
56 | |
57 | void clearAccessCache(); |
58 | |
59 | void clearConnectionCache(); |
60 | |
61 | #ifndef QT_NO_NETWORKPROXY |
62 | QNetworkProxy proxy() const; |
63 | void setProxy(const QNetworkProxy &proxy); |
64 | QNetworkProxyFactory *proxyFactory() const; |
65 | void setProxyFactory(QNetworkProxyFactory *factory); |
66 | #endif |
67 | |
68 | QAbstractNetworkCache *cache() const; |
69 | void setCache(QAbstractNetworkCache *cache); |
70 | |
71 | QNetworkCookieJar *cookieJar() const; |
72 | void setCookieJar(QNetworkCookieJar *cookieJar); |
73 | |
74 | void setStrictTransportSecurityEnabled(bool enabled); |
75 | bool isStrictTransportSecurityEnabled() const; |
76 | void enableStrictTransportSecurityStore(bool enabled, const QString &storeDir = QString()); |
77 | bool isStrictTransportSecurityStoreEnabled() const; |
78 | void addStrictTransportSecurityHosts(const QList<QHstsPolicy> &knownHosts); |
79 | QList<QHstsPolicy> strictTransportSecurityHosts() const; |
80 | |
81 | QNetworkReply *(const QNetworkRequest &request); |
82 | QNetworkReply *get(const QNetworkRequest &request); |
83 | QNetworkReply *get(const QNetworkRequest &request, QIODevice *data); |
84 | QNetworkReply *get(const QNetworkRequest &request, const QByteArray &data); |
85 | QNetworkReply *post(const QNetworkRequest &request, QIODevice *data); |
86 | QNetworkReply *post(const QNetworkRequest &request, const QByteArray &data); |
87 | QNetworkReply *post(const QNetworkRequest &request, std::nullptr_t) |
88 | { |
89 | return post(request, data: static_cast<QIODevice*>(nullptr)); |
90 | } |
91 | |
92 | QNetworkReply *put(const QNetworkRequest &request, QIODevice *data); |
93 | QNetworkReply *put(const QNetworkRequest &request, const QByteArray &data); |
94 | QNetworkReply *put(const QNetworkRequest &request, std::nullptr_t) |
95 | { |
96 | return put(request, data: static_cast<QIODevice*>(nullptr)); |
97 | } |
98 | |
99 | QNetworkReply *deleteResource(const QNetworkRequest &request); |
100 | QNetworkReply *sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QIODevice *data = nullptr); |
101 | QNetworkReply *sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, const QByteArray &data); |
102 | |
103 | #if QT_CONFIG(http) || defined(Q_OS_WASM) |
104 | QNetworkReply *post(const QNetworkRequest &request, QHttpMultiPart *multiPart); |
105 | QNetworkReply *put(const QNetworkRequest &request, QHttpMultiPart *multiPart); |
106 | QNetworkReply *sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QHttpMultiPart *multiPart); |
107 | #endif |
108 | |
109 | #ifndef QT_NO_SSL |
110 | void connectToHostEncrypted(const QString &hostName, quint16 port = 443, |
111 | const QSslConfiguration &sslConfiguration = QSslConfiguration::defaultConfiguration()); |
112 | void connectToHostEncrypted(const QString &hostName, quint16 port, |
113 | const QSslConfiguration &sslConfiguration, |
114 | const QString &peerName); |
115 | #endif |
116 | void connectToHost(const QString &hostName, quint16 port = 80); |
117 | |
118 | void setRedirectPolicy(QNetworkRequest::RedirectPolicy policy); |
119 | QNetworkRequest::RedirectPolicy redirectPolicy() const; |
120 | |
121 | bool autoDeleteReplies() const; |
122 | void setAutoDeleteReplies(bool autoDelete); |
123 | |
124 | QT_NETWORK_INLINE_SINCE(6, 8) |
125 | int transferTimeout() const; |
126 | QT_NETWORK_INLINE_SINCE(6, 8) |
127 | void setTransferTimeout(int timeout); |
128 | |
129 | std::chrono::milliseconds transferTimeoutAsDuration() const; |
130 | void setTransferTimeout(std::chrono::milliseconds duration = |
131 | QNetworkRequest::DefaultTransferTimeout); |
132 | |
133 | Q_SIGNALS: |
134 | #ifndef QT_NO_NETWORKPROXY |
135 | void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator); |
136 | #endif |
137 | void authenticationRequired(QNetworkReply *reply, QAuthenticator *authenticator); |
138 | void finished(QNetworkReply *reply); |
139 | #ifndef QT_NO_SSL |
140 | void encrypted(QNetworkReply *reply); |
141 | void sslErrors(QNetworkReply *reply, const QList<QSslError> &errors); |
142 | void preSharedKeyAuthenticationRequired(QNetworkReply *reply, QSslPreSharedKeyAuthenticator *authenticator); |
143 | #endif |
144 | |
145 | protected: |
146 | virtual QNetworkReply *createRequest(Operation op, const QNetworkRequest &request, |
147 | QIODevice *outgoingData = nullptr); |
148 | |
149 | protected Q_SLOTS: |
150 | QStringList supportedSchemesImplementation() const; |
151 | |
152 | private: |
153 | friend class QNetworkReplyImplPrivate; |
154 | friend class QNetworkReplyHttpImpl; |
155 | friend class QNetworkReplyHttpImplPrivate; |
156 | friend class QNetworkReplyFileImpl; |
157 | |
158 | #ifdef Q_OS_WASM |
159 | friend class QNetworkReplyWasmImpl; |
160 | #endif |
161 | Q_DECLARE_PRIVATE(QNetworkAccessManager) |
162 | Q_PRIVATE_SLOT(d_func(), void _q_replySslErrors(QList<QSslError>)) |
163 | #ifndef QT_NO_SSL |
164 | Q_PRIVATE_SLOT(d_func(), void _q_replyPreSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator*)) |
165 | #endif |
166 | }; |
167 | |
168 | #if QT_NETWORK_INLINE_IMPL_SINCE(6, 8) |
169 | int QNetworkAccessManager::transferTimeout() const |
170 | { |
171 | return int(transferTimeoutAsDuration().count()); |
172 | } |
173 | |
174 | void QNetworkAccessManager::setTransferTimeout(int timeout) |
175 | { |
176 | setTransferTimeout(std::chrono::milliseconds(timeout)); |
177 | } |
178 | #endif // INLINE_SINCE 6.8 |
179 | |
180 | QT_END_NAMESPACE |
181 | |
182 | #endif |
183 | |