public void ConfigureEndpointDefaultsAppliesToNewEndpoints()
        {
            var options = new KestrelServerOptions();

            options.ListenLocalhost(5000);

            Assert.Equal(HttpProtocols.Http1AndHttp2, options.CodeBackedListenOptions[0].Protocols);

            options.ConfigureEndpointDefaults(opt =>
            {
                opt.Protocols = HttpProtocols.Http1;
            });

            options.Listen(new IPEndPoint(IPAddress.Loopback, 5000), opt =>
            {
                // ConfigureEndpointDefaults runs before this callback
                Assert.Equal(HttpProtocols.Http1, opt.Protocols);
            });
            Assert.Equal(HttpProtocols.Http1, options.CodeBackedListenOptions[1].Protocols);

            options.ListenLocalhost(5000, opt =>
            {
                Assert.Equal(HttpProtocols.Http1, opt.Protocols);
                opt.Protocols = HttpProtocols.Http2; // Can be overriden
            });
            Assert.Equal(HttpProtocols.Http2, options.CodeBackedListenOptions[2].Protocols);

            options.ListenAnyIP(5000, opt =>
            {
                opt.Protocols = HttpProtocols.Http2;
            });
            Assert.Equal(HttpProtocols.Http2, options.CodeBackedListenOptions[3].Protocols);
        }
        public async Task DefaultAddressBinderWithoutDevCertButHttpsConfiguredBindsToHttpsPorts()
        {
            var x509Certificate2 = TestResources.GetTestCertificate();
            var logger           = new MockLogger();
            var addresses        = new ServerAddressesFeature();
            var services         = new ServiceCollection();

            services.AddLogging();
            var options = new KestrelServerOptions()
            {
                // This stops the dev cert from being loaded
                IsDevCertLoaded     = true,
                ApplicationServices = services.BuildServiceProvider()
            };

            options.ConfigureEndpointDefaults(e =>
            {
                if (e.IPEndPoint.Port == 5001)
                {
                    e.UseHttps(new HttpsConnectionAdapterOptions {
                        ServerCertificate = x509Certificate2
                    });
                }
            });

            var endpoints = new List <ListenOptions>();
            await AddressBinder.BindAsync(addresses, options, logger, listenOptions =>
            {
                endpoints.Add(listenOptions);
                return(Task.CompletedTask);
            });

            Assert.Contains(endpoints, e => e.IPEndPoint.Port == 5000 && !e.IsTls);
            Assert.Contains(endpoints, e => e.IPEndPoint.Port == 5001 && e.IsTls);
        }
        public void ConfigureEndpointDefaultsAppliesToNewEndpoints()
        {
            var options = new KestrelServerOptions();

            options.ListenLocalhost(5000);

            Assert.True(options.ListenOptions[0].NoDelay);

            options.ConfigureEndpointDefaults(opt =>
            {
                opt.NoDelay = false;
            });

            options.Listen(new IPEndPoint(IPAddress.Loopback, 5000), opt =>
            {
                // ConfigureEndpointDefaults runs before this callback
                Assert.False(opt.NoDelay);
            });
            Assert.False(options.ListenOptions[1].NoDelay);

            options.ListenLocalhost(5000, opt =>
            {
                Assert.False(opt.NoDelay);
                opt.NoDelay = true; // Can be overriden
            });
            Assert.True(options.ListenOptions[2].NoDelay);


            options.ListenAnyIP(5000, opt =>
            {
                Assert.False(opt.NoDelay);
            });
            Assert.False(options.ListenOptions[3].NoDelay);
        }
        /// <summary>
        /// Configures AirDrop defaults for Kestrel.
        /// </summary>
        /// <param name="options">A <see cref="KestrelServerOptions"/> instance to configure.</param>
        /// <param name="cert">An <see cref="X509Certificate2"/> representing the certificate to use for the AirDrop HTTPS endpoint.</param>
        public static void ConfigureAirDropDefaults(this KestrelServerOptions options, X509Certificate2 cert)
        {
            if (cert == null)
            {
                throw new ArgumentNullException(nameof(cert));
            }

            var airDropOptions = options.ApplicationServices.GetRequiredService <IOptions <AirDropOptions> >();

            options.ConfigureEndpointDefaults(
                endpointDefaults =>
            {
                endpointDefaults.UseHttps(cert);
            });

            options.ListenAnyIP(airDropOptions.Value.ListenPort);
        }
 private static void ConfigureKestrel(KestrelServerOptions kestrel)
 {
     kestrel.ConfigureEndpointDefaults(options => options.UseProtocolMultiplexing());
 }