Exemple #1
0
        /// <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);
 }
Exemple #5
0
 public HttpListener(Mono.Net.HttpListener listener)
 {
     InnerListener = listener;
 }
Exemple #6
0
 /// <summary>
 /// Creates a listener wrapper that can be configured by the user before starting.
 /// </summary>
 internal OwinHttpListener()
 {
     _listener = new Mono.Net.HttpListener();
 }
Exemple #7
0
        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);
        }