Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qnetworkaccessbackend_p.h
Go to the documentation of this file.
1// Copyright (C) 2020 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 QNETWORKACCESSBACKEND_P_H
5#define QNETWORKACCESSBACKEND_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists for the convenience
12// of the Network Access API. This header file may change from
13// version to version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <QtNetwork/qtnetworkglobal.h>
19
20#include <QtNetwork/qnetworkrequest.h>
21#include <QtNetwork/qnetworkaccessmanager.h>
22#include <QtNetwork/qnetworkreply.h>
23
24#include <QtCore/qobject.h>
25#include <QtCore/qflags.h>
26#include <QtCore/qbytearrayview.h>
27#include <QtCore/private/qglobal_p.h>
28
29#if QT_CONFIG(ssl)
30#include <QtNetwork/qsslconfiguration.h>
31#endif
32
34
38class Q_NETWORK_EXPORT QNetworkAccessBackend : public QObject
39{
41 Q_DECLARE_PRIVATE(QNetworkAccessBackend);
42
43public:
44 enum class TargetType {
45 Networked = 0x1, // We need to query for proxy in case it is needed
46 Local = 0x2, // Local file, generated data or local device
47 };
48 Q_ENUM(TargetType)
49 Q_DECLARE_FLAGS(TargetTypes, TargetType)
50
51 enum class SecurityFeature {
52 None = 0x0,
53 TLS = 0x1, // We need to set QSslConfiguration
54 };
55 Q_ENUM(SecurityFeature)
56 Q_DECLARE_FLAGS(SecurityFeatures, SecurityFeature)
57
58 enum class IOFeature {
59 None = 0x0,
60 ZeroCopy = 0x1, // readPointer and advanceReadPointer() is available!
61 NeedResetableUpload = 0x2, // Need to buffer upload data
62 SupportsSynchronousMode = 0x4, // Used for XMLHttpRequest
63 };
64 Q_ENUM(IOFeature)
65 Q_DECLARE_FLAGS(IOFeatures, IOFeature)
66
67 QNetworkAccessBackend(TargetTypes targetTypes, SecurityFeatures securityFeatures,
68 IOFeatures ioFeatures);
69 QNetworkAccessBackend(TargetTypes targetTypes);
70 QNetworkAccessBackend(TargetTypes targetTypes, SecurityFeatures securityFeatures);
71 QNetworkAccessBackend(TargetTypes targetTypes, IOFeatures ioFeatures);
72 virtual ~QNetworkAccessBackend();
73
74 SecurityFeatures securityFeatures() const noexcept;
75 TargetTypes targetTypes() const noexcept;
76 IOFeatures ioFeatures() const noexcept;
77
78 inline bool needsResetableUploadData() const noexcept
79 {
80 return ioFeatures() & IOFeature::NeedResetableUpload;
81 }
82
83 virtual bool start();
84 virtual void open() = 0;
85 virtual void close() = 0;
86#if QT_CONFIG(ssl)
87 virtual void setSslConfiguration(const QSslConfiguration &configuration);
88 virtual QSslConfiguration sslConfiguration() const;
89#endif
90 virtual void ignoreSslErrors();
91 virtual void ignoreSslErrors(const QList<QSslError> &errors);
92 virtual qint64 bytesAvailable() const = 0;
93 virtual QByteArrayView readPointer();
94 virtual void advanceReadPointer(qint64 distance);
95 virtual qint64 read(char *data, qint64 maxlen);
96 virtual bool wantToRead();
97
98#if QT_CONFIG(networkproxy)
99 QList<QNetworkProxy> proxyList() const;
100#endif
101 QUrl url() const;
102 void setUrl(const QUrl &url);
105 QByteArray rawHeader(const QByteArray &header) const;
106 void setRawHeader(const QByteArray &header, const QByteArray &value);
107 QHttpHeaders headers() const;
108 void setHeaders(const QHttpHeaders &newHeaders);
109 void setHeaders(QHttpHeaders &&newHeaders);
110 QNetworkAccessManager::Operation operation() const;
111
112 bool isCachingEnabled() const;
113 void setCachingEnabled(bool canCache);
114
116
117 QIODevice *createUploadByteDevice();
118 QIODevice *uploadByteDevice();
119
120 QAbstractNetworkCache *networkCache() const;
121
122public slots:
123 void readyRead();
124protected slots:
125 void finished();
126 void error(QNetworkReply::NetworkError code, const QString &errorString);
127#ifndef QT_NO_NETWORKPROXY
128 void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *auth);
129#endif
130 void authenticationRequired(QAuthenticator *auth);
131 void metaDataChanged();
132 void redirectionRequested(const QUrl &destination);
133
134private:
135 void setReplyPrivate(QNetworkReplyImplPrivate *reply);
136 void setManagerPrivate(QNetworkAccessManagerPrivate *manager);
137 bool isSynchronous() const;
138 void setSynchronous(bool synchronous);
139
140 friend class QNetworkAccessManager; // for setReplyPrivate
141 friend class QNetworkAccessManagerPrivate; // for setManagerPrivate
142 friend class QNetworkReplyImplPrivate; // for {set,is}Synchronous()
143};
144
145class Q_NETWORK_EXPORT QNetworkAccessBackendFactory : public QObject
146{
148public:
151 virtual QStringList supportedSchemes() const = 0;
153 const QNetworkRequest &request) const = 0;
154};
155
156#define QNetworkAccessBackendFactory_iid "org.qt-project.Qt.NetworkAccessBackendFactory"
158
160#endif
The QAbstractNetworkCache class provides the interface for cache implementations.
The QAuthenticator class provides an authentication object.
\inmodule QtCore
Definition qbytearray.h:57
\inmodule QtCore \reentrant
Definition qiodevice.h:34
virtual QNetworkAccessBackend * create(QNetworkAccessManager::Operation op, const QNetworkRequest &request) const =0
Override this method in your own class and return a heap-allocated instance of your class derived fro...
virtual QStringList supportedSchemes() const =0
Override this method in your own derived class to let Qt know what schemes your class can handle.
QNetworkAccessBackend is the base class for implementing support for schemes used by QNetworkAccessMa...
IOFeature
Use the values in this enum to specify what type of IO features the plugin may utilize.
virtual void close()=0
You must implement this function in your derived class.
virtual qint64 bytesAvailable() const =0
You must implement this function in your derived class.
virtual void open()=0
You must implement this in your derived class.
TargetType
Use the values in this enum to specify what type of target the plugin supports.
SecurityFeature
Use the values in this enum to specify what type of security features the plugin may utilize.
The QNetworkAccessManager class allows the application to send network requests and receive replies.
Operation
Indicates the operation this reply is processing.
The QNetworkProxy class provides a network layer proxy.
NetworkError
Indicates all possible error conditions found during the processing of the request.
The QNetworkRequest class holds a request to be sent with QNetworkAccessManager.
KnownHeaders
List of known header types that QNetworkRequest parses.
\inmodule QtCore
Definition qobject.h:103
The QSslConfiguration class holds the configuration and state of an SSL connection.
\inmodule QtCore
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
\inmodule QtCore
Definition qurl.h:94
\inmodule QtCore
Definition qvariant.h:65
Combined button and popup list for selecting options.
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char * destination
DBusConnection const char DBusError * error
static QString header(const QString &name)
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
EGLOutputLayerEXT EGLint attribute
#define Q_DECLARE_FLAGS(Flags, Enum)
Definition qflags.h:174
@ None
Definition qhash.cpp:531
#define QNetworkAccessBackendFactory_iid
#define Q_DECLARE_INTERFACE(IFace, IId)
Definition qobject.h:460
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLsizei GLsizei GLfloat distance
GLuint start
request setUrl(QUrl("http://qt-project.org"))
#define Q_ENUM(x)
#define Q_OBJECT
#define slots
long long qint64
Definition qtypes.h:60
ReturnedValue read(const char *data)
QUrl url("example.com")
[constructor-url-reference]
app setAttribute(Qt::AA_DontShowIconsInMenus)
QNetworkAccessManager manager
QNetworkRequest request(url)
QNetworkReply * reply
textPart setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"text\""))
imagePart setRawHeader("Content-ID", "my@content.id")
reply ignoreSslErrors(expectedSslErrors)
QNetworkProxy proxy
[0]
sslSocket setSslConfiguration(config)