From e45e51e1ef4a8060916970516c50b0e5da8670e5 Mon Sep 17 00:00:00 2001 From: sta Date: Tue, 15 Jul 2014 16:39:38 +0900 Subject: [PATCH] Renamed HandshakeResponse.cs to HttpResponse.cs, and refactored --- .../{HandshakeResponse.cs => HttpResponse.cs} | 72 ++++++++++++------- .../WebSockets/TcpListenerWebSocketContext.cs | 4 +- websocket-sharp/WebSocket.cs | 43 +++++------ websocket-sharp/WebSocketStream.cs | 4 +- websocket-sharp/websocket-sharp.csproj | 2 +- 5 files changed, 74 insertions(+), 51 deletions(-) rename websocket-sharp/{HandshakeResponse.cs => HttpResponse.cs} (68%) diff --git a/websocket-sharp/HandshakeResponse.cs b/websocket-sharp/HttpResponse.cs similarity index 68% rename from websocket-sharp/HandshakeResponse.cs rename to websocket-sharp/HttpResponse.cs index 29c6f345..e6bf4a7f 100644 --- a/websocket-sharp/HandshakeResponse.cs +++ b/websocket-sharp/HttpResponse.cs @@ -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 diff --git a/websocket-sharp/Net/WebSockets/TcpListenerWebSocketContext.cs b/websocket-sharp/Net/WebSockets/TcpListenerWebSocketContext.cs index 87a26dcf..0d34ffa2 100644 --- a/websocket-sharp/Net/WebSockets/TcpListenerWebSocketContext.cs +++ b/websocket-sharp/Net/WebSockets/TcpListenerWebSocketContext.cs @@ -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.Parse, 15000); diff --git a/websocket-sharp/WebSocket.cs b/websocket-sharp/WebSocket.cs index 47dea128..7989b51d 100644 --- a/websocket-sharp/WebSocket.cs +++ b/websocket-sharp/WebSocket.cs @@ -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 diff --git a/websocket-sharp/WebSocketStream.cs b/websocket-sharp/WebSocketStream.cs index 88596932..063d7fc5 100644 --- a/websocket-sharp/WebSocketStream.cs +++ b/websocket-sharp/WebSocketStream.cs @@ -267,9 +267,9 @@ namespace WebSocketSharp return ReadHttp (HttpRequest.Parse, 90000); } - public HandshakeResponse ReadHandshakeResponse () + public HttpResponse ReadHandshakeResponse () { - return ReadHttp (HandshakeResponse.Parse, 90000); + return ReadHttp (HttpResponse.Parse, 90000); } public bool WriteFrame (WebSocketFrame frame) diff --git a/websocket-sharp/websocket-sharp.csproj b/websocket-sharp/websocket-sharp.csproj index f52f0df6..a4fe3079 100644 --- a/websocket-sharp/websocket-sharp.csproj +++ b/websocket-sharp/websocket-sharp.csproj @@ -113,7 +113,6 @@ - @@ -136,6 +135,7 @@ +