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
QHttp2Stream Class Reference

\inmodule QtNetwork More...

#include <qhttp2connection_p.h>

+ Inheritance diagram for QHttp2Stream:
+ Collaboration diagram for QHttp2Stream:

Public Types

enum class  State {
  Idle , ReservedRemote , Open , HalfClosedLocal ,
  HalfClosedRemote , Closed
}
 

Public Slots

bool sendRST_STREAM (quint32 errorCode)
 Sends a RST_STREAM frame with the given errorCode.
 
bool sendHEADERS (const HPack::HttpHeader &headers, bool endStream, quint8 priority=DefaultPriority)
 Sends a HEADERS frame with the given headers and priority.
 
void sendDATA (QIODevice *device, bool endStream)
 Sends a DATA frame with the bytes obtained from device.
 
void sendDATA (QNonContiguousByteDevice *device, bool endStream)
 Sends a DATA frame with the bytes obtained from device.
 
void sendWINDOW_UPDATE (quint32 delta)
 Sends a WINDOW_UPDATE frame with the given delta.
 
- Public Slots inherited from QObject
void deleteLater ()
 \threadsafe
 

Signals

void headersReceived (const HPack::HttpHeader &headers, bool endStream)
 This signal is emitted when the remote peer has sent a HEADERS frame, and potentially some CONTINUATION frames, ending with the END_HEADERS flag to this stream.
 
void headersUpdated ()
 This signal may be emitted if a new HEADERS frame was received after already processing a previous HEADERS frame.
 
void errorOccurred (quint32 errorCode, const QString &errorString)
 This signal is emitted when the stream has encountered an error.
 
void stateChanged (QHttp2Stream::State newState)
 This signal is emitted when the state of the stream changes.
 
void promisedStreamReceived (quint32 newStreamID)
 This signal is emitted when the remote peer has promised a new stream with the given newStreamID.
 
void uploadBlocked ()
 This signal is emitted when the stream is unable to send more data because the remote peer's receive window is full.
 
void dataReceived (const QByteArray &data, bool endStream)
 This signal is emitted when the stream has received a DATA frame from the remote peer.
 
void bytesWritten (qint64 bytesWritten)
 This signal is emitted when the stream has written bytesWritten bytes to the network.
 
void uploadDeviceError (const QString &errorString)
 This signal is emitted if the upload device encounters an error while sending data.
 
void uploadFinished ()
 This signal is emitted when the stream has finished sending all the data from the upload device.
 
- Signals inherited from QObject
void destroyed (QObject *=nullptr)
 This signal is emitted immediately before the object obj is destroyed, after any instances of QPointer have been notified, and cannot be blocked.
 
void objectNameChanged (const QString &objectName, QPrivateSignal)
 This signal is emitted after the object's name has been changed.
 

Public Member Functions

 ~QHttp2Stream () noexcept
 
quint32 streamID () const noexcept
 Returns the stream ID of this stream.
 
bool isUploadBlocked () const noexcept
 Returns true if the stream is currently unable to send more data because the remote peer's receive window is full.
 
bool isUploadingDATA () const noexcept
 Returns true if the stream is currently sending DATA frames.
 
State state () const noexcept
 Returns the current state of the stream.
 
bool isActive () const noexcept
 Returns true if the stream has been opened and is not yet closed.
 
bool isPromisedStream () const noexcept
 Returns true if the stream was promised by the remote peer.
 
bool wasReset () const noexcept
 Returns true if the stream was reset by the remote peer.
 
quint32 RST_STREAM_code () const noexcept
 Returns the HTTP/2 error code if the stream was reset by the remote peer.
 
HPack::HttpHeader receivedHeaders () const noexcept
 Returns the headers received from the remote peer, if any.
 
QByteDataBuffer downloadBuffer () const noexcept
 Returns the buffer containing the data received from the remote peer.
 
- Public Member Functions inherited from QObject
Q_INVOKABLE QObject (QObject *parent=nullptr)
 Constructs an object with parent object parent.
 
virtual ~QObject ()
 Destroys the object, deleting all its child objects.
 
