sendHttp3ControlStream method
void
sendHttp3ControlStream()
Implementation
void sendHttp3ControlStream() {
if (h3.controlStreamSent) return;
if (!applicationSecretsDerived || appWrite == null) {
throw StateError('Cannot send HTTP/3 control stream before 1-RTT keys');
}
final settingsPayload = build_settings_frame({
'SETTINGS_QPACK_MAX_TABLE_CAPACITY': 0,
'SETTINGS_QPACK_BLOCKED_STREAMS': 0,
'SETTINGS_ENABLE_CONNECT_PROTOCOL': 1,
'SETTINGS_ENABLE_WEBTRANSPORT': 1,
'SETTINGS_H3_DATAGRAM': 1,
});
final controlStreamBytes = Uint8List.fromList([
...writeVarInt(H3_STREAM_TYPE_CONTROL),
...writeVarInt(H3_FRAME_SETTINGS),
...writeVarInt(settingsPayload.length),
...settingsPayload,
]);
// ✅ Allocate exactly ONE server-initiated unidirectional stream
serverControlStreamId ??= _allocateServerUniStreamId();
sendApplicationStream(
serverControlStreamId!,
controlStreamBytes,
fin: false,
offset: 0,
);
serverControlStreamOffset = controlStreamBytes.length;
h3.controlStreamSent = true;
print(
'✅ HTTP/3 control stream sent '
'(streamId=$serverControlStreamId)',
);
}