/// <summary> /// Starts the listener and request processing threads. /// </summary> internal void Start(Mono.Net.HttpListener listener, AppFunc appFunc, IList<IDictionary<string, object>> addresses, IDictionary<string, object> capabilities) { Contract.Assert(_appFunc == null); // Start should only be called once Contract.Assert(listener != null); Contract.Assert(appFunc != null); Contract.Assert(addresses != null); _listener = listener; _appFunc = appFunc; _basePaths = new List<string>(); foreach (var address in addresses) { // build url from parts string scheme = address.Get<string>("scheme") ?? Uri.UriSchemeHttp; string host = address.Get<string>("host") ?? "localhost"; string port = address.Get<string>("port") ?? "5000"; string path = address.Get<string>("path") ?? string.Empty; // if port is present, add delimiter to value before concatenation if (!string.IsNullOrWhiteSpace(port)) { port = ":" + port; } // Assume http(s)://+:9090/BasePath/, including the first path slash. May be empty. Must end with a slash. if (!path.EndsWith("/", StringComparison.Ordinal)) { // Http.Sys requires that the URL end in a slash path += "/"; } _basePaths.Add(path); // add a server for each url string url = scheme + "://" + host + port + path; _listener.Prefixes.Add(url); } _capabilities = capabilities; if (!_listener.IsListening) { _listener.Start(); } OffloadStartNextRequest(); }
private bool PropertiesTryRemove(string key) { switch (key.Length) { case 12: if (((_flag0 & 0x1u) != 0) && string.Equals(key, "owin.Version", StringComparison.Ordinal)) { _flag0 &= ~0x1u; _OwinVersion = default(string); // This can return true incorrectly for values that delayed initialization may determine are not actually present. return true; } if (((_flag0 & 0x8000u) != 0) && string.Equals(key, "host.AppName", StringComparison.Ordinal)) { _flag0 &= ~0x8000u; _HostAppName = default(string); // This can return true incorrectly for values that delayed initialization may determine are not actually present. return true; } if (((_flag0 & 0x10000u) != 0) && string.Equals(key, "host.AppMode", StringComparison.Ordinal)) { _flag0 &= ~0x10000u; _HostAppMode = default(string); // This can return true incorrectly for values that delayed initialization may determine are not actually present. return true; } break; case 18: if (((_flag0 & 0x2u) != 0) && string.Equals(key, "owin.CallCancelled", StringComparison.Ordinal)) { _initFlag0 &= ~0x2u; _flag0 &= ~0x2u; _CallCancelled = default(CancellationToken); // This can return true incorrectly for values that delayed initialization may determine are not actually present. return true; } if (((_flag0 & 0x8u) != 0) && string.Equals(key, "owin.RequestMethod", StringComparison.Ordinal)) { _flag0 &= ~0x8u; _RequestMethod = default(string); // This can return true incorrectly for values that delayed initialization may determine are not actually present. return true; } if (((_flag0 & 0x10u) != 0) && string.Equals(key, "owin.RequestScheme", StringComparison.Ordinal)) { _flag0 &= ~0x10u; _RequestScheme = default(string); // This can return true incorrectly for values that delayed initialization may determine are not actually present. return true; } break; case 20: if (((_flag0 & 0x4u) != 0) && string.Equals(key, "owin.RequestProtocol", StringComparison.Ordinal)) { _flag0 &= ~0x4u; _RequestProtocol = default(string); // This can return true incorrectly for values that delayed initialization may determine are not actually present. return true; } if (((_flag0 & 0x20u) != 0) && string.Equals(key, "owin.RequestPathBase", StringComparison.Ordinal)) { _flag0 &= ~0x20u; _RequestPathBase = default(string); // This can return true incorrectly for values that delayed initialization may determine are not actually present. return true; } if (((_flag0 & 0x1000u) != 0) && string.Equals(key, "owin.ResponseHeaders", StringComparison.Ordinal)) { _flag0 &= ~0x1000u; _ResponseHeaders = default(IDictionary<string, string[]>); // This can return true incorrectly for values that delayed initialization may determine are not actually present. return true; } break; case 16: if (((_flag0 & 0x40u) != 0) && string.Equals(key, "owin.RequestPath", StringComparison.Ordinal)) { _flag0 &= ~0x40u; _RequestPath = default(string); // This can return true incorrectly for values that delayed initialization may determine are not actually present. return true; } if (((_flag0 & 0x200u) != 0) && string.Equals(key, "owin.RequestBody", StringComparison.Ordinal)) { _initFlag0 &= ~0x200u; _flag0 &= ~0x200u; _RequestBody = default(Stream); // This can return true incorrectly for values that delayed initialization may determine are not actually present. return true; } if (((_flag0 & 0x4000u) != 0) && string.Equals(key, "host.TraceOutput", StringComparison.Ordinal)) { _flag0 &= ~0x4000u; _HostTraceOutput = default(TextWriter); // This can return true incorrectly for values that delayed initialization may determine are not actually present. return true; } if (((_flag0 & 0x1000000u) != 0) && string.Equals(key, "server.LocalPort", StringComparison.Ordinal)) { _initFlag0 &= ~0x1000000u; _flag0 &= ~0x1000000u; _ServerLocalPort = default(string); // This can return true incorrectly for values that delayed initialization may determine are not actually present. return true; } if (((_flag0 & 0x20000000u) != 0) && string.Equals(key, "websocket.Accept", StringComparison.Ordinal)) { _initFlag0 &= ~0x20000000u; _flag0 &= ~0x20000000u; _WebSocketAccept = default(WebSocketAccept); // This can return true incorrectly for values that delayed initialization may determine are not actually present. return true; } break; case 23: if (((_flag0 & 0x80u) != 0) && string.Equals(key, "owin.RequestQueryString", StringComparison.Ordinal)) { _flag0 &= ~0x80u; _RequestQueryString = default(string); // This can return true incorrectly for values that delayed initialization may determine are not actually present. return true; } if (((_flag0 & 0x400u) != 0) && string.Equals(key, "owin.ResponseStatusCode", StringComparison.Ordinal)) { _flag0 &= ~0x400u; _ResponseStatusCode = default(int); // This can return true incorrectly for values that delayed initialization may determine are not actually present. return true; } if (((_flag0 & 0x80000u) != 0) && string.Equals(key, "server.OnSendingHeaders", StringComparison.Ordinal)) { _flag0 &= ~0x80000u; _OnSendingHeaders = default(Action<Action<object>, object>); // This can return true incorrectly for values that delayed initialization may determine are not actually present. return true; } if (((_flag0 & 0x10000000u) != 0) && string.Equals(key, "ssl.LoadClientCertAsync", StringComparison.Ordinal)) { _flag0 &= ~0x10000000u; _LoadClientCert = default(Func<Task>); // This can return true incorrectly for values that delayed initialization may determine are not actually present. return true; } break; case 19: if (((_flag0 & 0x100u) != 0) && string.Equals(key, "owin.RequestHeaders", StringComparison.Ordinal)) { _flag0 &= ~0x100u; _RequestHeaders = default(IDictionary<string, string[]>); // This can return true incorrectly for values that delayed initialization may determine are not actually present. return true; } if (((_flag0 & 0x20000u) != 0) && string.Equals(key, "host.OnAppDisposing", StringComparison.Ordinal)) { _flag0 &= ~0x20000u; _OnAppDisposing = default(CancellationToken); // This can return true incorrectly for values that delayed initialization may determine are not actually present. return true; } if (((_flag0 & 0x100000u) != 0) && string.Equals(key, "server.Capabilities", StringComparison.Ordinal)) { _flag0 &= ~0x100000u; _ServerCapabilities = default(IDictionary<string, object>); // This can return true incorrectly for values that delayed initialization may determine are not actually present. return true; } break; case 25: if (((_flag0 & 0x800u) != 0) && string.Equals(key, "owin.ResponseReasonPhrase", StringComparison.Ordinal)) { _flag0 &= ~0x800u; _ResponseReasonPhrase = default(string); // This can return true incorrectly for values that delayed initialization may determine are not actually present. return true; } break; case 17: if (((_flag0 & 0x2000u) != 0) && string.Equals(key, "owin.ResponseBody", StringComparison.Ordinal)) { _flag0 &= ~0x2000u; _ResponseBody = default(Stream); // This can return true incorrectly for values that delayed initialization may determine are not actually present. return true; } if (((_flag0 & 0x400000u) != 0) && string.Equals(key, "server.RemotePort", StringComparison.Ordinal)) { _initFlag0 &= ~0x400000u; _flag0 &= ~0x400000u; _ServerRemotePort = default(string); // This can return true incorrectly for values that delayed initialization may determine are not actually present. return true; } break; case 11: if (((_flag0 & 0x40000u) != 0) && string.Equals(key, "server.User", StringComparison.Ordinal)) { _flag0 &= ~0x40000u; _ServerUser = default(IPrincipal); // This can return true incorrectly for values that delayed initialization may determine are not actually present. return true; } break; case 22: if (((_flag0 & 0x200000u) != 0) && string.Equals(key, "server.RemoteIpAddress", StringComparison.Ordinal)) { _initFlag0 &= ~0x200000u; _flag0 &= ~0x200000u; _ServerRemoteIpAddress = default(string); // This can return true incorrectly for values that delayed initialization may determine are not actually present. return true; } break; case 21: if (((_flag0 & 0x800000u) != 0) && string.Equals(key, "server.LocalIpAddress", StringComparison.Ordinal)) { _initFlag0 &= ~0x800000u; _flag0 &= ~0x800000u; _ServerLocalIpAddress = default(string); // This can return true incorrectly for values that delayed initialization may determine are not actually present. return true; } if (((_flag0 & 0x4000000u) != 0) && string.Equals(key, "ssl.ClientCertificate", StringComparison.Ordinal)) { _initFlag0 &= ~0x4000000u; _flag0 &= ~0x4000000u; _ClientCert = default(X509Certificate); // This can return true incorrectly for values that delayed initialization may determine are not actually present. return true; } if (((_flag0 & 0x80000000u) != 0) && string.Equals(key, "Mono.Net.HttpListener", StringComparison.Ordinal)) { _flag0 &= ~0x80000000u; _Listener = default(Mono.Net.HttpListener); // This can return true incorrectly for values that delayed initialization may determine are not actually present. return true; } break; case 14: if (((_flag0 & 0x2000000u) != 0) && string.Equals(key, "server.IsLocal", StringComparison.Ordinal)) { _initFlag0 &= ~0x2000000u; _flag0 &= ~0x2000000u; _ServerIsLocal = default(bool); // This can return true incorrectly for values that delayed initialization may determine are not actually present. return true; } break; case 27: if (((_flag0 & 0x8000000u) != 0) && string.Equals(key, "ssl.ClientCertificateErrors", StringComparison.Ordinal)) { _initFlag0 &= ~0x8000000u; _flag0 &= ~0x8000000u; _ClientCertErrors = default(Exception); // This can return true incorrectly for values that delayed initialization may determine are not actually present. return true; } break; case 28: if (((_flag0 & 0x40000000u) != 0) && string.Equals(key, "Mono.Net.HttpListenerContext", StringComparison.Ordinal)) { _flag0 &= ~0x40000000u; _RequestContext = default(HttpListenerContext); // This can return true incorrectly for values that delayed initialization may determine are not actually present. return true; } break; case 49: if (((_flag1 & 0x1u) != 0) && string.Equals(key, "Microsoft.Owin.Host.HttpListener.OwinHttpListener", StringComparison.Ordinal)) { _flag1 &= ~0x1u; _OwinHttpListener = default(OwinHttpListener); // This can return true incorrectly for values that delayed initialization may determine are not actually present. return true; } break; } return false; }
internal DisconnectHandler(Mono.Net.HttpListener listener) { _connectionCancellationTokens = new ConcurrentDictionary<ulong, Lazy<CancellationToken>>(); _listener = listener; }
/// <summary> /// Creates a listener wrapper that can be configured by the user before starting. /// </summary> internal OwinHttpListener() { _listener = new Mono.Net.HttpListener(); SetPumpLimits(DefaultMaxAccepts, DefaultMaxRequests); }
public HttpListener(Mono.Net.HttpListener listener) { InnerListener = listener; }
/// <summary> /// Creates a listener wrapper that can be configured by the user before starting. /// </summary> internal OwinHttpListener() { _listener = new Mono.Net.HttpListener(); }
HttpListener SearchListener(Uri uri, out ListenerPrefix prefix) { prefix = null; if (uri == null) { return(null); } string host = uri.Host; int port = uri.Port; string path = HttpUtility.UrlDecode(uri.AbsolutePath); string path_slash = path [path.Length - 1] == '/' ? path : path + "/"; HttpListener best_match = null; int best_length = -1; if (host != null && host != "") { Hashtable p_ro = prefixes; foreach (ListenerPrefix p in p_ro.Keys) { string ppath = p.Path; if (ppath.Length < best_length) { continue; } if (p.Host != host || p.Port != port) { continue; } if (path.StartsWith(ppath) || path_slash.StartsWith(ppath)) { best_length = ppath.Length; best_match = (HttpListener)p_ro [p]; prefix = p; } } if (best_length != -1) { return(best_match); } } ArrayList list = unhandled; best_match = MatchFromList(host, path, list, out prefix); if (path != path_slash && best_match == null) { best_match = MatchFromList(host, path_slash, list, out prefix); } if (best_match != null) { return(best_match); } list = all; best_match = MatchFromList(host, path, list, out prefix); if (path != path_slash && best_match == null) { best_match = MatchFromList(host, path_slash, list, out prefix); } if (best_match != null) { return(best_match); } return(null); }