Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
qnetworkreplywasmimpl_p.h
Go to the documentation of this file.
1
// Copyright (C) 2018 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
QNETWORKREPLYWASMIMPL_H
6
#
define
QNETWORKREPLYWASMIMPL_H
7
8
//
9
// W A R N I N G
10
// -------------
11
//
12
// This file is not part of the Qt API. It exists for the convenience
13
// of the Network Access API. This header file may change from
14
// version to version without notice, or even be removed.
15
//
16
// We mean it.
17
//
18
19
#
include
"qnetworkreply.h"
20
#
include
"qnetworkreply_p.h"
21
#
include
"qnetworkaccessmanager.h"
22
23
#
include
<
QtCore
/
qfile
.
h
>
24
25
#
include
<
private
/
qtnetworkglobal_p
.
h
>
26
#
include
<
private
/
qabstractfileengine_p
.
h
>
27
28
#
include
<
emscripten
.
h
>
29
#
include
<
emscripten
/
fetch
.
h
>
30
31
#
include
<
memory
>
32
#
include
<
mutex
>
33
34
QT_BEGIN_NAMESPACE
35
36
class
QIODevice;
37
38
class
QNetworkReplyWasmImplPrivate
;
39
class
QNetworkReplyWasmImpl
:
public
QNetworkReply
40
{
41
Q_OBJECT
42
public
:
43
QNetworkReplyWasmImpl
(
QObject
*
parent
=
nullptr
);
44
~
QNetworkReplyWasmImpl
();
45
virtual
void
abort
()
override
;
46
47
// reimplemented from QNetworkReply
48
virtual
void
close
()
override
;
49
virtual
qint64
bytesAvailable
()
const
override
;
50
virtual
bool
isSequential
()
const
override
;
51
qint64
size
()
const
override
;
52
53
virtual
qint64
readData
(
char
*data, qint64 maxlen)
override
;
54
55
void
setup
(QNetworkAccessManager::Operation op,
const
QNetworkRequest &request,
56
QIODevice *outgoingData);
57
58
Q_DECLARE_PRIVATE
(
QNetworkReplyWasmImpl
)
59
60
Q_PRIVATE_SLOT
(
d_func
(),
void
emitReplyError
(
QNetworkReply
::
NetworkError
errorCode
,
const
QString
&
errorString
))
61
Q_PRIVATE_SLOT
(
d_func
(),
void
emitDataReadProgress
(
qint64
done
,
qint64
total
))
62
Q_PRIVATE_SLOT
(
d_func
(),
void
dataReceived
(
const
QByteArray
&
buffer
))
63
64
private
:
65
QByteArray
methodName
()
const
;
66
};
67
68
class
QNetworkReplyWasmImplPrivate
;
69
70
/*!
71
The FetchContext class ensures the requestData object remains valid
72
while a fetch operation is pending. Since Emscripten fetch is asynchronous,
73
requestData must persist until one of the final callbacks is invoked.
74
Additionally, there's a potential race condition between the thread
75
scheduling the fetch operation and the one executing it. Since fetch must
76
occur on the main thread due to browser limitations,
77
a mutex safeguards the FetchContext to ensure atomic state transitions.
78
*/
79
struct
FetchContext
80
{
81
enum
class
State
{
SCHEDULED
,
SENT
,
FINISHED
,
CANCELED
,
TO_BE_DESTROYED
};
82
83
FetchContext
(
QNetworkReplyWasmImplPrivate
*networkReply) :
reply
(networkReply) { }
84
85
QNetworkReplyWasmImplPrivate
*
reply
{
nullptr
};
86
std
::mutex mutex;
87
QByteArray
requestData
;
88
State
state
{
State
::
SCHEDULED
};
89
};
90
91
class
QNetworkReplyWasmImplPrivate
:
public
QNetworkReplyPrivate
92
{
93
public
:
94
QNetworkReplyWasmImplPrivate
();
95
~
QNetworkReplyWasmImplPrivate
();
96
97
QNetworkAccessManagerPrivate
*
managerPrivate
;
98
void
doSendRequest
();
99
static
void
setReplyAttributes
(quintptr data,
int
statusCode,
const
QString &statusReason);
100
101
void
emitReplyError
(QNetworkReply::NetworkError errorCode,
const
QString &);
102
void
emitDataReadProgress
(qint64 done, qint64 total);
103
void
dataReceived
(
const
QByteArray
&buffer);
104
void
headersReceived
(
const
QByteArray
&buffer);
105
106
void
setStatusCode
(
int
status,
const
QByteArray
&statusText);
107
108
void
setup
(QNetworkAccessManager::Operation op,
const
QNetworkRequest &request,
109
QIODevice *outgoingData);
110
111
State
state
;
112
void
_q_bufferOutgoingData
();
113
void
_q_bufferOutgoingDataFinished
();
114
115
std
::
shared_ptr
<
QAtomicInt
>
pendingDownloadData
;
116
std
::
shared_ptr
<
QAtomicInt
>
pendingDownloadProgress
;
117
118
qint64
bytesDownloaded
;
119
qint64
bytesBuffered
;
120
121
qint64
downloadBufferReadPosition
;
122
qint64
downloadBufferCurrentSize
;
123
qint64
totalDownloadSize
;
124
qint64
percentFinished
;
125
QByteArray
downloadBuffer
;
126
127
QIODevice *
outgoingData
;
128
std
::
shared_ptr
<
QRingBuffer
>
outgoingDataBuffer
;
129
130
static
void
downloadProgress
(emscripten_fetch_t *fetch);
131
static
void
downloadFailed
(emscripten_fetch_t *fetch);
132
static
void
downloadSucceeded
(emscripten_fetch_t *fetch);
133
static
void
stateChange
(emscripten_fetch_t *fetch);
134
135
static
QNetworkReply
::
NetworkError
statusCodeFromHttp
(
int
httpStatusCode,
const
QUrl &url);
136
137
emscripten_fetch_t
*
m_fetch
;
138
FetchContext
*
m_fetchContext
;
139
void
setReplyFinished
();
140
void
setCanceled
();
141
142
Q_DECLARE_PUBLIC(QNetworkReplyWasmImpl)
143
};
144
145
QT_END_NAMESPACE
146
147
#
endif
// QNETWORKREPLYWASMIMPL_H
QByteArray::FromBase64Result
\inmodule QtCore
Definition
qbytearray.h:824
QNetworkAccessManagerPrivate
Definition
qnetworkaccessmanager_p.h:45
QNetworkReplyPrivate
Definition
qnetworkreply_p.h:30
QNetworkReplyPrivate::State
State
Definition
qnetworkreply_p.h:32
QNetworkReplyPrivate::Working
@ Working
Definition
qnetworkreply_p.h:35
QNetworkReplyPrivate::Buffering
@ Buffering
Definition
qnetworkreply_p.h:34
QNetworkReplyPrivate::Finished
@ Finished
Definition
qnetworkreply_p.h:36
QNetworkReplyPrivate::Aborted
@ Aborted
Definition
qnetworkreply_p.h:37
QNetworkReplyPrivate::QNetworkReplyPrivate
QNetworkReplyPrivate()
Definition
qnetworkreply.cpp:17
QNetworkReplyWasmImplPrivate
Definition
qnetworkreplywasmimpl_p.h:92
QNetworkReplyWasmImplPrivate::downloadBufferReadPosition
qint64 downloadBufferReadPosition
Definition
qnetworkreplywasmimpl_p.h:121
QNetworkReplyWasmImplPrivate::outgoingDataBuffer
std::shared_ptr< QRingBuffer > outgoingDataBuffer
Definition
qnetworkreplywasmimpl_p.h:128
QNetworkReplyWasmImplPrivate::downloadBufferCurrentSize
qint64 downloadBufferCurrentSize
Definition
qnetworkreplywasmimpl_p.h:122
QNetworkReplyWasmImplPrivate::bytesBuffered
qint64 bytesBuffered
Definition
qnetworkreplywasmimpl_p.h:119
QNetworkReplyWasmImplPrivate::setReplyAttributes
static void setReplyAttributes(quintptr data, int statusCode, const QString &statusReason)
Definition
qnetworkreplywasmimpl.cpp:236
QNetworkReplyWasmImplPrivate::~QNetworkReplyWasmImplPrivate
~QNetworkReplyWasmImplPrivate()
Definition
qnetworkreplywasmimpl.cpp:71
QNetworkReplyWasmImplPrivate::outgoingData
QIODevice * outgoingData
Definition
qnetworkreplywasmimpl_p.h:127
QNetworkReplyWasmImplPrivate::setup
void setup(QNetworkAccessManager::Operation op, const QNetworkRequest &request, QIODevice *outgoingData)
Definition
qnetworkreplywasmimpl.cpp:203
QNetworkReplyWasmImplPrivate::downloadFailed
static void downloadFailed(emscripten_fetch_t *fetch)
Definition
qnetworkreplywasmimpl.cpp:587
QNetworkReplyWasmImplPrivate::QNetworkReplyWasmImplPrivate
QNetworkReplyWasmImplPrivate()
Definition
qnetworkreplywasmimpl.cpp:59
QNetworkReplyWasmImplPrivate::downloadSucceeded
static void downloadSucceeded(emscripten_fetch_t *fetch)
Definition
qnetworkreplywasmimpl.cpp:516
QNetworkReplyWasmImplPrivate::emitReplyError
void emitReplyError(QNetworkReply::NetworkError errorCode, const QString &)
Definition
qnetworkreplywasmimpl.cpp:341
QNetworkReplyWasmImplPrivate::downloadBuffer
QByteArray downloadBuffer
Definition
qnetworkreplywasmimpl_p.h:125
QNetworkReplyWasmImplPrivate::m_fetch
emscripten_fetch_t * m_fetch
Definition
qnetworkreplywasmimpl_p.h:137
QNetworkReplyWasmImplPrivate::totalDownloadSize
qint64 totalDownloadSize
Definition
qnetworkreplywasmimpl_p.h:123
QNetworkReplyWasmImplPrivate::setStatusCode
void setStatusCode(int status, const QByteArray &statusText)
Definition
qnetworkreplywasmimpl.cpp:551
QNetworkReplyWasmImplPrivate::state
State state
Definition
qnetworkreplywasmimpl_p.h:111
QNetworkReplyWasmImplPrivate::doSendRequest
void doSendRequest()
Definition
qnetworkreplywasmimpl.cpp:250
QNetworkReplyWasmImplPrivate::_q_bufferOutgoingData
void _q_bufferOutgoingData()
Definition
qnetworkreplywasmimpl.cpp:473
QNetworkReplyWasmImplPrivate::pendingDownloadData
std::shared_ptr< QAtomicInt > pendingDownloadData
Definition
qnetworkreplywasmimpl_p.h:115
QNetworkReplyWasmImplPrivate::pendingDownloadProgress
std::shared_ptr< QAtomicInt > pendingDownloadProgress
Definition
qnetworkreplywasmimpl_p.h:116
QNetworkReplyWasmImplPrivate::headersReceived
void headersReceived(const QByteArray &buffer)
Definition
qnetworkreplywasmimpl.cpp:426
QNetworkReplyWasmImplPrivate::stateChange
static void stateChange(emscripten_fetch_t *fetch)
Definition
qnetworkreplywasmimpl.cpp:558
QNetworkReplyWasmImplPrivate::managerPrivate
QNetworkAccessManagerPrivate * managerPrivate
Definition
qnetworkreplywasmimpl_p.h:97
QNetworkReplyWasmImplPrivate::emitDataReadProgress
void emitDataReadProgress(qint64 done, qint64 total)
Definition
qnetworkreplywasmimpl.cpp:349
QNetworkReplyWasmImplPrivate::m_fetchContext
FetchContext * m_fetchContext
Definition
qnetworkreplywasmimpl_p.h:138
QNetworkReplyWasmImplPrivate::_q_bufferOutgoingDataFinished
void _q_bufferOutgoingDataFinished()
Definition
qnetworkreplywasmimpl.cpp:456
QNetworkReplyWasmImplPrivate::percentFinished
qint64 percentFinished
Definition
qnetworkreplywasmimpl_p.h:124
QNetworkReplyWasmImplPrivate::setCanceled
void setCanceled()
Definition
qnetworkreplywasmimpl.cpp:155
QNetworkReplyWasmImplPrivate::bytesDownloaded
qint64 bytesDownloaded
Definition
qnetworkreplywasmimpl_p.h:118
QNetworkReplyWasmImplPrivate::setReplyFinished
void setReplyFinished()
Definition
qnetworkreplywasmimpl.cpp:542
QNetworkReplyWasmImplPrivate::statusCodeFromHttp
static QNetworkReply::NetworkError statusCodeFromHttp(int httpStatusCode, const QUrl &url)
Definition
qnetworkreplywasmimpl.cpp:621
QNetworkReplyWasmImplPrivate::downloadProgress
static void downloadProgress(emscripten_fetch_t *fetch)
Definition
qnetworkreplywasmimpl.cpp:572
QNetworkReplyWasmImplPrivate::dataReceived
void dataReceived(const QByteArray &buffer)
Definition
qnetworkreplywasmimpl.cpp:360
QNetworkReplyWasmImpl
Definition
qnetworkreplywasmimpl_p.h:40
QNetworkReplyWasmImpl::size
qint64 size() const override
For open random-access devices, this function returns the size of the device.
Definition
qnetworkreplywasmimpl.cpp:184
QNetworkReplyWasmImpl::~QNetworkReplyWasmImpl
~QNetworkReplyWasmImpl()
Definition
qnetworkreplywasmimpl.cpp:98
QNetworkReplyWasmImpl::bytesAvailable
virtual qint64 bytesAvailable() const override
Returns the number of bytes that are available for reading.
Definition
qnetworkreplywasmimpl.cpp:172
QNetworkReplyWasmImpl::readData
virtual qint64 readData(char *data, qint64 maxlen) override
Definition
qnetworkreplywasmimpl.cpp:192
QNetworkReplyWasmImpl::abort
virtual void abort() override
Aborts the operation immediately and closes any network connections still open.
Definition
qnetworkreplywasmimpl.cpp:144
QNetworkReplyWasmImpl::setup
void setup(QNetworkAccessManager::Operation op, const QNetworkRequest &request, QIODevice *outgoingData)
QNetworkReplyWasmImpl::isSequential
virtual bool isSequential() const override
\reimp
Definition
qnetworkreplywasmimpl.cpp:179
QNetworkReplyWasmImpl::close
virtual void close() override
Closes this device for reading.
Definition
qnetworkreplywasmimpl.cpp:127
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qsequentialanimationgroup.cpp:47
std
[33]
Definition
src_corelib_tools_qhash.cpp:421
getArraySize
constexpr int getArraySize(int factor)
Definition
qnetworkreplywasmimpl.cpp:246
parseHeaderName
static int parseHeaderName(const QByteArray &headerName)
Definition
qnetworkreplywasmimpl.cpp:383
FetchContext
The FetchContext class ensures the requestData object remains valid while a fetch operation is pendin...
Definition
qnetworkreplywasmimpl_p.h:80
FetchContext::FetchContext
FetchContext(QNetworkReplyWasmImplPrivate *networkReply)
Definition
qnetworkreplywasmimpl_p.h:83
FetchContext::State
State
Definition
qnetworkreplywasmimpl_p.h:81
FetchContext::State::TO_BE_DESTROYED
@ TO_BE_DESTROYED
Definition
qnetworkreplywasmimpl_p.h:81
FetchContext::State::SENT
@ SENT
Definition
qnetworkreplywasmimpl_p.h:81
FetchContext::State::SCHEDULED
@ SCHEDULED
Definition
qnetworkreplywasmimpl_p.h:81
FetchContext::State::FINISHED
@ FINISHED
Definition
qnetworkreplywasmimpl_p.h:81
FetchContext::State::CANCELED
@ CANCELED
Definition
qnetworkreplywasmimpl_p.h:81
FetchContext::requestData
QByteArray requestData
Definition
qnetworkreplywasmimpl_p.h:87
FetchContext::state
State state
Definition
qnetworkreplywasmimpl_p.h:88
FetchContext::reply
QNetworkReplyWasmImplPrivate * reply
Definition
qnetworkreplywasmimpl_p.h:85
qtbase
src
network
access
qnetworkreplywasmimpl_p.h
Generated on
for Qt by
1.18.0