Renamed HandshakeResponse.cs to HttpResponse.cs, and refactored

This commit is contained in:
sta 2014-07-15 16:39:38 +09:00
parent 4427838632
commit e45e51e1ef
5 changed files with 74 additions and 51 deletions

View File

@ -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

View File

@ -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);

View File

@ -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

View File

@ -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)

View File

@ -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>