diff --git a/src/libraries/System.Net.Quic/src/System.Net.Quic.csproj b/src/libraries/System.Net.Quic/src/System.Net.Quic.csproj index 8efdf69f32218b..a48f0af5d0b554 100644 --- a/src/libraries/System.Net.Quic/src/System.Net.Quic.csproj +++ b/src/libraries/System.Net.Quic/src/System.Net.Quic.csproj @@ -22,7 +22,6 @@ - @@ -41,7 +40,6 @@ - @@ -108,6 +106,7 @@ + @@ -119,6 +118,7 @@ + diff --git a/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/Managed/ManagedQuicConnection.Frames.cs b/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/Managed/ManagedQuicConnection.Frames.cs index 8e9c47816cb86b..9f21d094ff75d8 100644 --- a/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/Managed/ManagedQuicConnection.Frames.cs +++ b/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/Managed/ManagedQuicConnection.Frames.cs @@ -12,7 +12,7 @@ namespace System.Net.Quic.Implementations.Managed { - internal partial class ManagedQuicConnection + public partial class ManagedQuicConnection { /// /// Returns true if the frame type requires receiver to sent acknowledgement before the maximum ack delay. diff --git a/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/Managed/ManagedQuicConnection.Packets.cs b/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/Managed/ManagedQuicConnection.Packets.cs index 0db99a75dbb95a..0d2bdf0a365900 100644 --- a/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/Managed/ManagedQuicConnection.Packets.cs +++ b/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/Managed/ManagedQuicConnection.Packets.cs @@ -9,7 +9,7 @@ namespace System.Net.Quic.Implementations.Managed { - internal sealed partial class ManagedQuicConnection + public sealed partial class ManagedQuicConnection { /// /// Current value of the key phase bit for key update detection. diff --git a/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/Managed/ManagedQuicConnection.Recovery.cs b/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/Managed/ManagedQuicConnection.Recovery.cs index 04cc0521eb5969..d394e0382ce484 100644 --- a/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/Managed/ManagedQuicConnection.Recovery.cs +++ b/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/Managed/ManagedQuicConnection.Recovery.cs @@ -7,7 +7,7 @@ namespace System.Net.Quic.Implementations.Managed { - internal partial class ManagedQuicConnection + public partial class ManagedQuicConnection { /// /// Marks the connection data sent in the packet as acknowledged. diff --git a/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/Managed/ManagedQuicConnection.Stream.cs b/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/Managed/ManagedQuicConnection.Stream.cs index b53020b5e7d349..e61d4eae234aa3 100644 --- a/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/Managed/ManagedQuicConnection.Stream.cs +++ b/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/Managed/ManagedQuicConnection.Stream.cs @@ -10,7 +10,7 @@ namespace System.Net.Quic.Implementations.Managed { - internal partial class ManagedQuicConnection + public partial class ManagedQuicConnection { private struct ConnectionFlowControlLimits { diff --git a/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/Managed/ManagedQuicConnection.cs b/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/Managed/ManagedQuicConnection.cs index cb0e9629457cb9..4a6cfd8b7661bf 100644 --- a/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/Managed/ManagedQuicConnection.cs +++ b/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/Managed/ManagedQuicConnection.cs @@ -23,7 +23,7 @@ namespace System.Net.Quic.Implementations.Managed { - internal sealed partial class ManagedQuicConnection : QuicConnectionProvider + public sealed partial class ManagedQuicConnection : QuicConnectionProvider { // This limit should ensure that if we can fit at least an ack frame into the packet, private const int RequiredAllowanceForSending = 2 * ConnectionId.MaximumLength + 40; diff --git a/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/Managed/ManagedQuicImplementationProvider.cs b/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/Managed/ManagedQuicImplementationProvider.cs deleted file mode 100644 index 562ddb8d1c4f02..00000000000000 --- a/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/Managed/ManagedQuicImplementationProvider.cs +++ /dev/null @@ -1,23 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System.Net.Quic.Implementations.Managed.Internal.Tls; - -namespace System.Net.Quic.Implementations.Managed -{ - internal sealed class ManagedQuicImplementationProvider : QuicImplementationProvider - { - public override bool IsSupported => _tlsFactory is TlsFactory || Interop.OpenSslQuic.IsSupported; - - private readonly TlsFactory _tlsFactory; - - public ManagedQuicImplementationProvider(TlsFactory tlsFactory) - { - _tlsFactory = tlsFactory; - } - - internal override QuicListenerProvider CreateListener(QuicListenerOptions options) => new ManagedQuicListener(options, _tlsFactory); - - internal override QuicConnectionProvider CreateConnection(QuicClientConnectionOptions options) => new ManagedQuicConnection(options, _tlsFactory); - } -} diff --git a/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/Managed/ManagedQuicListener.cs b/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/Managed/ManagedQuicListener.cs index 30dbfa0e7f2de2..710e7323bbc3f8 100644 --- a/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/Managed/ManagedQuicListener.cs +++ b/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/Managed/ManagedQuicListener.cs @@ -11,14 +11,20 @@ namespace System.Net.Quic.Implementations.Managed { - internal sealed class ManagedQuicListener : QuicListenerProvider + public sealed class ManagedQuicListener : IAsyncDisposable { + public static bool IsSupported => true; + public static ValueTask ListenAsync(QuicListenerOptions options, CancellationToken cancellationToken = default) + { + return ValueTask.FromResult(new ManagedQuicListener(options)); + } + private bool _disposed; private readonly ChannelReader _acceptQueue; private readonly QuicServerSocketContext _socketContext; - public ManagedQuicListener(QuicListenerOptions options, TlsFactory tlsFactory) + private ManagedQuicListener(QuicListenerOptions options) { var listenEndPoint = options.ListenEndPoint ?? new IPEndPoint(IPAddress.Any, 0); @@ -30,47 +36,26 @@ public ManagedQuicListener(QuicListenerOptions options, TlsFactory tlsFactory) }); _acceptQueue = channel.Reader; - _socketContext = new QuicServerSocketContext(listenEndPoint, options, channel.Writer, tlsFactory); - Start(); - } - - internal override IPEndPoint ListenEndPoint - { - get - { - ThrowIfDisposed(); - return _socketContext.LocalEndPoint; - } + _socketContext = new QuicServerSocketContext(listenEndPoint, options, channel.Writer, OpenSslTlsFactory.Instance); + _socketContext.Start(); } - internal override async ValueTask AcceptConnectionAsync( - CancellationToken cancellationToken = default) - { - ThrowIfDisposed(); - // TODO-RZ: make this non-async when the cast is no longer needed - return await _acceptQueue.ReadAsync(cancellationToken).ConfigureAwait(false); - } + public IPEndPoint ListenEndPoint => _socketContext.LocalEndPoint; - private void Start() + public ValueTask AcceptConnectionAsync(CancellationToken cancellationToken = default) { - ThrowIfDisposed(); + ObjectDisposedException.ThrowIf(_disposed, this); - _socketContext.Start(); + return _acceptQueue.ReadAsync(cancellationToken); } - public override void Dispose() + public ValueTask DisposeAsync() { if (_disposed) return; - _socketContext.StopOrOrphan(); + _disposed = true; - } - private void ThrowIfDisposed() - { - if (_disposed) - { - throw new ObjectDisposedException(nameof(ManagedQuicListener)); - } + _socketContext.StopOrOrphan(); } } }