Renamed HandshakeResponse.cs to HttpResponse.cs, and refactored
This commit is contained in:
		@@ -1,6 +1,6 @@
 | 
			
		||||
#region License
 | 
			
		||||
/*
 | 
			
		||||
 * HandshakeResponse.cs
 | 
			
		||||
 * HttpResponse.cs
 | 
			
		||||
 *
 | 
			
		||||
 * The MIT License
 | 
			
		||||
 *
 | 
			
		||||
@@ -33,7 +33,7 @@ using WebSocketSharp.Net;
 | 
			
		||||
 | 
			
		||||
namespace WebSocketSharp
 | 
			
		||||
{
 | 
			
		||||
  internal class HandshakeResponse : HttpBase
 | 
			
		||||
  internal class HttpResponse : HttpBase
 | 
			
		||||
  {
 | 
			
		||||
    #region Private Fields
 | 
			
		||||
 | 
			
		||||
@@ -44,38 +44,37 @@ namespace WebSocketSharp
 | 
			
		||||
 | 
			
		||||
    #region Private Constructors
 | 
			
		||||
 | 
			
		||||
    private HandshakeResponse (Version version, NameValueCollection headers)
 | 
			
		||||
    private HttpResponse (string code, string reason, Version version, NameValueCollection headers)
 | 
			
		||||
      : base (version, headers)
 | 
			
		||||
    {
 | 
			
		||||
      _code = code;
 | 
			
		||||
      _reason = reason;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #endregion
 | 
			
		||||
 | 
			
		||||
    #region Internal Constructors
 | 
			
		||||
 | 
			
		||||
    internal HandshakeResponse (HttpStatusCode code)
 | 
			
		||||
      : base (HttpVersion.Version11, new NameValueCollection ())
 | 
			
		||||
    internal HttpResponse (HttpStatusCode code)
 | 
			
		||||
      : this (code, code.GetDescription ())
 | 
			
		||||
    {
 | 
			
		||||
      _code = ((int) code).ToString ();
 | 
			
		||||
      _reason = code.GetDescription ();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
      var headers = Headers;
 | 
			
		||||
      headers["Server"] = "websocket-sharp/1.0";
 | 
			
		||||
      if (code == HttpStatusCode.SwitchingProtocols) {
 | 
			
		||||
        headers["Upgrade"] = "websocket";
 | 
			
		||||
        headers["Connection"] = "Upgrade";
 | 
			
		||||
      }
 | 
			
		||||
    internal HttpResponse (HttpStatusCode code, string reason)
 | 
			
		||||
      : this (((int) code).ToString (), reason, HttpVersion.Version11, new NameValueCollection ())
 | 
			
		||||
    {
 | 
			
		||||
      Headers["Server"] = "websocket-sharp/1.0";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #endregion
 | 
			
		||||
 | 
			
		||||
    #region Public Properties
 | 
			
		||||
 | 
			
		||||
    public AuthenticationChallenge AuthChallenge {
 | 
			
		||||
    public AuthenticationChallenge AuthenticationChallenge {
 | 
			
		||||
      get {
 | 
			
		||||
        var auth = Headers["WWW-Authenticate"];
 | 
			
		||||
        return auth != null && auth.Length > 0
 | 
			
		||||
               ? AuthenticationChallenge.Parse (auth)
 | 
			
		||||
        var chal = Headers["WWW-Authenticate"];
 | 
			
		||||
        return chal != null && chal.Length > 0
 | 
			
		||||
               ? AuthenticationChallenge.Parse (chal)
 | 
			
		||||
               : null;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
@@ -86,6 +85,12 @@ namespace WebSocketSharp
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public bool IsProxyAuthenticationRequired {
 | 
			
		||||
      get {
 | 
			
		||||
        return _code == "407";
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public bool IsUnauthorized {
 | 
			
		||||
      get {
 | 
			
		||||
        return _code == "401";
 | 
			
		||||
@@ -102,6 +107,15 @@ namespace WebSocketSharp
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public AuthenticationChallenge ProxyAuthenticationChallenge {
 | 
			
		||||
      get {
 | 
			
		||||
        var chal = Headers["Proxy-Authenticate"];
 | 
			
		||||
        return chal != null && chal.Length > 0
 | 
			
		||||
               ? AuthenticationChallenge.Parse (chal)
 | 
			
		||||
               : null;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public string Reason {
 | 
			
		||||
      get {
 | 
			
		||||
        return _reason;
 | 
			
		||||
@@ -118,15 +132,26 @@ namespace WebSocketSharp
 | 
			
		||||
 | 
			
		||||
    #region Internal Methods
 | 
			
		||||
 | 
			
		||||
    internal static HandshakeResponse CreateCloseResponse (HttpStatusCode code)
 | 
			
		||||
    internal static HttpResponse CreateCloseResponse (HttpStatusCode code)
 | 
			
		||||
    {
 | 
			
		||||
      var res = new HandshakeResponse (code);
 | 
			
		||||
      var res = new HttpResponse (code);
 | 
			
		||||
      res.Headers["Connection"] = "close";
 | 
			
		||||
 | 
			
		||||
      return res;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    internal static HandshakeResponse Parse (string[] headerParts)
 | 
			
		||||
    internal static HttpResponse CreateWebSocketResponse ()
 | 
			
		||||
    {
 | 
			
		||||
      var res = new HttpResponse (HttpStatusCode.SwitchingProtocols);
 | 
			
		||||
 | 
			
		||||
      var headers = res.Headers;
 | 
			
		||||
      headers["Upgrade"] = "websocket";
 | 
			
		||||
      headers["Connection"] = "Upgrade";
 | 
			
		||||
 | 
			
		||||
      return res;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    internal static HttpResponse Parse (string[] headerParts)
 | 
			
		||||
    {
 | 
			
		||||
      var statusLine = headerParts[0].Split (new[] { ' ' }, 3);
 | 
			
		||||
      if (statusLine.Length != 3)
 | 
			
		||||
@@ -136,11 +161,8 @@ namespace WebSocketSharp
 | 
			
		||||
      for (int i = 1; i < headerParts.Length; i++)
 | 
			
		||||
        headers.SetInternally (headerParts[i], true);
 | 
			
		||||
 | 
			
		||||
      var res = new HandshakeResponse (new Version (statusLine[0].Substring (5)), headers);
 | 
			
		||||
      res._code = statusLine[1];
 | 
			
		||||
      res._reason = statusLine[2];
 | 
			
		||||
 | 
			
		||||
      return res;
 | 
			
		||||
      return new HttpResponse (
 | 
			
		||||
        statusLine[1], statusLine[2], new Version (statusLine[0].Substring (5)), headers);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #endregion
 | 
			
		||||
@@ -321,12 +321,12 @@ namespace WebSocketSharp.Net.WebSockets
 | 
			
		||||
 | 
			
		||||
    internal void Close (HttpStatusCode code)
 | 
			
		||||
    {
 | 
			
		||||
      _websocket.Close (HandshakeResponse.CreateCloseResponse (code));
 | 
			
		||||
      _websocket.Close (HttpResponse.CreateCloseResponse (code));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    internal void SendAuthChallenge (string challenge)
 | 
			
		||||
    {
 | 
			
		||||
      var res = new HandshakeResponse (HttpStatusCode.Unauthorized);
 | 
			
		||||
      var res = new HttpResponse (HttpStatusCode.Unauthorized);
 | 
			
		||||
      res.Headers ["WWW-Authenticate"] = challenge;
 | 
			
		||||
      _stream.WriteHandshake (res);
 | 
			
		||||
      _request = _stream.ReadHttp<HttpRequest> (HttpRequest.Parse, 15000);
 | 
			
		||||
 
 | 
			
		||||
@@ -693,11 +693,12 @@ namespace WebSocketSharp
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // As client
 | 
			
		||||
    private string checkIfValidHandshakeResponse (HandshakeResponse response)
 | 
			
		||||
    private string checkIfValidHandshakeResponse (HttpResponse response)
 | 
			
		||||
    {
 | 
			
		||||
      var headers = response.Headers;
 | 
			
		||||
      return response.IsUnauthorized
 | 
			
		||||
             ? String.Format ("HTTP {0} authorization is required.", response.AuthChallenge.Scheme)
 | 
			
		||||
             ? String.Format (
 | 
			
		||||
                 "HTTP {0} authorization is required.", response.AuthenticationChallenge.Scheme)
 | 
			
		||||
             : !response.IsWebSocketResponse
 | 
			
		||||
               ? "Not WebSocket connection response."
 | 
			
		||||
               : !validateSecWebSocketAcceptHeader (headers ["Sec-WebSocket-Accept"])
 | 
			
		||||
@@ -897,6 +898,15 @@ namespace WebSocketSharp
 | 
			
		||||
             : null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // As server
 | 
			
		||||
    private HttpResponse createHandshakeCloseResponse (HttpStatusCode code)
 | 
			
		||||
    {
 | 
			
		||||
      var res = HttpResponse.CreateCloseResponse (code);
 | 
			
		||||
      res.Headers ["Sec-WebSocket-Version"] = _version;
 | 
			
		||||
 | 
			
		||||
      return res;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // As client
 | 
			
		||||
    private HttpRequest createHandshakeRequest ()
 | 
			
		||||
    {
 | 
			
		||||
@@ -936,11 +946,11 @@ namespace WebSocketSharp
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // As server
 | 
			
		||||
    private HandshakeResponse createHandshakeResponse ()
 | 
			
		||||
    private HttpResponse createHandshakeResponse ()
 | 
			
		||||
    {
 | 
			
		||||
      var res = new HandshakeResponse (HttpStatusCode.SwitchingProtocols);
 | 
			
		||||
      var headers = res.Headers;
 | 
			
		||||
      var res = HttpResponse.CreateWebSocketResponse ();
 | 
			
		||||
 | 
			
		||||
      var headers = res.Headers;
 | 
			
		||||
      headers ["Sec-WebSocket-Accept"] = CreateResponseKey (_base64Key);
 | 
			
		||||
 | 
			
		||||
      if (_protocol != null)
 | 
			
		||||
@@ -955,15 +965,6 @@ namespace WebSocketSharp
 | 
			
		||||
      return res;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // As server
 | 
			
		||||
    private HandshakeResponse createHandshakeResponse (HttpStatusCode code)
 | 
			
		||||
    {
 | 
			
		||||
      var res = HandshakeResponse.CreateCloseResponse (code);
 | 
			
		||||
      res.Headers ["Sec-WebSocket-Version"] = _version;
 | 
			
		||||
 | 
			
		||||
      return res;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private MessageEventArgs dequeueFromMessageEventQueue ()
 | 
			
		||||
    {
 | 
			
		||||
      lock (_forMessageEventQueue)
 | 
			
		||||
@@ -1043,7 +1044,7 @@ namespace WebSocketSharp
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // As client
 | 
			
		||||
    private HandshakeResponse receiveHandshakeResponse ()
 | 
			
		||||
    private HttpResponse receiveHandshakeResponse ()
 | 
			
		||||
    {
 | 
			
		||||
      var res = _stream.ReadHandshakeResponse ();
 | 
			
		||||
      _logger.Debug ("A response to this WebSocket connection request:\n" + res.ToString ());
 | 
			
		||||
@@ -1073,7 +1074,7 @@ namespace WebSocketSharp
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // As server
 | 
			
		||||
    private bool send (HandshakeResponse response)
 | 
			
		||||
    private bool send (HttpResponse response)
 | 
			
		||||
    {
 | 
			
		||||
      _logger.Debug (
 | 
			
		||||
        "A response to the WebSocket connection request:\n" + response.ToString ());
 | 
			
		||||
@@ -1226,12 +1227,12 @@ namespace WebSocketSharp
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // As client
 | 
			
		||||
    private HandshakeResponse sendHandshakeRequest ()
 | 
			
		||||
    private HttpResponse sendHandshakeRequest ()
 | 
			
		||||
    {
 | 
			
		||||
      var req = createHandshakeRequest ();
 | 
			
		||||
      var res = sendHandshakeRequest (req);
 | 
			
		||||
      if (res.IsUnauthorized) {
 | 
			
		||||
        _authChallenge = res.AuthChallenge;
 | 
			
		||||
        _authChallenge = res.AuthenticationChallenge;
 | 
			
		||||
        if (_credentials != null &&
 | 
			
		||||
            (!_preAuth || _authChallenge.Scheme == AuthenticationSchemes.Digest)) {
 | 
			
		||||
          if (res.Headers.Contains ("Connection", "close")) {
 | 
			
		||||
@@ -1250,7 +1251,7 @@ namespace WebSocketSharp
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // As client
 | 
			
		||||
    private HandshakeResponse sendHandshakeRequest (HttpRequest request)
 | 
			
		||||
    private HttpResponse sendHandshakeRequest (HttpRequest request)
 | 
			
		||||
    {
 | 
			
		||||
      send (request);
 | 
			
		||||
      return receiveHandshakeResponse ();
 | 
			
		||||
@@ -1373,7 +1374,7 @@ namespace WebSocketSharp
 | 
			
		||||
    #region Internal Methods
 | 
			
		||||
 | 
			
		||||
    // As server
 | 
			
		||||
    internal void Close (HandshakeResponse response)
 | 
			
		||||
    internal void Close (HttpResponse response)
 | 
			
		||||
    {
 | 
			
		||||
      _readyState = WebSocketState.Closing;
 | 
			
		||||
 | 
			
		||||
@@ -1386,7 +1387,7 @@ namespace WebSocketSharp
 | 
			
		||||
    // As server
 | 
			
		||||
    internal void Close (HttpStatusCode code)
 | 
			
		||||
    {
 | 
			
		||||
      Close (createHandshakeResponse (code));
 | 
			
		||||
      Close (createHandshakeCloseResponse (code));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // As server
 | 
			
		||||
 
 | 
			
		||||
@@ -267,9 +267,9 @@ namespace WebSocketSharp
 | 
			
		||||
      return ReadHttp<HttpRequest> (HttpRequest.Parse, 90000);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public HandshakeResponse ReadHandshakeResponse ()
 | 
			
		||||
    public HttpResponse ReadHandshakeResponse ()
 | 
			
		||||
    {
 | 
			
		||||
      return ReadHttp<HandshakeResponse> (HandshakeResponse.Parse, 90000);
 | 
			
		||||
      return ReadHttp<HttpResponse> (HttpResponse.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="HandshakeResponse.cs" />
 | 
			
		||||
    <Compile Include="WebSocketState.cs" />
 | 
			
		||||
    <Compile Include="Server\IWebSocketSession.cs" />
 | 
			
		||||
    <Compile Include="Server\WebSocketSessionManager.cs" />
 | 
			
		||||
@@ -136,6 +135,7 @@
 | 
			
		||||
    <Compile Include="Net\AuthenticationBase.cs" />
 | 
			
		||||
    <Compile Include="HttpBase.cs" />
 | 
			
		||||
    <Compile Include="HttpRequest.cs" />
 | 
			
		||||
    <Compile Include="HttpResponse.cs" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user