From 442783863247eb80b8efbede43e4af713385a60a Mon Sep 17 00:00:00 2001 From: sta Date: Mon, 14 Jul 2014 20:34:43 +0900 Subject: [PATCH] Renamed HandshakeRequest.cs to HttpRequest.cs, and refactored --- .../{HandshakeRequest.cs => HttpRequest.cs} | 50 ++++++++++++------- .../WebSockets/TcpListenerWebSocketContext.cs | 6 +-- websocket-sharp/WebSocket.cs | 16 +++--- websocket-sharp/WebSocketStream.cs | 32 ++++++------ websocket-sharp/websocket-sharp.csproj | 2 +- 5 files changed, 58 insertions(+), 48 deletions(-) rename websocket-sharp/{HandshakeRequest.cs => HttpRequest.cs} (79%) diff --git a/websocket-sharp/HandshakeRequest.cs b/websocket-sharp/HttpRequest.cs similarity index 79% rename from websocket-sharp/HandshakeRequest.cs rename to websocket-sharp/HttpRequest.cs index cdc17acd..d608e68a 100644 --- a/websocket-sharp/HandshakeRequest.cs +++ b/websocket-sharp/HttpRequest.cs @@ -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 diff --git a/websocket-sharp/Net/WebSockets/TcpListenerWebSocketContext.cs b/websocket-sharp/Net/WebSockets/TcpListenerWebSocketContext.cs index ac7c0293..87a26dcf 100644 --- a/websocket-sharp/Net/WebSockets/TcpListenerWebSocketContext.cs +++ b/websocket-sharp/Net/WebSockets/TcpListenerWebSocketContext.cs @@ -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.Parse, 90000); + _request = _stream.ReadHttp (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.Parse, 15000); + _request = _stream.ReadHttp (HttpRequest.Parse, 15000); } internal void SetUser ( diff --git a/websocket-sharp/WebSocket.cs b/websocket-sharp/WebSocket.cs index d59d6bda..47dea128 100644 --- a/websocket-sharp/WebSocket.cs +++ b/websocket-sharp/WebSocket.cs @@ -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 (); diff --git a/websocket-sharp/WebSocketStream.cs b/websocket-sharp/WebSocketStream.cs index 94c20786..88596932 100644 --- a/websocket-sharp/WebSocketStream.cs +++ b/websocket-sharp/WebSocketStream.cs @@ -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 (); 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 (Func parser, int millisecondsTimeout) + internal T ReadHttp (Func 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.Parse, 90000); + return ReadHttp (HttpRequest.Parse, 90000); } public HandshakeResponse ReadHandshakeResponse () { - return ReadHandshake (HandshakeResponse.Parse, 90000); + return ReadHttp (HandshakeResponse.Parse, 90000); } public bool WriteFrame (WebSocketFrame frame) diff --git a/websocket-sharp/websocket-sharp.csproj b/websocket-sharp/websocket-sharp.csproj index d112786d..f52f0df6 100644 --- a/websocket-sharp/websocket-sharp.csproj +++ b/websocket-sharp/websocket-sharp.csproj @@ -113,7 +113,6 @@ - @@ -136,6 +135,7 @@ +