/
githubmirror
/
aspnetcore
Обзор
Документация
Войти
/
githubmirror
/
aspnetcore
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Servers/Kestrel/samples/http2cat/Program.cs
81 строка
3 KB
Andrew Casey
Fix http2cat sample (#50863)
22 сен 2023, 02:47
Не верифицирован
22 сен 2023, 02:47
46562b1
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Diagnostics; using System.Text; using System.Threading.Tasks; using Microsoft.AspNetCore.Http2Cat; using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace http2cat; public class Program { public static async Task Main(string[] args) { using var host = new HostBuilder() .ConfigureLogging(loggingBuilder => { loggingBuilder.AddConsole(); }) .UseHttp2Cat("https://localhost:5001", RunTestCase) .Build(); await host.RunAsync(); } internal static async Task RunTestCase(Http2Utilities h2Connection) { // Kestrel sends a fourth setting, SETTINGS_ENABLE_CONNECT_PROTOCOL await h2Connection.InitializeConnectionAsync(expectedSettingsCount: 4); h2Connection.Logger.LogInformation("Initialized http2 connection. Starting stream 1."); await h2Connection.StartStreamAsync(1, Http2Utilities.BrowserRequestHeaders, endStream: true); var headersFrame = await h2Connection.ReceiveFrameAsync(); Trace.Assert(headersFrame.Type == Http2FrameType.HEADERS, headersFrame.Type.ToString()); Trace.Assert((headersFrame.Flags & (byte)Http2HeadersFrameFlags.END_HEADERS) != 0); Trace.Assert((headersFrame.Flags & (byte)Http2HeadersFrameFlags.END_STREAM) == 0); h2Connection.Logger.LogInformation("Received headers in a single frame."); var decodedHeaders = h2Connection.DecodeHeaders(headersFrame); foreach (var header in decodedHeaders) { h2Connection.Logger.LogInformation($"{header.Key}: {header.Value}"); } var dataFrame = await h2Connection.ReceiveFrameAsync(); Trace.Assert(dataFrame.Type == Http2FrameType.DATA); Trace.Assert((dataFrame.Flags & (byte)Http2DataFrameFlags.END_STREAM) == 0); h2Connection.Logger.LogInformation("Received data in a single frame."); h2Connection.Logger.LogInformation(Encoding.UTF8.GetString(dataFrame.Payload.ToArray())); var trailersFrame = await h2Connection.ReceiveFrameAsync(); Trace.Assert(trailersFrame.Type == Http2FrameType.HEADERS); Trace.Assert((trailersFrame.Flags & (byte)Http2DataFrameFlags.END_STREAM) == 1); h2Connection.Logger.LogInformation("Received trailers in a single frame."); h2Connection.ResetHeaders(); var decodedTrailers = h2Connection.DecodeHeaders(trailersFrame); foreach (var header in decodedTrailers) { h2Connection.Logger.LogInformation($"{header.Key}: {header.Value}"); } await h2Connection.StopConnectionAsync(expectedLastStreamId: 1, ignoreNonGoAwayFrames: false); h2Connection.Logger.LogInformation("Connection stopped."); } }