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); }
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); }
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); }
public override bool Equals(object obj) { ListenerPrefix listenerPrefix = obj as ListenerPrefix; return(listenerPrefix != null && this._original == listenerPrefix._original); }