87 using payload_type = std::vector<uchar>;
88 using size_type = payload_type::size_type;
91 FrameWriter(FrameType type, FrameFlags flags, quint32 streamID);
93 Frame &outboundFrame()
98 void setOutboundFrame(Frame &&newFrame);
101 void start(FrameType type, FrameFlags flags, quint32 streamID);
102 void setPayloadSize(quint32 size);
103 void setType(FrameType type);
104 void setFlags(FrameFlags flags);
105 void addFlag(FrameFlag flag);
108 template<
typename ValueType>
109 void append(ValueType val)
111 uchar wired[
sizeof val] = {};
112 qToBigEndian(val, wired);
113 append(wired, wired +
sizeof val);
115 void append(uchar val)
117 frame.buffer.push_back(val);
120 void append(Settings identifier)
122 append(quint16(identifier));
124 void append(
const payload_type &payload)
126 append(&payload[0], &payload[0] + payload.size());
128 void append(QByteArrayView payload)
130 append(
reinterpret_cast<
const uchar *>(payload.begin()),
131 reinterpret_cast<
const uchar *>(payload.end()));
134 void append(
const uchar *begin,
const uchar *end);
137 bool write(QIODevice &socket)
const;
142 bool writeHEADERS(QIODevice &socket, quint32 sizeLimit);
146 bool writeDATA(QIODevice &socket, quint32 sizeLimit,
147 const uchar *src, quint32 size);
149 void updatePayloadSize();