Exemplo n.º 1
0
        private static bool removeSpecial(List <ListenerPrefix> prefixes, ListenerPrefix prefix)
        {
            if (prefixes == null)
            {
                return(false);
            }

            var path  = prefix.Path;
            var count = prefixes.Count;

            for (int i = 0; i < count; i++)
            {
                if (prefixes [i].Path == path)
                {
                    prefixes.RemoveAt(i);
                    return(true);
                }
            }

            return(false);
        }
        private static HttpListener matchFromList(string host, string path, List <ListenerPrefix> list, out ListenerPrefix prefix)
        {
            prefix = null;
            if (list == null)
            {
                return(null);
            }
            HttpListener result = null;
            int          num    = -1;

            foreach (ListenerPrefix listenerPrefix in list)
            {
                string path2 = listenerPrefix.Path;
                if (path2.Length >= num)
                {
                    if (path.StartsWith(path2))
                    {
                        num    = path2.Length;
                        result = listenerPrefix.Listener;
                        prefix = listenerPrefix;
                    }
                }
            }
            return(result);
        }
Exemplo n.º 3
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 != "")
            {
                var 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  = p_ro [p];
                        prefix      = p;
                    }
                }
                if (best_length != -1)
                {
                    return(best_match);
                }
            }

            var 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);
        }
Exemplo n.º 4
0
        private HttpListener searchListener(Uri uri, out ListenerPrefix prefix)
        {
            prefix = null;
            if (uri == null)
            {
                return(null);
            }

            var host      = uri.Host;
            var port      = uri.Port;
            var path      = HttpUtility.UrlDecode(uri.AbsolutePath);
            var pathSlash = path [path.Length - 1] == '/' ? path : path + "/";

            HttpListener bestMatch  = null;
            var          bestLength = -1;

            if (host != null && host.Length > 0)
            {
                foreach (var pref in _prefixes.Keys)
                {
                    var ppath = pref.Path;
                    if (ppath.Length < bestLength)
                    {
                        continue;
                    }

                    if (pref.Host != host || pref.Port != port)
                    {
                        continue;
                    }

                    if (path.StartsWith(ppath) || pathSlash.StartsWith(ppath))
                    {
                        bestLength = ppath.Length;
                        bestMatch  = _prefixes [pref];
                        prefix     = pref;
                    }
                }

                if (bestLength != -1)
                {
                    return(bestMatch);
                }
            }

            var list = _unhandled;

            bestMatch = matchFromList(host, path, list, out prefix);
            if (path != pathSlash && bestMatch == null)
            {
                bestMatch = matchFromList(host, pathSlash, list, out prefix);
            }

            if (bestMatch != null)
            {
                return(bestMatch);
            }

            list      = _all;
            bestMatch = matchFromList(host, path, list, out prefix);
            if (path != pathSlash && bestMatch == null)
            {
                bestMatch = matchFromList(host, pathSlash, list, out prefix);
            }

            if (bestMatch != null)
            {
                return(bestMatch);
            }

            return(null);
        }
Exemplo n.º 5
0
        public override bool Equals(object obj)
        {
            ListenerPrefix listenerPrefix = obj as ListenerPrefix;

            return(listenerPrefix != null && this._original == listenerPrefix._original);
        }