private bool RemoveSpecial(ArrayList coll, ListenerPrefix prefix) { if (coll == null) { return(false); } var c = coll.Count; for (var i = 0; i < c; i++) { var p = (ListenerPrefix)coll[i]; if (p.Path == prefix.Path) { coll.RemoveAt(i); return(true); } } return(false); }
private static bool RemoveSpecial(IList <ListenerPrefix> coll, ListenerPrefix prefix) { if (coll == null) { return(false); } var c = coll.Count; for (var i = 0; i < c; i++) { if (coll[i].Path != prefix.Path) { continue; } coll.RemoveAt(i); return(true); } return(false); }
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 = WebUtility.UrlDecode(uri.AbsolutePath); var pathSlash = path[path.Length - 1] == '/' ? path : path + "/"; HttpListener bestMatch = null; var bestLength = -1; if (!string.IsNullOrEmpty(host)) { var result = _prefixes; foreach (var p in result.Keys) { if (p.Path.Length < bestLength) { continue; } if (p.Host != host || p.Port != port) { continue; } if (!path.StartsWith(p.Path) && !pathSlash.StartsWith(p.Path)) { continue; } bestLength = p.Path.Length; bestMatch = result[p]; prefix = p; } if (bestLength != -1) { return(bestMatch); } } var list = _unhandled; bestMatch = MatchFromList(path, list, out prefix); if (path != pathSlash && bestMatch == null) { bestMatch = MatchFromList(pathSlash, list, out prefix); } if (bestMatch != null) { return(bestMatch); } list = _all; bestMatch = MatchFromList(path, list, out prefix); if (path != pathSlash && bestMatch == null) { bestMatch = MatchFromList(pathSlash, list, out prefix); } return(bestMatch); }
private static HttpListener MatchFromList(string path, IReadOnlyCollection <ListenerPrefix> list, out ListenerPrefix prefix) { prefix = null; if (list == null) { return(null); } HttpListener bestMatch = null; var bestLength = -1; foreach (var p in list) { if (p.Path.Length < bestLength || !path.StartsWith(p.Path)) { continue; } bestLength = p.Path.Length; bestMatch = p.Listener; prefix = p; } return(bestMatch); }
private static HttpListener MatchFromList(string path, List <ListenerPrefix> list, out ListenerPrefix prefix) { prefix = null; if (list == null) { return(null); } HttpListener bestMatch = null; var bestLength = -1; foreach (var p in list) { var ppath = p.Path; if (ppath.Length < bestLength) { continue; } if (path.StartsWith(ppath)) { bestLength = ppath.Length; bestMatch = p.Listener; prefix = p; } } return(bestMatch); }