public void LocalHostListenOptionsClonesConnectionMiddleware() { var localhostListenOptions = new LocalhostListenOptions(1004); localhostListenOptions.ConnectionAdapters.Add(new PassThroughConnectionAdapter()); var serviceProvider = new ServiceCollection().BuildServiceProvider(); localhostListenOptions.KestrelServerOptions = new KestrelServerOptions { ApplicationServices = serviceProvider }; var middlewareRan = false; localhostListenOptions.Use(next => { middlewareRan = true; return(context => Task.CompletedTask); }); var clone = localhostListenOptions.Clone(IPAddress.IPv6Loopback); var app = clone.Build(); // Execute the delegate app(null); Assert.True(middlewareRan); Assert.NotNull(clone.KestrelServerOptions); Assert.NotNull(serviceProvider); Assert.Same(serviceProvider, clone.ApplicationServices); Assert.Single(clone.ConnectionAdapters); }
internal static ListenOptions ParseAddress(string address) { var parsedAddress = ServerAddress.FromPath(address); ListenOptions options = null; if (parsedAddress.IsUnixPipe) { options = new ListenOptions(parsedAddress.UnixPipePath); } else if (string.Equals(parsedAddress.Host, "localhost", StringComparison.OrdinalIgnoreCase)) { // "localhost" for both IPv4 and IPv6 can't be represented as an IPEndPoint. options = new LocalhostListenOptions(parsedAddress.Port); } else if (TryCreateIPEndPoint(parsedAddress, out var endpoint)) { options = new ListenOptions(endpoint); } else { // when address is 'http://hostname:port', 'http://*:port', or 'http://+:port' options = new AnyIPListenOptions(parsedAddress.Port); } return(options); }
public void ListenLocalhost(int port, Action <ListenOptions> configure) { if (configure == null) { throw new ArgumentNullException(nameof(configure)); } var listenOptions = new LocalhostListenOptions(port); ApplyEndpointDefaults(listenOptions); configure(listenOptions); ListenOptions.Add(listenOptions); }
internal static ListenOptions ParseAddress(string address, KestrelServerOptions serverOptions, IDefaultHttpsProvider defaultHttpsProvider) { var parsedAddress = ServerAddress.FromUrl(address); var https = false; if (parsedAddress.Scheme.Equals("https", StringComparison.OrdinalIgnoreCase)) { https = true; } else if (!parsedAddress.Scheme.Equals("http", StringComparison.OrdinalIgnoreCase)) { throw new InvalidOperationException(CoreStrings.FormatUnsupportedAddressScheme(address)); } if (!string.IsNullOrEmpty(parsedAddress.PathBase)) { throw new InvalidOperationException(CoreStrings.FormatConfigurePathBaseFromMethodCall($"{nameof(IApplicationBuilder)}.UsePathBase()")); } ListenOptions options = null; if (parsedAddress.IsUnixPipe) { options = new ListenOptions(parsedAddress.UnixPipePath); } else if (string.Equals(parsedAddress.Host, "localhost", StringComparison.OrdinalIgnoreCase)) { // "localhost" for both IPv4 and IPv6 can't be represented as an IPEndPoint. options = new LocalhostListenOptions(parsedAddress.Port); } else if (TryCreateIPEndPoint(parsedAddress, out var endpoint)) { options = new ListenOptions(endpoint); } else { // when address is 'http://hostname:port', 'http://*:port', or 'http://+:port' options = new AnyIPListenOptions(parsedAddress.Port); } if (https) { options.KestrelServerOptions = serverOptions; defaultHttpsProvider.ConfigureHttps(options); } return(options); }
internal static ListenOptions.ListenOptions ParseAddress(string address, out bool https) { var parsedAddress = BindingAddress.Parse(address); https = false; if (parsedAddress.Scheme.Equals("https", StringComparison.OrdinalIgnoreCase)) { https = true; } else if (!parsedAddress.Scheme.Equals("http", StringComparison.OrdinalIgnoreCase)) { throw new InvalidOperationException($"Unrecognized scheme in server address '{address}'. Only 'http://' is supported."); } if (!string.IsNullOrEmpty(parsedAddress.PathBase)) { throw new InvalidOperationException($"A path base can only be configured using {nameof(IApplicationBuilder)}.UsePathBase()."); } ListenOptions.ListenOptions options = null; if (parsedAddress.IsUnixPipe) { options = new ListenOptions.ListenOptions(parsedAddress.UnixPipePath); } else if (string.Equals(parsedAddress.Host, "localhost", StringComparison.OrdinalIgnoreCase)) { // "localhost" for both IPv4 and IPv6 can't be represented as an IPEndPoint. options = new LocalhostListenOptions(parsedAddress.Port); } else if (TryCreateIPEndPoint(parsedAddress, out var endpoint)) { options = new ListenOptions.ListenOptions(endpoint); } else { // when address is 'http://hostname:port', 'http://*:port', or 'http://+:port' options = new AnyIPListenOptions(parsedAddress.Port); } return(options); }