From 400ba6ecd996b9fe604d01f10e52076809196a57 Mon Sep 17 00:00:00 2001 From: sta Date: Tue, 14 Jun 2016 15:54:34 +0900 Subject: [PATCH] [Modify] Add it --- websocket-sharp/Net/EndPointListener.cs | 57 +++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/websocket-sharp/Net/EndPointListener.cs b/websocket-sharp/Net/EndPointListener.cs index 186e2996..cc15f832 100644 --- a/websocket-sharp/Net/EndPointListener.cs +++ b/websocket-sharp/Net/EndPointListener.cs @@ -428,6 +428,63 @@ namespace WebSocketSharp.Net _unregistered.Remove (connection); } + internal bool TrySearchHttpListener (Uri uri, out HttpListener listener) + { + listener = null; + + if (uri == null) + return false; + + var host = uri.Host; + var dns = Uri.CheckHostName (host) == UriHostNameType.Dns; + var port = uri.Port.ToString (); + var path = HttpUtility.UrlDecode (uri.AbsolutePath); + var pathSlash = path[path.Length - 1] != '/' ? path + "/" : path; + + if (host != null && host.Length > 0) { + var bestLen = -1; + foreach (var pref in _prefixes.Keys) { + if (dns) { + var prefHost = pref.Host; + if (Uri.CheckHostName (prefHost) == UriHostNameType.Dns && prefHost != host) + continue; + } + + if (pref.Port != port) + continue; + + var prefPath = pref.Path; + + var len = prefPath.Length; + if (len < bestLen) + continue; + + if (path.StartsWith (prefPath) || pathSlash.StartsWith (prefPath)) { + bestLen = len; + listener = _prefixes[pref]; + } + } + + if (bestLen != -1) + return true; + } + + var prefs = _unhandled; + listener = searchHttpListenerFromSpecial (path, prefs); + if (listener == null && pathSlash != path) + listener = searchHttpListenerFromSpecial (pathSlash, prefs); + + if (listener != null) + return true; + + prefs = _all; + listener = searchHttpListenerFromSpecial (path, prefs); + if (listener == null && pathSlash != path) + listener = searchHttpListenerFromSpecial (pathSlash, prefs); + + return listener != null; + } + #endregion #region Public Methods