37 enum State { Idle, Open, HalfClosed, Closed };
38 H2Stream(quint32 streamId, qint32 initialWindowSize,
ProtoRequestHttp2 *protoRequestH2);
41 qint64
doWrite(
const char *data, qint64 len)
override final;
49 QEventLoop *loop =
nullptr;
53 qint32 windowSize = 65535;
54 qint64 contentLength = -1;
56 qint64 consumedData = 0;
61class ProtoRequestHttp2 final :
public ProtocolData
66 ~ProtoRequestHttp2()
override;
70 inline void resetData()
override final
72 ProtocolData::resetData();
79 for (
const auto &stream : std::as_const(streams)) {
83 delete stream->context;
89 headersBuffer.clear();
91 streamForContinuation = 0;
94 settingsInitialWindowSize = 65535;
98 quint32 stream_id = 0;
101 QByteArray headersBuffer;
102 HPack *hpack =
nullptr;
103 quint64 streamForContinuation = 0;
104 quint32 maxStreamId = 0;
106 qint32 windowSize = 65535;
107 qint32 settingsInitialWindowSize = 65535;
108 quint32 settingsMaxFrameSize = 16384;
109 quint8 processing = 0;
112 QHash<quint32, H2Stream *> streams;
115class ProtocolHttp2 final :
public Protocol
118 explicit ProtocolHttp2(
Server *server);
119 ~ProtocolHttp2()
override;
121 Type type()
const override;
135 int sendGoAway(QIODevice *io, quint32 lastStreamId, quint32 error)
const;
136 int sendRstStream(QIODevice *io, quint32 streamId, quint32 error)
const;
137 int sendSettings(QIODevice *io,
const std::vector<std::pair<quint16, quint32>> &settings)
const;
138 int sendSettingsAck(QIODevice *io)
const;
139 int sendPing(QIODevice *io, quint8 flags,
const char *data =
nullptr, qint32 dataLen = 0)
const;
140 int sendData(QIODevice *io,
144 qint32 dataLen)
const;
145 int sendFrame(QIODevice *io,
148 quint32 streamId = 0,
149 const char *data =
nullptr,
150 qint32 dataLen = 0)
const;
158 quint32 m_maxFrameSize;
159 qint32 m_headerTableSize;