internal async Task <Http3FrameWithPayload> ReceiveFrameAsync(uint maxFrameSize = Http3PeerSettings.DefaultMaxFrameSize) { var frame = new Http3FrameWithPayload(); while (true) { var result = await _pair.Application.Input.ReadAsync().AsTask().DefaultTimeout(); var buffer = result.Buffer; var consumed = buffer.Start; var examined = buffer.Start; var copyBuffer = buffer; try { Assert.True(buffer.Length > 0); if (Http3FrameReader.TryReadFrame(ref buffer, frame, maxFrameSize, out var framePayload)) { consumed = examined = framePayload.End; frame.Payload = framePayload.ToArray(); return(frame); } else { examined = buffer.End; } if (result.IsCompleted) { throw new IOException("The reader completed without returning a frame."); } }
internal void VerifyGoAway(Http3FrameWithPayload frame, long expectedLastStreamId, Http3ErrorCode expectedErrorCode) { Assert.Equal(Http3FrameType.GoAway, frame.Type); var payload = frame.Payload; Assert.True(VariableLengthIntegerHelper.TryRead(payload.Span, out var streamId, out var _)); Assert.Equal(expectedLastStreamId, streamId); }
internal void VerifyGoAway(Http3FrameWithPayload frame, long expectedLastStreamId) { Http3InMemory.AssertFrameType(frame.Type, Http3FrameType.GoAway); var payload = frame.Payload; if (!VariableLengthIntegerHelper.TryRead(payload.Span, out var streamId, out var _)) { throw new InvalidOperationException("Failed to read GO_AWAY stream ID."); } if (streamId != expectedLastStreamId) { throw new InvalidOperationException($"Expected stream ID {expectedLastStreamId}, got {streamId}."); } }
public virtual void GlobalSetup() { _headerHandler = new Http3RequestHeaderHandler(); _requestHeadersEnumerator = new Http3HeadersEnumerator(); _httpFrame = new Http3FrameWithPayload(); _httpRequestHeaders = new HttpRequestHeaders(); _httpRequestHeaders[InternalHeaderNames.Method] = new StringValues("GET"); _httpRequestHeaders[InternalHeaderNames.Path] = new StringValues("/"); _httpRequestHeaders[InternalHeaderNames.Scheme] = new StringValues("http"); _httpRequestHeaders[InternalHeaderNames.Authority] = new StringValues("localhost:80"); var serviceContext = TestContextFactory.CreateServiceContext( serverOptions: new KestrelServerOptions(), dateHeaderValueManager: new DateHeaderValueManager(), systemClock: new MockSystemClock()); serviceContext.DateHeaderValueManager.OnHeartbeat(default);