onStreamFrame method

void onStreamFrame(
  1. int streamId,
  2. Http3Frame frame
)

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;
  }
}