virtual bool event (QEvent *event)
 This virtual function receives events to an object and should return true if the event e was recognized and processed.
 
virtual bool eventFilter (QObject *watched, QEvent *event)
 Filters events if this object has been installed as an event filter for the watched object.
 
QString objectName () const
 
Q_WEAK_OVERLOAD void setObjectName (const QString &name)
 Sets the object's name to name.
 
void setObjectName (QAnyStringView name)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
QBindable< QStringbindableObjectName ()
 
bool isWidgetType () const
 Returns true if the object is a widget; otherwise returns false.
 
bool isWindowType () const
 Returns true if the object is a window; otherwise returns false.
 
bool isQuickItemType () const
 Returns true if the object is a QQuickItem; otherwise returns false.
 
bool signalsBlocked () const noexcept
 Returns true if signals are blocked; otherwise returns false.
 
bool blockSignals (bool b) noexcept
 If block is true, signals emitted by this object are blocked (i.e., emitting a signal will not invoke anything connected to it).
 
QThreadthread () const
 Returns the thread in which the object lives.
 
bool moveToThread (QThread *thread QT6_DECL_NEW_OVERLOAD_TAIL)
 Changes the thread affinity for this object and its children and returns true on success.
 
int startTimer (int interval, Qt::TimerType timerType=Qt::CoarseTimer)
 This is an overloaded function that will start a timer of type timerType and a timeout of interval milliseconds.
 
int startTimer (std::chrono::nanoseconds time, Qt::TimerType timerType=Qt::CoarseTimer)
 
void killTimer (int id)
 Kills the timer with timer identifier, id.
 
void killTimer (Qt::TimerId id)
 
template<typename T >
findChild (QAnyStringView aName, Qt::FindChildOptions options=Qt::FindChildrenRecursively) const
 Returns the child of this object that can be cast into type T and that is called name, or \nullptr if there is no such object.
 
template<typename T >
QList< T > findChildren (QAnyStringView aName, Qt::FindChildOptions options=Qt::FindChildrenRecursively) const
 Returns all children of this object with the given name that can be cast to type T, or an empty list if there are no such objects.
 
template<typename T >
findChild (Qt::FindChildOptions options=Qt::FindChildrenRecursively) const
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
template<typename T >
QList< T > findChildren (Qt::FindChildOptions options=Qt::FindChildrenRecursively) const
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
const QObjectListchildren () const
 Returns a list of child objects.
 
void setParent (QObject *parent)
 Makes the object a child of parent.
 
void installEventFilter (QObject *filterObj)
 Installs an event filter filterObj on this object.
 
void removeEventFilter (QObject *obj)
 Removes an event filter object obj from this object.
 
QMetaObject::Connection connect (const QObject *sender, const char *signal, const char *member, Qt::ConnectionType type=Qt::AutoConnection) const
 
bool disconnect (const char *signal=nullptr, const QObject *receiver=nullptr, const char *member=nullptr) const
 
bool disconnect (const QObject *receiver, const char *member=nullptr) const
 
void dumpObjectTree () const
 Dumps a tree of children to the debug output.
 
void dumpObjectInfo () const
 Dumps information about signal connections, etc.
 
bool setProperty (const char *name, const QVariant &value)
 Sets the value of the object's name property to value.
 
bool setProperty (const char *name, QVariant &&value)
 
QVariant property (const char *name) const
 Returns the value of the object's name property.
 
QList< QByteArraydynamicPropertyNames () const
 
QBindingStoragebindingStorage ()
 
const QBindingStoragebindingStorage () const
 
QObjectparent () const
 Returns a pointer to the parent object.
 
bool inherits (const char *classname) const
 Returns true if this object is an instance of a class that inherits className or a QObject subclass that inherits className; otherwise returns false.
 

Static Public Attributes

static constexpr quint8 DefaultPriority = 127
 

Friends

class QHttp2Connection
 

Additional Inherited Members

