Fix for query string
This commit is contained in:
		@@ -334,7 +334,7 @@ namespace WebSocketSharp.Net
 | 
			
		||||
    /// </value>
 | 
			
		||||
    public NameValueCollection QueryString {
 | 
			
		||||
      get {
 | 
			
		||||
        return _queryString ?? (_queryString = createQueryString (_url.Query));
 | 
			
		||||
        return _queryString ?? (_queryString = HttpUtility.ParseQueryStringSimply (_url.Query));
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -454,34 +454,6 @@ namespace WebSocketSharp.Net
 | 
			
		||||
 | 
			
		||||
    #region Private Methods
 | 
			
		||||
 | 
			
		||||
    private static NameValueCollection createQueryString (string query)
 | 
			
		||||
    {
 | 
			
		||||
      if (query == null || query.Length == 0)
 | 
			
		||||
        return new NameValueCollection (1);
 | 
			
		||||
 | 
			
		||||
      var res = new NameValueCollection ();
 | 
			
		||||
      if (query [0] == '?')
 | 
			
		||||
        query = query.Substring (1);
 | 
			
		||||
 | 
			
		||||
      var components = query.Split ('&');
 | 
			
		||||
      foreach (var component in components) {
 | 
			
		||||
        var i = component.IndexOf ('=');
 | 
			
		||||
        if (i > -1) {
 | 
			
		||||
          var name = HttpUtility.UrlDecode (component.Substring (0, i));
 | 
			
		||||
          var val = component.Length > i + 1
 | 
			
		||||
                    ? HttpUtility.UrlDecode (component.Substring (i + 1))
 | 
			
		||||
                    : String.Empty;
 | 
			
		||||
 | 
			
		||||
          res.Add (name, val);
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
          res.Add (null, HttpUtility.UrlDecode (component));
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      return res;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static bool tryCreateVersion (string version, out Version result)
 | 
			
		||||
    {
 | 
			
		||||
      result = null;
 | 
			
		||||
 
 | 
			
		||||
@@ -1038,7 +1038,7 @@ namespace WebSocketSharp.Net
 | 
			
		||||
 | 
			
		||||
      var len = query.Length;
 | 
			
		||||
      if (len == 0 || (len == 1 && query [0] == '?'))
 | 
			
		||||
        return new NameValueCollection ();
 | 
			
		||||
        return new NameValueCollection (1);
 | 
			
		||||
 | 
			
		||||
      if (query [0] == '?')
 | 
			
		||||
        query = query.Substring (1);
 | 
			
		||||
@@ -1052,6 +1052,36 @@ namespace WebSocketSharp.Net
 | 
			
		||||
      return res;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Used by HttpListenerRequest and TcpListenerWebSocketContext.
 | 
			
		||||
    public static NameValueCollection ParseQueryStringSimply (string query)
 | 
			
		||||
    {
 | 
			
		||||
      int len;
 | 
			
		||||
      if (query == null || (len = query.Length) == 0 || (len == 1 && query [0] == '?'))
 | 
			
		||||
        return new NameValueCollection (1);
 | 
			
		||||
 | 
			
		||||
      if (query [0] == '?')
 | 
			
		||||
        query = query.Substring (1);
 | 
			
		||||
 | 
			
		||||
      var res = new QueryStringCollection ();
 | 
			
		||||
      var components = query.Split ('&');
 | 
			
		||||
      foreach (var component in components) {
 | 
			
		||||
        var i = component.IndexOf ('=');
 | 
			
		||||
        if (i > -1) {
 | 
			
		||||
          var name = UrlDecode (component.Substring (0, i), Encoding.UTF8);
 | 
			
		||||
          var val = component.Length > i + 1
 | 
			
		||||
                    ? UrlDecode (component.Substring (i + 1), Encoding.UTF8)
 | 
			
		||||
                    : String.Empty;
 | 
			
		||||
 | 
			
		||||
          res.Add (name, val);
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
          res.Add (null, UrlDecode (component, Encoding.UTF8));
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      return res;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static string UrlDecode (string s)
 | 
			
		||||
    {
 | 
			
		||||
      return UrlDecode (s, Encoding.UTF8);
 | 
			
		||||
 
 | 
			
		||||
@@ -189,7 +189,8 @@ namespace WebSocketSharp.Net.WebSockets
 | 
			
		||||
    public override NameValueCollection QueryString {
 | 
			
		||||
      get {
 | 
			
		||||
        return _queryString ??
 | 
			
		||||
               (_queryString = createQueryString (_uri != null ? _uri.Query : null));
 | 
			
		||||
               (_queryString =
 | 
			
		||||
                 HttpUtility.ParseQueryStringSimply (_uri != null ? _uri.Query : null));
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -309,34 +310,6 @@ namespace WebSocketSharp.Net.WebSockets
 | 
			
		||||
 | 
			
		||||
    #region Private Methods
 | 
			
		||||
 | 
			
		||||
    private static NameValueCollection createQueryString (string query)
 | 
			
		||||
    {
 | 
			
		||||
      if (query == null || query.Length == 0)
 | 
			
		||||
        return new NameValueCollection (1);
 | 
			
		||||
 | 
			
		||||
      var res = new NameValueCollection ();
 | 
			
		||||
      if (query [0] == '?')
 | 
			
		||||
        query = query.Substring (1);
 | 
			
		||||
 | 
			
		||||
      var components = query.Split ('&');
 | 
			
		||||
      foreach (var component in components) {
 | 
			
		||||
        var i = component.IndexOf ('=');
 | 
			
		||||
        if (i > -1) {
 | 
			
		||||
          var name = HttpUtility.UrlDecode (component.Substring (0, i));
 | 
			
		||||
          var val = component.Length > i + 1
 | 
			
		||||
                    ? HttpUtility.UrlDecode (component.Substring (i + 1))
 | 
			
		||||
                    : String.Empty;
 | 
			
		||||
 | 
			
		||||
          res.Add (name, val);
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
          res.Add (null, HttpUtility.UrlDecode (component));
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      return res;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static Uri createRequestUrl (HandshakeRequest request, bool secure)
 | 
			
		||||
    {
 | 
			
		||||
      var host = request.Headers ["Host"];
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user