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