- Static Public Member Functions inherited from QObject
static QMetaObject::Connection connect (const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
 \threadsafe
 
static QMetaObject::Connection connect (const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method, Qt::ConnectionType type=Qt::AutoConnection)
 
template<typename Func1 , typename Func2 >
static QMetaObject::Connection connect (const typename QtPrivate::FunctionPointer< Func1 >::Object *sender, Func1 signal, const typename QtPrivate::ContextTypeForFunctor< Func2 >::ContextType *context, Func2 &&slot, Qt::ConnectionType type=Qt::AutoConnection)
 
template<typename Func1 , typename Func2 >
static QMetaObject::Connection connect (const typename QtPrivate::FunctionPointer< Func1 >::Object *sender, Func1 signal, Func2 &&slot)
 
static bool disconnect (const QObject *sender, const char *signal, const QObject *receiver, const char *member)
 \threadsafe
 
static bool disconnect (const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &member)
 
static bool disconnect (const QMetaObject::Connection &)
 Disconnect a connection.
 
template<typename Func1 , typename Func2 >
static bool disconnect (const typename QtPrivate::FunctionPointer< Func1 >::Object *sender, Func1 signal, const typename QtPrivate::FunctionPointer< Func2 >::Object *receiver, Func2 slot)
 
template<typename Func1 >
static bool disconnect (const typename QtPrivate::FunctionPointer< Func1 >::Object *sender, Func1 signal, const QObject *receiver, void **zero)
 
- Protected Member Functions inherited from QObject
QObjectsender () const
 Returns a pointer to the object that sent the signal, if called in a slot activated by a signal; otherwise it returns \nullptr.
 
int senderSignalIndex () const
 
int receivers (const char *signal) const
 Returns the number of receivers connected to the signal.
 
bool isSignalConnected (const QMetaMethod &signal) const
 
virtual void timerEvent (QTimerEvent *event)
 This event handler can be reimplemented in a subclass to receive timer events for the object.
 
virtual void childEvent (QChildEvent *event)
 This event handler can be reimplemented in a subclass to receive child events.
 
virtual void customEvent (QEvent *event)
 This event handler can be reimplemented in a subclass to receive custom events.
 
virtual void connectNotify (const QMetaMethod &signal)
 
virtual void disconnectNotify (const QMetaMethod &signal)
 
 QObject (QObjectPrivate &dd, QObject *parent=nullptr)
 
- Protected Attributes inherited from QObject
QScopedPointer< QObjectDatad_ptr
 
- Properties inherited from QObject
QString objectName
 the name of this object
 

Detailed Description

\inmodule QtNetwork

The QHttp2Stream class represents a single HTTP/2 stream. Must be created by QHttp2Connection.

See also
QHttp2Connection

Definition at line 90 of file qhttp2connection_p.h.

Member Enumeration Documentation

◆ State

enum class QHttp2Stream::State
strong
Enumerator
Idle 
ReservedRemote 
Open 
HalfClosedLocal 
HalfClosedRemote 
Closed 

Definition at line 96 of file qhttp2connection_p.h.

Constructor & Destructor Documentation

◆ ~QHttp2Stream()

QHttp2Stream::~QHttp2Stream ( )
defaultnoexcept

Member Function Documentation

◆ bytesWritten

void QHttp2Stream::bytesWritten ( qint64 bytesWritten)
signal

This signal is emitted when the stream has written bytesWritten bytes to the network.

◆ dataReceived

void QHttp2Stream::dataReceived ( const QByteArray & data,
bool endStream )
signal

This signal is emitted when the stream has received a DATA frame from the remote peer.

The data parameter contains the payload of the frame, and the endStream parameter is true if the END_STREAM flag was set.

See also
downloadBuffer()

◆ downloadBuffer()

QByteDataBuffer QHttp2Stream::downloadBuffer ( ) const
inlinenoexcept

Returns the buffer containing the data received from the remote peer.

Definition at line 116 of file qhttp2connection_p.h.

◆ errorOccurred

void QHttp2Stream::errorOccurred ( quint32 errorCode,
const QString & errorString )
signal

This signal is emitted when the stream has encountered an error.

The errorCode parameter is the HTTP/2 error code, and the errorString parameter is a human-readable description of the error.

See also
https://www.rfc-editor.org/rfc/rfc7540#section-7

◆ headersReceived

void QHttp2Stream::headersReceived ( const HPack::HttpHeader & headers,
bool endStream )
signal

This signal is emitted when the remote peer has sent a HEADERS frame, and potentially some CONTINUATION frames, ending with the END_HEADERS flag to this stream.

The headers are internally combined and decompressed, and are accessible through the headers parameter. If the END_STREAM flag was set, the endStream parameter will be true, indicating that the peer does not intend to send any more frames on this stream.

See also
receivedHeaders()

◆ headersUpdated

void QHttp2Stream::headersUpdated ( )
signal

This signal may be emitted if a new HEADERS frame was received after already processing a previous HEADERS frame.

See also
headersReceived(), receivedHeaders()

◆ isActive()

bool QHttp2Stream::isActive ( ) const
inlinenoexcept

Returns true if the stream has been opened and is not yet closed.

Definition at line 109 of file qhttp2connection_p.h.

◆ isPromisedStream()

bool QHttp2Stream::isPromisedStream ( ) const
inlinenoexcept

Returns true if the stream was promised by the remote peer.

Definition at line 110 of file qhttp2connection_p.h.

◆ isUploadBlocked()

bool QHttp2Stream::isUploadBlocked ( ) const
noexcept

Returns true if the stream is currently unable to send more data because the remote peer's receive window is full.

Definition at line 422 of file qhttp2connection.cpp.

References Http2::frameHeaderSize, and isUploadingDATA().

+ Here is the call graph for this function:

◆ isUploadingDATA()

bool QHttp2Stream::isUploadingDATA ( ) const
inlinenoexcept

Returns true if the stream is currently sending DATA frames.

Definition at line 107 of file qhttp2connection_p.h.

Referenced by isUploadBlocked().

+ Here is the caller graph for this function:

◆ promisedStreamReceived

void QHttp2Stream::promisedStreamReceived ( quint32 newStreamID)
signal

This signal is emitted when the remote peer has promised a new stream with the given newStreamID.

See also
QHttp2Connection::promisedStream()

◆ receivedHeaders()

HPack::HttpHeader QHttp2Stream::receivedHeaders ( ) const
inlinenoexcept

Returns the headers received from the remote peer, if any.

Definition at line 114 of file qhttp2connection_p.h.

◆ RST_STREAM_code()

quint32 QHttp2Stream::RST_STREAM_code ( ) const
inlinenoexcept

Returns the HTTP/2 error code if the stream was reset by the remote peer.

If the stream was not reset, this function returns 0.

Definition at line 112 of file qhttp2connection_p.h.

◆ sendDATA [1/2]

void QHttp2Stream::sendDATA ( QIODevice * device,
bool endStream )
slot

Sends a DATA frame with the bytes obtained from device.

This function will send as many DATA frames as needed to send all the data from device. If endStream is true, the END_STREAM flag will be set.

device must stay alive for the duration of the upload. A way of doing this is to heap-allocate the device and parent it to the QHttp2Stream.

Definition at line 247 of file qhttp2connection.cpp.

References QObject::connect(), QNonContiguousByteDeviceFactory::create(), QObject::deleteLater(), device, HalfClosedRemote, Open, Q_ASSERT, qCDebug, sendDATA(), and uploadFinished().

Referenced by sendDATA().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sendDATA [2/2]

void QHttp2Stream::sendDATA ( QNonContiguousByteDevice * device,
bool endStream )
slot

Sends a DATA frame with the bytes obtained from device.

This function will send as many DATA frames as needed to send all the data from device. If endStream is true, the END_STREAM flag will be set.

device must stay alive for the duration of the upload. A way of doing this is to heap-allocate the device and parent it to the QHttp2Stream.

Definition at line 274 of file qhttp2connection.cpp.

References QObject::connect(), QObject::destroyed(), device, HalfClosedRemote, Open, Q_ASSERT, qCDebug, and QNonContiguousByteDevice::readyRead().

+ Here is the call graph for this function:

◆ sendHEADERS

bool QHttp2Stream::sendHEADERS ( const HPack::HttpHeader & headers,
bool endStream,
quint8 priority = DefaultPriority )
slot

Sends a HEADERS frame with the given headers and priority.

If endStream is true, the END_STREAM flag will be set, and the stream will be closed for future writes. If the headers are too large, or the stream is not in the correct state, this function will return false. Otherwise, it will return true.

Definition at line 442 of file qhttp2connection.cpp.

References Http2::FrameWriter::addFlag(), Http2::FrameWriter::append(), Http2::Frame::buffer, connection, HalfClosedRemote, QHttp2Connection::maxHeaderListSize(), Open, Http2::FrameWriter::outboundFrame(), Q_ASSERT, qCDebug, socket, Http2::FrameWriter::start(), streamID(), and Http2::FrameWriter::writeHEADERS().

+ Here is the call graph for this function:

◆ sendRST_STREAM

bool QHttp2Stream::sendRST_STREAM ( quint32 errorCode)
slot

Sends a RST_STREAM frame with the given errorCode.

This closes the stream for both sides, any further frames will be dropped.

Returns false if the stream is closed or idle, also if it fails to send the RST_STREAM frame. Otherwise, returns true.

Definition at line 222 of file qhttp2connection.cpp.

References Http2::FrameWriter::append(), Closed, connection, Idle, qCDebug, Http2::FrameWriter::start(), and Http2::FrameWriter::write().

+ Here is the call graph for this function:

◆ sendWINDOW_UPDATE

void QHttp2Stream::sendWINDOW_UPDATE ( quint32 delta)
slot

Sends a WINDOW_UPDATE frame with the given delta.

This increases our receive window size for this stream, allowing the remote peer to send more data.

Definition at line 491 of file qhttp2connection.cpp.

References connection, and streamID().

+ Here is the call graph for this function:

◆ state()

State QHttp2Stream::state ( ) const
inlinenoexcept

Returns the current state of the stream.

See also
stateChanged()

Definition at line 108 of file qhttp2connection_p.h.

◆ stateChanged

void QHttp2Stream::stateChanged ( QHttp2Stream::State newState)
signal

This signal is emitted when the state of the stream changes.

The newState parameter is the new state of the stream.

Examples of this is sending or receiving a frame with the END_STREAM flag. This will transition the stream to the HalfClosedLocal or HalfClosedRemote state, respectively.

See also
state()

◆ streamID()

quint32 QHttp2Stream::streamID ( ) const
inlinenoexcept

Returns the stream ID of this stream.

Definition at line 103 of file qhttp2connection_p.h.

Referenced by sendHEADERS(), and sendWINDOW_UPDATE().

+ Here is the caller graph for this function:

◆ uploadBlocked

void QHttp2Stream::uploadBlocked ( )
signal

This signal is emitted when the stream is unable to send more data because the remote peer's receive window is full.

This is mostly intended for diagnostics as there is no expectation that the user can do anything to react to this.

◆ uploadDeviceError

void QHttp2Stream::uploadDeviceError ( const QString & errorString)
signal

This signal is emitted if the upload device encounters an error while sending data.

The errorString parameter is a human-readable description of the error.

◆ uploadFinished

void QHttp2Stream::uploadFinished ( )
signal

This signal is emitted when the stream has finished sending all the data from the upload device.

If the END_STREAM flag was set for sendData() then the stream will be closed for further writes before this signal is emitted.

Referenced by sendDATA().

+ Here is the caller graph for this function:

◆ wasReset()

bool QHttp2Stream::wasReset ( ) const
inlinenoexcept

Returns true if the stream was reset by the remote peer.

Definition at line 111 of file qhttp2connection_p.h.

Friends And Related Symbol Documentation

◆ QHttp2Connection

friend class QHttp2Connection
friend

Definition at line 145 of file qhttp2connection_p.h.

Member Data Documentation

◆ DefaultPriority

constexpr quint8 QHttp2Stream::DefaultPriority = 127
staticconstexpr

Definition at line 98 of file qhttp2connection_p.h.


The documentation for this class was generated from the following files: