85 using payload_type = std::vector<uchar>;
86 using size_type = payload_type::size_type;
89 FrameWriter(FrameType type, FrameFlags flags, quint32 streamID);
91 Frame &outboundFrame()
96 void setOutboundFrame(Frame &&newFrame);
99 void start(FrameType type, FrameFlags flags, quint32 streamID);
100 void setPayloadSize(quint32 size);
101 void setType(FrameType type);
102 void setFlags(FrameFlags flags);
103 void addFlag(FrameFlag flag);
106 template<
typename ValueType>
107 void append(ValueType val)
109 uchar wired[
sizeof val] = {};
110 qToBigEndian(val, wired);
111 append(wired, wired +
sizeof val);
113 void append(uchar val)
115 frame.buffer.push_back(val);
118 void append(Settings identifier)
120 append(quint16(identifier));
122 void append(
const payload_type &payload)
124 append(&payload[0], &payload[0] + payload.size());
126 void append(QByteArrayView payload)
128 append(
reinterpret_cast<
const uchar *>(payload.begin()),
129 reinterpret_cast<
const uchar *>(payload.end()));
132 void append(
const uchar *begin,
const uchar *end);
135 bool write(QIODevice &socket)
const;
140 bool writeHEADERS(QIODevice &socket, quint32 sizeLimit);
144 bool writeDATA(QIODevice &socket, quint32 sizeLimit,
145 const uchar *src, quint32 size);
147 void updatePayloadSize();