| File: Internal\Http\IHttpRequestLineHandler.cs | Web Access |
| Project: src\aspnetcore\src\Servers\Kestrel\Core\src\Microsoft.AspNetCore.Server.Kestrel.Core.csproj (Microsoft.AspNetCore.Server.Kestrel.Core) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Runtime.CompilerServices; namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http; /// <summary> /// This API supports framework infrastructure and is not intended to be used /// directly from application code. /// </summary> public interface IHttpRequestLineHandler { /// <summary> /// This API supports framework infrastructure and is not intended to be used /// directly from application code. /// </summary> void OnStartLine( HttpVersionAndMethod versionAndMethod, TargetOffsetPathLength targetPath, Span<byte> startLine); } /// <summary> /// This API supports framework infrastructure and is not intended to be used /// directly from application code. /// </summary> public struct HttpVersionAndMethod { private ulong _versionAndMethod; /// <summary> /// This API supports framework infrastructure and is not intended to be used /// directly from application code. /// </summary> public HttpVersionAndMethod(HttpMethod method, int methodEnd) { _versionAndMethod = ((ulong)(uint)methodEnd << 32) | ((ulong)method << 8); } /// <summary> /// This API supports framework infrastructure and is not intended to be used /// directly from application code. /// </summary> public HttpVersion Version { get => (HttpVersion)(sbyte)(byte)_versionAndMethod; set => _versionAndMethod = (_versionAndMethod & ~0xFFul) | (byte)value; } /// <summary> /// This API supports framework infrastructure and is not intended to be used /// directly from application code. /// </summary> public HttpMethod Method => (HttpMethod)(byte)(_versionAndMethod >> 8); /// <summary> /// This API supports framework infrastructure and is not intended to be used /// directly from application code. /// </summary> public int MethodEnd => (int)(uint)(_versionAndMethod >> 32); } /// <summary> /// This API supports framework infrastructure and is not intended to be used /// directly from application code. /// </summary> public readonly struct TargetOffsetPathLength { private readonly ulong _targetOffsetPathLength; /// <summary> /// This API supports framework infrastructure and is not intended to be used /// directly from application code. /// </summary> [MethodImpl(MethodImplOptions.AggressiveInlining)] public TargetOffsetPathLength(int offset, int length, bool isEncoded) { if (isEncoded) { length = -length; } _targetOffsetPathLength = ((ulong)offset << 32) | (uint)length; } /// <summary> /// This API supports framework infrastructure and is not intended to be used /// directly from application code. /// </summary> public int Offset { [MethodImpl(MethodImplOptions.AggressiveInlining)] get { return (int)(_targetOffsetPathLength >> 32); } } /// <summary> /// This API supports framework infrastructure and is not intended to be used /// directly from application code. /// </summary> public int Length { [MethodImpl(MethodImplOptions.AggressiveInlining)] get { var length = (int)_targetOffsetPathLength; if (length < 0) { length = -length; } return length; } } /// <summary> /// This API supports framework infrastructure and is not intended to be used /// directly from application code. /// </summary> public bool IsEncoded { [MethodImpl(MethodImplOptions.AggressiveInlining)] get { return (int)_targetOffsetPathLength < 0 ? true : false; } } }