Renamed HandshakeRequest.cs to HttpRequest.cs, and refactored
This commit is contained in:
		@@ -1,6 +1,6 @@
 | 
			
		||||
#region License
 | 
			
		||||
/*
 | 
			
		||||
 * HandshakeRequest.cs
 | 
			
		||||
 * HttpRequest.cs
 | 
			
		||||
 *
 | 
			
		||||
 * The MIT License
 | 
			
		||||
 *
 | 
			
		||||
@@ -33,7 +33,7 @@ using WebSocketSharp.Net;
 | 
			
		||||
 | 
			
		||||
namespace WebSocketSharp
 | 
			
		||||
{
 | 
			
		||||
  internal class HandshakeRequest : HttpBase
 | 
			
		||||
  internal class HttpRequest : HttpBase
 | 
			
		||||
  {
 | 
			
		||||
    #region Private Fields
 | 
			
		||||
 | 
			
		||||
@@ -46,25 +46,21 @@ namespace WebSocketSharp
 | 
			
		||||
 | 
			
		||||
    #region Private Constructors
 | 
			
		||||
 | 
			
		||||
    private HandshakeRequest (Version version, NameValueCollection headers)
 | 
			
		||||
    private HttpRequest (string method, string uri, Version version, NameValueCollection headers)
 | 
			
		||||
      : base (version, headers)
 | 
			
		||||
    {
 | 
			
		||||
      _method = method;
 | 
			
		||||
      _uri = uri;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #endregion
 | 
			
		||||
 | 
			
		||||
    #region Internal Constructors
 | 
			
		||||
 | 
			
		||||
    internal HandshakeRequest (string pathAndQuery)
 | 
			
		||||
      : base (HttpVersion.Version11, new NameValueCollection ())
 | 
			
		||||
    internal HttpRequest (string method, string uri)
 | 
			
		||||
      : this (method, uri, HttpVersion.Version11, new NameValueCollection ())
 | 
			
		||||
    {
 | 
			
		||||
      _uri = pathAndQuery;
 | 
			
		||||
      _method = "GET";
 | 
			
		||||
 | 
			
		||||
      var headers = Headers;
 | 
			
		||||
      headers["User-Agent"] = "websocket-sharp/1.0";
 | 
			
		||||
      headers["Upgrade"] = "websocket";
 | 
			
		||||
      headers["Connection"] = "Upgrade";
 | 
			
		||||
      Headers["User-Agent"] = "websocket-sharp/1.0";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #endregion
 | 
			
		||||
@@ -118,7 +114,28 @@ namespace WebSocketSharp
 | 
			
		||||
 | 
			
		||||
    #region Internal Methods
 | 
			
		||||
 | 
			
		||||
    internal static HandshakeRequest Parse (string[] headerParts)
 | 
			
		||||
    internal static HttpRequest CreateConnectRequest (Uri uri)
 | 
			
		||||
    {
 | 
			
		||||
      var authority = uri.Authority;
 | 
			
		||||
      var req = new HttpRequest ("CONNECT", authority);
 | 
			
		||||
      req.Headers["Host"] = uri.Port == 80 ? uri.DnsSafeHost : authority;
 | 
			
		||||
 | 
			
		||||
      return req;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    internal static HttpRequest CreateWebSocketRequest (Uri uri)
 | 
			
		||||
    {
 | 
			
		||||
      var req = new HttpRequest ("GET", uri.PathAndQuery);
 | 
			
		||||
 | 
			
		||||
      var headers = req.Headers;
 | 
			
		||||
      headers["Upgrade"] = "websocket";
 | 
			
		||||
      headers["Connection"] = "Upgrade";
 | 
			
		||||
      headers["Host"] = uri.Port == 80 ? uri.DnsSafeHost : uri.Authority;
 | 
			
		||||
 | 
			
		||||
      return req;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    internal static HttpRequest Parse (string[] headerParts)
 | 
			
		||||
    {
 | 
			
		||||
      var requestLine = headerParts[0].Split (new[] { ' ' }, 3);
 | 
			
		||||
      if (requestLine.Length != 3)
 | 
			
		||||
@@ -128,11 +145,8 @@ namespace WebSocketSharp
 | 
			
		||||
      for (int i = 1; i < headerParts.Length; i++)
 | 
			
		||||
        headers.SetInternally (headerParts[i], false);
 | 
			
		||||
 | 
			
		||||
      var req = new HandshakeRequest (new Version (requestLine[2].Substring (5)), headers);
 | 
			
		||||
      req._method = requestLine[0];
 | 
			
		||||
      req._uri = requestLine[1];
 | 
			
		||||
 | 
			
		||||
      return req;
 | 
			
		||||
      return new HttpRequest (
 | 
			
		||||
        requestLine[0], requestLine[1], new Version (requestLine[2].Substring (5)), headers);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #endregion
 | 
			
		||||
@@ -49,7 +49,7 @@ namespace WebSocketSharp.Net.WebSockets
 | 
			
		||||
    private TcpClient           _client;
 | 
			
		||||
    private CookieCollection    _cookies;
 | 
			
		||||
    private NameValueCollection _queryString;
 | 
			
		||||
    private HandshakeRequest    _request;
 | 
			
		||||
    private HttpRequest         _request;
 | 
			
		||||
    private bool                _secure;
 | 
			
		||||
    private WebSocketStream     _stream;
 | 
			
		||||
    private Uri                 _uri;
 | 
			
		||||
@@ -66,7 +66,7 @@ namespace WebSocketSharp.Net.WebSockets
 | 
			
		||||
      _client = client;
 | 
			
		||||
      _secure = secure;
 | 
			
		||||
      _stream = WebSocketStream.CreateServerStream (client, secure, cert);
 | 
			
		||||
      _request = _stream.ReadHandshake<HandshakeRequest> (HandshakeRequest.Parse, 90000);
 | 
			
		||||
      _request = _stream.ReadHttp<HttpRequest> (HttpRequest.Parse, 90000);
 | 
			
		||||
      _uri = HttpUtility.CreateRequestUrl (
 | 
			
		||||
        _request.RequestUri, _request.Headers ["Host"], _request.IsWebSocketRequest, secure);
 | 
			
		||||
 | 
			
		||||
@@ -329,7 +329,7 @@ namespace WebSocketSharp.Net.WebSockets
 | 
			
		||||
      var res = new HandshakeResponse (HttpStatusCode.Unauthorized);
 | 
			
		||||
      res.Headers ["WWW-Authenticate"] = challenge;
 | 
			
		||||
      _stream.WriteHandshake (res);
 | 
			
		||||
      _request = _stream.ReadHandshake<HandshakeRequest> (HandshakeRequest.Parse, 15000);
 | 
			
		||||
      _request = _stream.ReadHttp<HttpRequest> (HttpRequest.Parse, 15000);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    internal void SetUser (
 | 
			
		||||
 
 | 
			
		||||
@@ -898,16 +898,11 @@ namespace WebSocketSharp
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // As client
 | 
			
		||||
    private HandshakeRequest createHandshakeRequest ()
 | 
			
		||||
    private HttpRequest createHandshakeRequest ()
 | 
			
		||||
    {
 | 
			
		||||
      var path = _uri.PathAndQuery;
 | 
			
		||||
      var host = _uri.Port == 80 ? _uri.DnsSafeHost : _uri.Authority;
 | 
			
		||||
      var req = HttpRequest.CreateWebSocketRequest (_uri);
 | 
			
		||||
 | 
			
		||||
      var req = new HandshakeRequest (path);
 | 
			
		||||
      var headers = req.Headers;
 | 
			
		||||
 | 
			
		||||
      headers ["Host"] = host;
 | 
			
		||||
 | 
			
		||||
      if (!_origin.IsNullOrEmpty ())
 | 
			
		||||
        headers ["Origin"] = _origin;
 | 
			
		||||
 | 
			
		||||
@@ -927,8 +922,9 @@ namespace WebSocketSharp
 | 
			
		||||
        authRes = new AuthenticationResponse (_authChallenge, _credentials, _nonceCount);
 | 
			
		||||
        _nonceCount = authRes.NonceCount;
 | 
			
		||||
      }
 | 
			
		||||
      else if (_preAuth)
 | 
			
		||||
      else if (_preAuth) {
 | 
			
		||||
        authRes = new AuthenticationResponse (_credentials);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (authRes != null)
 | 
			
		||||
        headers ["Authorization"] = authRes.ToString ();
 | 
			
		||||
@@ -1068,7 +1064,7 @@ namespace WebSocketSharp
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // As client
 | 
			
		||||
    private void send (HandshakeRequest request)
 | 
			
		||||
    private void send (HttpRequest request)
 | 
			
		||||
    {
 | 
			
		||||
      _logger.Debug (
 | 
			
		||||
        String.Format ("A WebSocket connection request to {0}:\n{1}", _uri, request));
 | 
			
		||||
@@ -1254,7 +1250,7 @@ namespace WebSocketSharp
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // As client
 | 
			
		||||
    private HandshakeResponse sendHandshakeRequest (HandshakeRequest request)
 | 
			
		||||
    private HandshakeResponse sendHandshakeRequest (HttpRequest request)
 | 
			
		||||
    {
 | 
			
		||||
      send (request);
 | 
			
		||||
      return receiveHandshakeResponse ();
 | 
			
		||||
 
 | 
			
		||||
@@ -42,7 +42,7 @@ namespace WebSocketSharp
 | 
			
		||||
  {
 | 
			
		||||
    #region Private Const Fields
 | 
			
		||||
 | 
			
		||||
    private const int _handshakeHeadersLimitLen = 8192;
 | 
			
		||||
    private const int _httpHeadersLimitLen = 8192;
 | 
			
		||||
 | 
			
		||||
    #endregion
 | 
			
		||||
 | 
			
		||||
@@ -99,7 +99,7 @@ namespace WebSocketSharp
 | 
			
		||||
 | 
			
		||||
    #region Private Methods
 | 
			
		||||
 | 
			
		||||
    private static byte [] readHandshakeEntityBody (Stream stream, string length)
 | 
			
		||||
    private static byte [] readHttpEntityBody (Stream stream, string length)
 | 
			
		||||
    {
 | 
			
		||||
      long len;
 | 
			
		||||
      if (!Int64.TryParse (length, out len))
 | 
			
		||||
@@ -115,7 +115,7 @@ namespace WebSocketSharp
 | 
			
		||||
               : null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static string [] readHandshakeHeaders (Stream stream)
 | 
			
		||||
    private static string [] readHttpHeaders (Stream stream)
 | 
			
		||||
    {
 | 
			
		||||
      var buff = new List<byte> ();
 | 
			
		||||
      var count = 0;
 | 
			
		||||
@@ -125,7 +125,7 @@ namespace WebSocketSharp
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      var read = false;
 | 
			
		||||
      while (count < _handshakeHeadersLimitLen) {
 | 
			
		||||
      while (count < _httpHeadersLimitLen) {
 | 
			
		||||
        if (stream.ReadByte ().EqualsWith ('\r', add) &&
 | 
			
		||||
            stream.ReadByte ().EqualsWith ('\n', add) &&
 | 
			
		||||
            stream.ReadByte ().EqualsWith ('\r', add) &&
 | 
			
		||||
@@ -137,7 +137,7 @@ namespace WebSocketSharp
 | 
			
		||||
 | 
			
		||||
      if (!read)
 | 
			
		||||
        throw new WebSocketException (
 | 
			
		||||
          "The header part of a handshake is greater than the limit length.");
 | 
			
		||||
          "The header part of a HTTP data is greater than the limit length.");
 | 
			
		||||
 | 
			
		||||
      var crlf = "\r\n";
 | 
			
		||||
      return Encoding.UTF8.GetString (buff.ToArray ())
 | 
			
		||||
@@ -150,7 +150,7 @@ namespace WebSocketSharp
 | 
			
		||||
 | 
			
		||||
    #region Internal Methods
 | 
			
		||||
 | 
			
		||||
    internal T ReadHandshake<T> (Func<string [], T> parser, int millisecondsTimeout)
 | 
			
		||||
    internal T ReadHttp<T> (Func<string [], T> parser, int millisecondsTimeout)
 | 
			
		||||
      where T : HttpBase
 | 
			
		||||
    {
 | 
			
		||||
      var timeout = false;
 | 
			
		||||
@@ -163,13 +163,13 @@ namespace WebSocketSharp
 | 
			
		||||
        millisecondsTimeout,
 | 
			
		||||
        -1);
 | 
			
		||||
 | 
			
		||||
      T handshake = null;
 | 
			
		||||
      T http = null;
 | 
			
		||||
      Exception exception = null;
 | 
			
		||||
      try {
 | 
			
		||||
        handshake = parser (readHandshakeHeaders (_innerStream));
 | 
			
		||||
        var contentLen = handshake.Headers ["Content-Length"];
 | 
			
		||||
        http = parser (readHttpHeaders (_innerStream));
 | 
			
		||||
        var contentLen = http.Headers ["Content-Length"];
 | 
			
		||||
        if (contentLen != null && contentLen.Length > 0)
 | 
			
		||||
          handshake.EntityBodyData = readHandshakeEntityBody (_innerStream, contentLen);
 | 
			
		||||
          http.EntityBodyData = readHttpEntityBody (_innerStream, contentLen);
 | 
			
		||||
      }
 | 
			
		||||
      catch (Exception ex) {
 | 
			
		||||
        exception = ex;
 | 
			
		||||
@@ -180,15 +180,15 @@ namespace WebSocketSharp
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      var msg = timeout
 | 
			
		||||
                ? "A timeout has occurred while receiving a handshake."
 | 
			
		||||
                ? "A timeout has occurred while receiving a HTTP data."
 | 
			
		||||
                : exception != null
 | 
			
		||||
                  ? "An exception has occurred while receiving a handshake."
 | 
			
		||||
                  ? "An exception has occurred while receiving a HTTP data."
 | 
			
		||||
                  : null;
 | 
			
		||||
 | 
			
		||||
      if (msg != null)
 | 
			
		||||
        throw new WebSocketException (msg, exception);
 | 
			
		||||
 | 
			
		||||
      return handshake;
 | 
			
		||||
      return http;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    internal bool Write (byte [] data)
 | 
			
		||||
@@ -262,14 +262,14 @@ namespace WebSocketSharp
 | 
			
		||||
      WebSocketFrame.ParseAsync (_innerStream, true, completed, error);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public HandshakeRequest ReadHandshakeRequest ()
 | 
			
		||||
    public HttpRequest ReadHandshakeRequest ()
 | 
			
		||||
    {
 | 
			
		||||
      return ReadHandshake<HandshakeRequest> (HandshakeRequest.Parse, 90000);
 | 
			
		||||
      return ReadHttp<HttpRequest> (HttpRequest.Parse, 90000);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public HandshakeResponse ReadHandshakeResponse ()
 | 
			
		||||
    {
 | 
			
		||||
      return ReadHandshake<HandshakeResponse> (HandshakeResponse.Parse, 90000);
 | 
			
		||||
      return ReadHttp<HandshakeResponse> (HandshakeResponse.Parse, 90000);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public bool WriteFrame (WebSocketFrame frame)
 | 
			
		||||
 
 | 
			
		||||
@@ -113,7 +113,6 @@
 | 
			
		||||
    <Compile Include="LogData.cs" />
 | 
			
		||||
    <Compile Include="LogLevel.cs" />
 | 
			
		||||
    <Compile Include="Logger.cs" />
 | 
			
		||||
    <Compile Include="HandshakeRequest.cs" />
 | 
			
		||||
    <Compile Include="HandshakeResponse.cs" />
 | 
			
		||||
    <Compile Include="WebSocketState.cs" />
 | 
			
		||||
    <Compile Include="Server\IWebSocketSession.cs" />
 | 
			
		||||
@@ -136,6 +135,7 @@
 | 
			
		||||
    <Compile Include="Net\AuthenticationResponse.cs" />
 | 
			
		||||
    <Compile Include="Net\AuthenticationBase.cs" />
 | 
			
		||||
    <Compile Include="HttpBase.cs" />
 | 
			
		||||
    <Compile Include="HttpRequest.cs" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user