diff --git a/websocket-sharp/Net/EndPointListener.cs b/websocket-sharp/Net/EndPointListener.cs index 1f34db26..7e9c20ff 100644 --- a/websocket-sharp/Net/EndPointListener.cs +++ b/websocket-sharp/Net/EndPointListener.cs @@ -528,6 +528,70 @@ namespace WebSocketSharp.Net conns[i].Close (true); } + public void RemovePrefix (HttpListenerPrefix prefix) + { + List current, future; + + if (prefix.Host == "*") { + do { + current = _unhandled; + + if (current == null) + break; + + future = new List (current); + + if (!removeSpecial (future, prefix)) + break; + } + while ( + Interlocked.CompareExchange (ref _unhandled, future, current) != current + ); + + leaveIfNoPrefix (); + + return; + } + + if (prefix.Host == "+") { + do { + current = _all; + + if (current == null) + break; + + future = new List (current); + + if (!removeSpecial (future, prefix)) + break; + } + while ( + Interlocked.CompareExchange (ref _all, future, current) != current + ); + + leaveIfNoPrefix (); + + return; + } + + Dictionary prefs, prefs2; + + do { + prefs = _prefixes; + + if (!prefs.ContainsKey (prefix)) + break; + + prefs2 = new Dictionary (prefs); + prefs2.Remove (prefix); + } + while ( + Interlocked.CompareExchange (ref _prefixes, prefs2, prefs) != prefs + ); + + leaveIfNoPrefix (); + } + public void RemovePrefix (HttpListenerPrefix prefix, HttpListener listener) { List current, future;