public MessagePump(IOptions <HttpSysOptions> options, ILoggerFactory loggerFactory, IAuthenticationSchemeProvider authentication) { if (options == null) { throw new ArgumentNullException(nameof(options)); } if (loggerFactory == null) { throw new ArgumentNullException(nameof(loggerFactory)); } _options = options.Value; Listener = new HttpSysListener(_options, loggerFactory); _logger = loggerFactory.CreateLogger <MessagePump>(); if (_options.Authentication.Schemes != AuthenticationSchemes.None) { authentication.AddScheme(new AuthenticationScheme(HttpSysDefaults.AuthenticationScheme, displayName: _options.Authentication.AuthenticationDisplayName, handlerType: typeof(AuthenticationHandler))); } Features = new FeatureCollection(); _serverAddresses = new ServerAddressesFeature(); Features.Set <IServerAddressesFeature>(_serverAddresses); if (HttpApi.IsFeatureSupported(HttpApiTypes.HTTP_FEATURE_ID.HttpFeatureDelegateEx)) { var delegationProperty = new ServerDelegationPropertyFeature(Listener.RequestQueue, _logger); Features.Set <IServerDelegationFeature>(delegationProperty); } _maxAccepts = _options.MaxAccepts; }
static StandardFeatureCollection() { if (ComNetOS.IsWin8orLater) { // Only add the upgrade feature if it stands a chance of working. // SignalR uses the presence of the feature to detect feature support. // https://github.com/aspnet/HttpSysServer/issues/427 _featureFuncLookup[typeof(IHttpUpgradeFeature)] = _identityFunc; // Win8+ _featureFuncLookup[typeof(ITlsHandshakeFeature)] = ctx => ctx.GetTlsHandshakeFeature(); } if (HttpApi.IsFeatureSupported(HttpApiTypes.HTTP_FEATURE_ID.HttpFeatureDelegateEx)) { _featureFuncLookup[typeof(IHttpSysRequestDelegationFeature)] = _identityFunc; } }