Renamed HandshakeRequest.cs to HttpRequest.cs, and refactored
This commit is contained in:
parent
f75b8fde86
commit
4427838632
@ -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>
|
||||
|
Loading…
Reference in New Issue
Block a user