84 using payload_type = std::vector<uchar>;
85 using size_type = payload_type::size_type;
88 FrameWriter(FrameType type, FrameFlags flags, quint32 streamID);
90 Frame &outboundFrame()
95 void setOutboundFrame(Frame &&newFrame);
98 void start(FrameType type, FrameFlags flags, quint32 streamID);
99 void setPayloadSize(quint32 size);
100 void setType(FrameType type);
101 void setFlags(FrameFlags flags);
102 void addFlag(FrameFlag flag);
105 template<
typename ValueType>
106 void append(ValueType val)
108 uchar wired[
sizeof val] = {};
109 qToBigEndian(val, wired);
110 append(wired, wired +
sizeof val);
112 void append(uchar val)
114 frame.buffer.push_back(val);
117 void append(Settings identifier)
119 append(quint16(identifier));
121 void append(
const payload_type &payload)
123 append(&payload[0], &payload[0] + payload.size());
125 void append(QByteArrayView payload)
127 append(
reinterpret_cast<
const uchar *>(payload.begin()),
128 reinterpret_cast<
const uchar *>(payload.end()));
131 void append(
const uchar *begin,
const uchar *end);
134 bool write(QIODevice &socket)
const;
139 bool writeHEADERS(QIODevice &socket, quint32 sizeLimit);
143 bool writeDATA(QIODevice &socket, quint32 sizeLimit,
144 const uchar *src, quint32 size);
146 void updatePayloadSize();