// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System.Buffers; using System.Collections.Generic; using System.IO.Pipelines; using System.Net; using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Connections.Features; using Microsoft.AspNetCore.Http.Features; namespace Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions.Internal { public partial class TransportConnection : IHttpConnectionFeature, IConnectionIdFeature, IConnectionTransportFeature, IConnectionItemsFeature, IMemoryPoolFeature, IApplicationTransportFeature, ITransportSchedulerFeature, IConnectionLifetimeFeature, IConnectionHeartbeatFeature, IConnectionLifetimeNotificationFeature { // NOTE: When feature interfaces are added to or removed from this TransportConnection class implementation, // then the list of `features` in the generated code project MUST also be updated. // See also: tools/CodeGenerator/TransportConnectionFeatureCollection.cs string IHttpConnectionFeature.ConnectionId { get => ConnectionId; set => ConnectionId = value; } IPAddress IHttpConnectionFeature.RemoteIpAddress { get => RemoteAddress; set => RemoteAddress = value; } IPAddress IHttpConnectionFeature.LocalIpAddress { get => LocalAddress; set => LocalAddress = value; } int IHttpConnectionFeature.RemotePort { get => RemotePort; set => RemotePort = value; } int IHttpConnectionFeature.LocalPort { get => LocalPort; set => LocalPort = value; } MemoryPool IMemoryPoolFeature.MemoryPool => MemoryPool; IDuplexPipe IConnectionTransportFeature.Transport { get => Transport; set => Transport = value; } IDuplexPipe IApplicationTransportFeature.Application { get => Application; set => Application = value; } IDictionary IConnectionItemsFeature.Items { get => Items; set => Items = value; } PipeScheduler ITransportSchedulerFeature.InputWriterScheduler => InputWriterScheduler; PipeScheduler ITransportSchedulerFeature.OutputReaderScheduler => OutputReaderScheduler; CancellationToken IConnectionLifetimeFeature.ConnectionClosed { get => ConnectionClosed; set => ConnectionClosed = value; } CancellationToken IConnectionLifetimeNotificationFeature.ConnectionClosedRequested { get => ConnectionClosedRequested; set => ConnectionClosedRequested = value; } void IConnectionLifetimeFeature.Abort() => Abort(abortReason: null); void IConnectionLifetimeNotificationFeature.RequestClose() => RequestClose(); void IConnectionHeartbeatFeature.OnHeartbeat(System.Action action, object state) { OnHeartbeat(action, state); } } }