Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }