createWebTransportSession method
Create a WebTransport session by sending an Extended CONNECT request.
Awaits response headers; throws if the status is not 2xx.
Implementation
Future<WebTransportSession> createWebTransportSession(
WebTransportConnectRequest request,
) async {
final extendedRequest = ExtendedConnectRequest(
protocol: 'webtransport',
scheme: 'https',
authority: request.authority,
path: request.path,
headers: {
if (request.origin != null) 'origin': request.origin!,
},
);
final streamId = await sendExtendedConnect(extendedRequest);
// Poll for response headers with a short timeout.
for (var attempt = 0; attempt < 50; attempt++) {
final response = getResponse(streamId);
if (response != null) {
if (response.statusCode < 200 || response.statusCode >= 300) {
throw StateError(
'WebTransport session establishment failed: '
'${response.statusCode}',
);
}
final session = WebTransportSession(this, streamId);
_webTransportSessions[streamId] = session;
return session;
}
await Future<void>.delayed(Duration(milliseconds: 1));
}
throw StateError('Timed out waiting for WebTransport session response');
}