Exemple #1
0
 public Http3RequestStream(Http3InMemory testBase, Http3Connection connection, TestStreamContext testStreamContext, Http3RequestHeaderHandler headerHandler)
     : base(testStreamContext)
 {
     TestBase            = testBase;
     Connection          = connection;
     _streamId           = testStreamContext.StreamId;
     _testStreamContext  = testStreamContext;
     this._headerHandler = headerHandler;
 }
Exemple #2
0
        internal ValueTask <Http3RequestStream> CreateRequestStream(Http3RequestHeaderHandler headerHandler = null)
        {
            if (!_streamContextPool.TryDequeue(out var testStreamContext))
            {
                testStreamContext = new TestStreamContext(canRead: true, canWrite: true, this);
            }
            testStreamContext.Initialize(GetStreamId(0x00));

            var stream = new Http3RequestStream(this, Connection, testStreamContext, headerHandler ?? new Http3RequestHeaderHandler());

            _runningStreams[stream.StreamId] = stream;

            MultiplexedConnectionContext.ToServerAcceptQueue.Writer.TryWrite(stream.StreamContext);
            return(new ValueTask <Http3RequestStream>(stream));
        }
Exemple #3
0
    private Http3RequestStream CreateRequestStreamCore(Http3RequestHeaderHandler headerHandler)
    {
        var requestStreamId = GetStreamId(0x00);

        if (!_streamContextPool.TryDequeue(out var testStreamContext))
        {
            testStreamContext = new TestStreamContext(canRead: true, canWrite: true, this);
        }
        else
        {
            Logger.LogDebug($"Reusing context for request stream {requestStreamId}.");
        }
        testStreamContext.Initialize(requestStreamId);

        return(new Http3RequestStream(this, Connection, testStreamContext, headerHandler ?? new Http3RequestHeaderHandler()));
    }
Exemple #4
0
    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);
Exemple #5
0
    internal async ValueTask <Http3RequestStream> CreateRequestStream(Http3HeadersEnumerator headers, Http3RequestHeaderHandler headerHandler = null, bool endStream = false, TaskCompletionSource tsc = null)
    {
        var stream = CreateRequestStreamCore(headerHandler);

        if (tsc is not null)
        {
            stream.StartStreamDisposeTcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously);
        }

        await stream.SendHeadersAsync(headers, endStream);

        _runningStreams[stream.StreamId] = stream;

        MultiplexedConnectionContext.ToServerAcceptQueue.Writer.TryWrite(stream.StreamContext);

        return(stream);
    }