Qt 6.x
The Qt SDK
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
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 QNetworkAccessManager::Operation operation() const;
108
109 bool isCachingEnabled() const;
110 void setCachingEnabled(bool canCache);
111
113
114 QIODevice *createUploadByteDevice();
115 QIODevice *uploadByteDevice();
116
117 QAbstractNetworkCache *networkCache() const;
118
119public slots:
120 void readyRead();
121protected slots:
122 void finished();
123 void error(QNetworkReply::NetworkError code, const QString &errorString);
124#ifndef QT_NO_NETWORKPROXY
125 void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *auth);
126#endif
127 void authenticationRequired(QAuthenticator *auth);
128 void metaDataChanged();
129 void redirectionRequested(const QUrl &destination);
130
131private:
132 void setReplyPrivate(QNetworkReplyImplPrivate *reply);
133 void setManagerPrivate(QNetworkAccessManagerPrivate *manager);
134 bool isSynchronous() const;
135 void setSynchronous(bool synchronous);
136
137 friend class QNetworkAccessManager; // for setReplyPrivate
138 friend class QNetworkAccessManagerPrivate; // for setManagerPrivate
139 friend class QNetworkReplyImplPrivate; // for {set,is}Synchronous()
140};
141
142class Q_NETWORK_EXPORT QNetworkAccessBackendFactory : public QObject
143{
145public:
148 virtual QStringList supportedSchemes() const = 0;
150 const QNetworkRequest &request) const = 0;
151};
152
153#define QNetworkAccessBackendFactory_iid "org.qt-project.Qt.NetworkAccessBackendFactory"
155
157#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
Definition qlist.h:74
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:90
The QSslConfiguration class holds the configuration and state of an SSL connection.
\inmodule QtCore
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:127
\inmodule QtCore
Definition qurl.h:94
\inmodule QtCore
Definition qvariant.h:64
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
#define QNetworkAccessBackendFactory_iid
#define Q_DECLARE_INTERFACE(IFace, IId)
Definition qobject.h:420
GLsizei GLsizei GLfloat distance
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLuint start
request setUrl(QUrl("http://qt-project.org"))
#define Q_ENUM(x)
#define Q_OBJECT
#define slots
long long qint64
Definition qtypes.h:55
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)