From 2b65b815de7fb245fcb788218fc52f7a6c9e3ef3 Mon Sep 17 00:00:00 2001 From: wolfkor Date: Sun, 13 Apr 2025 20:30:41 +0200 Subject: [PATCH 1/2] fix proxy with TLS scenario ba SocketConnectionFactory (#802) (#804) --- src/NATS.Client.Core/NatsConnection.cs | 16 ++++++++++++++-- src/NATS.Client.Core/NatsOpts.cs | 2 ++ src/NATS.Client.Core/{Internal => }/NatsUri.cs | 4 ++-- 3 files changed, 18 insertions(+), 4 deletions(-) rename src/NATS.Client.Core/{Internal => }/NatsUri.cs (96%) diff --git a/src/NATS.Client.Core/NatsConnection.cs b/src/NATS.Client.Core/NatsConnection.cs index 9e4b99537..8d55967c0 100644 --- a/src/NATS.Client.Core/NatsConnection.cs +++ b/src/NATS.Client.Core/NatsConnection.cs @@ -1,3 +1,4 @@ +using System; using System.Buffers; using System.Diagnostics; using System.Threading.Channels; @@ -335,7 +336,12 @@ private async ValueTask InitialConnectAsync() } _logger.LogInformation(NatsLogEvents.Connection, "Try to connect NATS {0}", uri); - if (uri.IsWebSocket) + if (Opts.SocketConnectionFactory != null) + { + _logger.LogInformation(NatsLogEvents.Connection, "Try to connect using SocketConnectionFactory {0}", uri); + _socket = await Opts.SocketConnectionFactory(uri, Opts, _disposedCancellationTokenSource.Token).ConfigureAwait(false); + } + else if (uri.IsWebSocket) { var conn = new WebSocketConnection(); await conn.ConnectAsync(uri, Opts).ConfigureAwait(false); @@ -641,7 +647,13 @@ private async void ReconnectLoop() } _logger.LogInformation(NatsLogEvents.Connection, "Tried to connect NATS {Url} [{ReconnectCount}]", url, reconnectCount); - if (url.IsWebSocket) + + if (Opts.SocketConnectionFactory != null) + { + _logger.LogInformation(NatsLogEvents.Connection, "Try to connect using SocketConnectionFactory {Url} [{ReconnectCount}]", url, reconnectCount); + _socket = await Opts.SocketConnectionFactory(url, Opts, _disposedCancellationTokenSource.Token).ConfigureAwait(false); + } + else if (url.IsWebSocket) { _logger.LogDebug(NatsLogEvents.Connection, "Trying to reconnect using WebSocket {Url} [{ReconnectCount}]", url, reconnectCount); var conn = new WebSocketConnection(); diff --git a/src/NATS.Client.Core/NatsOpts.cs b/src/NATS.Client.Core/NatsOpts.cs index e99530c80..1ba71cf0c 100644 --- a/src/NATS.Client.Core/NatsOpts.cs +++ b/src/NATS.Client.Core/NatsOpts.cs @@ -142,6 +142,8 @@ public sealed record NatsOpts /// public BoundedChannelFullMode SubPendingChannelFullMode { get; init; } = BoundedChannelFullMode.DropNewest; + public Func>? SocketConnectionFactory { get; set; } = null; + internal NatsUri[] GetSeedUris(bool suppressRandomization = false) { var urls = Url.Split(','); diff --git a/src/NATS.Client.Core/Internal/NatsUri.cs b/src/NATS.Client.Core/NatsUri.cs similarity index 96% rename from src/NATS.Client.Core/Internal/NatsUri.cs rename to src/NATS.Client.Core/NatsUri.cs index 02144d50c..62ad378b0 100644 --- a/src/NATS.Client.Core/Internal/NatsUri.cs +++ b/src/NATS.Client.Core/NatsUri.cs @@ -1,6 +1,6 @@ -namespace NATS.Client.Core.Internal; +namespace NATS.Client.Core; -internal sealed class NatsUri : IEquatable +public sealed class NatsUri : IEquatable { public const string DefaultScheme = "nats"; From 51f097c8d65bc89abc6afec952a6584c229ce484 Mon Sep 17 00:00:00 2001 From: wolfkor Date: Mon, 14 Apr 2025 00:10:36 +0200 Subject: [PATCH 2/2] init (#826) --- src/NATS.Client.Core/NatsConnection.cs | 1 - src/NATS.Client.Core/NatsOpts.cs | 4 +--- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/NATS.Client.Core/NatsConnection.cs b/src/NATS.Client.Core/NatsConnection.cs index 8d55967c0..585f8204c 100644 --- a/src/NATS.Client.Core/NatsConnection.cs +++ b/src/NATS.Client.Core/NatsConnection.cs @@ -1,4 +1,3 @@ -using System; using System.Buffers; using System.Diagnostics; using System.Threading.Channels; diff --git a/src/NATS.Client.Core/NatsOpts.cs b/src/NATS.Client.Core/NatsOpts.cs index 1ba71cf0c..15576c254 100644 --- a/src/NATS.Client.Core/NatsOpts.cs +++ b/src/NATS.Client.Core/NatsOpts.cs @@ -1,9 +1,7 @@ -using System.Net.WebSockets; using System.Text; using System.Threading.Channels; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; -using NATS.Client.Core.Internal; #if NETSTANDARD using Random = NATS.Client.Core.Internal.NetStandardExtensions.Random; #endif @@ -142,7 +140,7 @@ public sealed record NatsOpts /// public BoundedChannelFullMode SubPendingChannelFullMode { get; init; } = BoundedChannelFullMode.DropNewest; - public Func>? SocketConnectionFactory { get; set; } = null; + public Func>? SocketConnectionFactory { get; init; } = null; internal NatsUri[] GetSeedUris(bool suppressRandomization = false) {