onStreamFrame method
Process received frames on a QUIC stream.
Implementation
void onStreamFrame(int streamId, Http3Frame frame) {
switch (frame.type) {
case Http3FrameType.headers:
_pendingHeaders[streamId] = HeadersFrame.fromPayload(frame.payload);
if (streamId > _lastAcceptedStreamId) {
_lastAcceptedStreamId = streamId;
}
break;
case Http3FrameType.data:
final dataFrame = DataFrame.fromPayload(frame.payload);
_pendingData.putIfAbsent(streamId, () => []).add(dataFrame);
if (streamId > _lastAcceptedStreamId) {
_lastAcceptedStreamId = streamId;
}
break;
case Http3FrameType.settings:
onSettingsReceived(
Http3SettingsFrame.parsePayload(Uint8List.fromList(frame.payload)),
);
break;
case Http3FrameType.goaway:
_isClosing = true;
break;
case Http3FrameType.pushPromise:
final pushFrame = Http3PushPromiseFrame.parsePayload(
Uint8List.fromList(frame.payload),
);
_pushPromises[pushFrame.pushId] = pushFrame;
break;
case Http3FrameType.cancelPush:
final cancelFrame = Http3CancelPushFrame.parsePayload(
Uint8List.fromList(frame.payload),
);
_pushPromises.remove(cancelFrame.pushId);
break;
case Http3FrameType.maxPushId:
final maxPushIdFrame = Http3MaxPushIdFrame.parsePayload(
Uint8List.fromList(frame.payload),
);
_maxPushId = maxPushIdFrame.pushId;
break;
case Http3FrameType.origin:
final originFrame = OriginFrame.parsePayload(
Uint8List.fromList(frame.payload),
);
onOriginFrameReceived(originFrame);
break;
case Http3FrameType.priorityUpdate:
final priorityFrame = PriorityUpdateFrame.parsePayload(
Uint8List.fromList(frame.payload),
);
onPriorityUpdateReceived(priorityFrame);
break;
case Http3FrameType.priorityUpdatePush:
final priorityPushFrame = PriorityUpdatePushFrame.parsePayload(
Uint8List.fromList(frame.payload),
);
onPriorityUpdateReceived(
PriorityUpdateFrame(
streamId: priorityPushFrame.streamId,
priorityFieldValue: priorityPushFrame.priorityFieldValue,
),
);
break;
default:
// No-op for unhandled frame types.
break;
}
}