| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 | 
							- using System;
 
- using System.Net;
 
- using MediaBrowser.Model.Net;
 
- namespace SocketHttpListener.Net
 
- {
 
-     sealed class ListenerPrefix
 
-     {
 
-         string original;
 
-         string host;
 
-         ushort port;
 
-         string path;
 
-         bool secure;
 
-         IPAddress[] addresses;
 
-         public HttpListener Listener;
 
-         public ListenerPrefix(string prefix)
 
-         {
 
-             this.original = prefix;
 
-             Parse(prefix);
 
-         }
 
-         public override string ToString()
 
-         {
 
-             return original;
 
-         }
 
-         public IPAddress[] Addresses
 
-         {
 
-             get { return addresses; }
 
-             set { addresses = value; }
 
-         }
 
-         public bool Secure
 
-         {
 
-             get { return secure; }
 
-         }
 
-         public string Host
 
-         {
 
-             get { return host; }
 
-         }
 
-         public int Port
 
-         {
 
-             get { return (int)port; }
 
-         }
 
-         public string Path
 
-         {
 
-             get { return path; }
 
-         }
 
-         // Equals and GetHashCode are required to detect duplicates in HttpListenerPrefixCollection.
 
-         public override bool Equals(object o)
 
-         {
 
-             ListenerPrefix other = o as ListenerPrefix;
 
-             if (other == null)
 
-                 return false;
 
-             return (original == other.original);
 
-         }
 
-         public override int GetHashCode()
 
-         {
 
-             return original.GetHashCode();
 
-         }
 
-         void Parse(string uri)
 
-         {
 
-             ushort default_port = 80;
 
-             if (uri.StartsWith("https://"))
 
-             {
 
-                 default_port = 443;
 
-                 secure = true;
 
-             }
 
-             int length = uri.Length;
 
-             int start_host = uri.IndexOf(':') + 3;
 
-             if (start_host >= length)
 
-                 throw new ArgumentException("No host specified.");
 
-             int colon = uri.IndexOf(':', start_host, length - start_host);
 
-             int root;
 
-             if (colon > 0)
 
-             {
 
-                 host = uri.Substring(start_host, colon - start_host);
 
-                 root = uri.IndexOf('/', colon, length - colon);
 
-                 port = (ushort)Int32.Parse(uri.Substring(colon + 1, root - colon - 1));
 
-                 path = uri.Substring(root);
 
-             }
 
-             else
 
-             {
 
-                 root = uri.IndexOf('/', start_host, length - start_host);
 
-                 host = uri.Substring(start_host, root - start_host);
 
-                 port = default_port;
 
-                 path = uri.Substring(root);
 
-             }
 
-             if (path.Length != 1)
 
-                 path = path.Substring(0, path.Length - 1);
 
-         }
 
-         public static void CheckUri(string uri)
 
-         {
 
-             if (uri == null)
 
-                 throw new ArgumentNullException("uriPrefix");
 
-             if (!uri.StartsWith("http://") && !uri.StartsWith("https://"))
 
-                 throw new ArgumentException("Only 'http' and 'https' schemes are supported.");
 
-             int length = uri.Length;
 
-             int start_host = uri.IndexOf(':') + 3;
 
-             if (start_host >= length)
 
-                 throw new ArgumentException("No host specified.");
 
-             int colon = uri.IndexOf(':', start_host, length - start_host);
 
-             if (start_host == colon)
 
-                 throw new ArgumentException("No host specified.");
 
-             int root;
 
-             if (colon > 0)
 
-             {
 
-                 root = uri.IndexOf('/', colon, length - colon);
 
-                 if (root == -1)
 
-                     throw new ArgumentException("No path specified.");
 
-                 try
 
-                 {
 
-                     int p = Int32.Parse(uri.Substring(colon + 1, root - colon - 1));
 
-                     if (p <= 0 || p >= 65536)
 
-                         throw new Exception();
 
-                 }
 
-                 catch
 
-                 {
 
-                     throw new ArgumentException("Invalid port.");
 
-                 }
 
-             }
 
-             else
 
-             {
 
-                 root = uri.IndexOf('/', start_host, length - start_host);
 
-                 if (root == -1)
 
-                     throw new ArgumentException("No path specified.");
 
-             }
 
-             if (uri[uri.Length - 1] != '/')
 
-                 throw new ArgumentException("The prefix must end with '/'");
 
-         }
 
-     }
 
- }
 
 
  |