Renamed HandshakeResponse.cs to HttpResponse.cs, and refactored
This commit is contained in:
parent
4427838632
commit
e45e51e1ef
@ -1,6 +1,6 @@
|
|||||||
#region License
|
#region License
|
||||||
/*
|
/*
|
||||||
* HandshakeResponse.cs
|
* HttpResponse.cs
|
||||||
*
|
*
|
||||||
* The MIT License
|
* The MIT License
|
||||||
*
|
*
|
||||||
@ -33,7 +33,7 @@ using WebSocketSharp.Net;
|
|||||||
|
|
||||||
namespace WebSocketSharp
|
namespace WebSocketSharp
|
||||||
{
|
{
|
||||||
internal class HandshakeResponse : HttpBase
|
internal class HttpResponse : HttpBase
|
||||||
{
|
{
|
||||||
#region Private Fields
|
#region Private Fields
|
||||||
|
|
||||||
@ -44,38 +44,37 @@ namespace WebSocketSharp
|
|||||||
|
|
||||||
#region Private Constructors
|
#region Private Constructors
|
||||||
|
|
||||||
private HandshakeResponse (Version version, NameValueCollection headers)
|
private HttpResponse (string code, string reason, Version version, NameValueCollection headers)
|
||||||
: base (version, headers)
|
: base (version, headers)
|
||||||
{
|
{
|
||||||
|
_code = code;
|
||||||
|
_reason = reason;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Internal Constructors
|
#region Internal Constructors
|
||||||
|
|
||||||
internal HandshakeResponse (HttpStatusCode code)
|
internal HttpResponse (HttpStatusCode code)
|
||||||
: base (HttpVersion.Version11, new NameValueCollection ())
|
: 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
|
#endregion
|
||||||
|
|
||||||
#region Public Properties
|
#region Public Properties
|
||||||
|
|
||||||
public AuthenticationChallenge AuthChallenge {
|
public AuthenticationChallenge AuthenticationChallenge {
|
||||||
get {
|
get {
|
||||||
var auth = Headers["WWW-Authenticate"];
|
var chal = Headers["WWW-Authenticate"];
|
||||||
return auth != null && auth.Length > 0
|
return chal != null && chal.Length > 0
|
||||||
? AuthenticationChallenge.Parse (auth)
|
? AuthenticationChallenge.Parse (chal)
|
||||||
: null;
|
: null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -86,6 +85,12 @@ namespace WebSocketSharp
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool IsProxyAuthenticationRequired {
|
||||||
|
get {
|
||||||
|
return _code == "407";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public bool IsUnauthorized {
|
public bool IsUnauthorized {
|
||||||
get {
|
get {
|
||||||
return _code == "401";
|
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 {
|
public string Reason {
|
||||||
get {
|
get {
|
||||||
return _reason;
|
return _reason;
|
||||||
@ -118,15 +132,26 @@ namespace WebSocketSharp
|
|||||||
|
|
||||||
#region Internal Methods
|
#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";
|
res.Headers["Connection"] = "close";
|
||||||
|
|
||||||
return res;
|
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);
|
var statusLine = headerParts[0].Split (new[] { ' ' }, 3);
|
||||||
if (statusLine.Length != 3)
|
if (statusLine.Length != 3)
|
||||||
@ -136,11 +161,8 @@ namespace WebSocketSharp
|
|||||||
for (int i = 1; i < headerParts.Length; i++)
|
for (int i = 1; i < headerParts.Length; i++)
|
||||||
headers.SetInternally (headerParts[i], true);
|
headers.SetInternally (headerParts[i], true);
|
||||||
|
|
||||||
var res = new HandshakeResponse (new Version (statusLine[0].Substring (5)), headers);
|
return new HttpResponse (
|
||||||
res._code = statusLine[1];
|
statusLine[1], statusLine[2], new Version (statusLine[0].Substring (5)), headers);
|
||||||
res._reason = statusLine[2];
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
@ -321,12 +321,12 @@ namespace WebSocketSharp.Net.WebSockets
|
|||||||
|
|
||||||
internal void Close (HttpStatusCode code)
|
internal void Close (HttpStatusCode code)
|
||||||
{
|
{
|
||||||
_websocket.Close (HandshakeResponse.CreateCloseResponse (code));
|
_websocket.Close (HttpResponse.CreateCloseResponse (code));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void SendAuthChallenge (string challenge)
|
internal void SendAuthChallenge (string challenge)
|
||||||
{
|
{
|
||||||
var res = new HandshakeResponse (HttpStatusCode.Unauthorized);
|
var res = new HttpResponse (HttpStatusCode.Unauthorized);
|
||||||
res.Headers ["WWW-Authenticate"] = challenge;
|
res.Headers ["WWW-Authenticate"] = challenge;
|
||||||
_stream.WriteHandshake (res);
|
_stream.WriteHandshake (res);
|
||||||
_request = _stream.ReadHttp<HttpRequest> (HttpRequest.Parse, 15000);
|
_request = _stream.ReadHttp<HttpRequest> (HttpRequest.Parse, 15000);
|
||||||
|
@ -693,11 +693,12 @@ namespace WebSocketSharp
|
|||||||
}
|
}
|
||||||
|
|
||||||
// As client
|
// As client
|
||||||
private string checkIfValidHandshakeResponse (HandshakeResponse response)
|
private string checkIfValidHandshakeResponse (HttpResponse response)
|
||||||
{
|
{
|
||||||
var headers = response.Headers;
|
var headers = response.Headers;
|
||||||
return response.IsUnauthorized
|
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
|
: !response.IsWebSocketResponse
|
||||||
? "Not WebSocket connection response."
|
? "Not WebSocket connection response."
|
||||||
: !validateSecWebSocketAcceptHeader (headers ["Sec-WebSocket-Accept"])
|
: !validateSecWebSocketAcceptHeader (headers ["Sec-WebSocket-Accept"])
|
||||||
@ -897,6 +898,15 @@ namespace WebSocketSharp
|
|||||||
: null;
|
: null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// As server
|
||||||
|
private HttpResponse createHandshakeCloseResponse (HttpStatusCode code)
|
||||||
|
{
|
||||||
|
var res = HttpResponse.CreateCloseResponse (code);
|
||||||
|
res.Headers ["Sec-WebSocket-Version"] = _version;
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
// As client
|
// As client
|
||||||
private HttpRequest createHandshakeRequest ()
|
private HttpRequest createHandshakeRequest ()
|
||||||
{
|
{
|
||||||
@ -936,11 +946,11 @@ namespace WebSocketSharp
|
|||||||
}
|
}
|
||||||
|
|
||||||
// As server
|
// As server
|
||||||
private HandshakeResponse createHandshakeResponse ()
|
private HttpResponse createHandshakeResponse ()
|
||||||
{
|
{
|
||||||
var res = new HandshakeResponse (HttpStatusCode.SwitchingProtocols);
|
var res = HttpResponse.CreateWebSocketResponse ();
|
||||||
var headers = res.Headers;
|
|
||||||
|
|
||||||
|
var headers = res.Headers;
|
||||||
headers ["Sec-WebSocket-Accept"] = CreateResponseKey (_base64Key);
|
headers ["Sec-WebSocket-Accept"] = CreateResponseKey (_base64Key);
|
||||||
|
|
||||||
if (_protocol != null)
|
if (_protocol != null)
|
||||||
@ -955,15 +965,6 @@ namespace WebSocketSharp
|
|||||||
return res;
|
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 ()
|
private MessageEventArgs dequeueFromMessageEventQueue ()
|
||||||
{
|
{
|
||||||
lock (_forMessageEventQueue)
|
lock (_forMessageEventQueue)
|
||||||
@ -1043,7 +1044,7 @@ namespace WebSocketSharp
|
|||||||
}
|
}
|
||||||
|
|
||||||
// As client
|
// As client
|
||||||
private HandshakeResponse receiveHandshakeResponse ()
|
private HttpResponse receiveHandshakeResponse ()
|
||||||
{
|
{
|
||||||
var res = _stream.ReadHandshakeResponse ();
|
var res = _stream.ReadHandshakeResponse ();
|
||||||
_logger.Debug ("A response to this WebSocket connection request:\n" + res.ToString ());
|
_logger.Debug ("A response to this WebSocket connection request:\n" + res.ToString ());
|
||||||
@ -1073,7 +1074,7 @@ namespace WebSocketSharp
|
|||||||
}
|
}
|
||||||
|
|
||||||
// As server
|
// As server
|
||||||
private bool send (HandshakeResponse response)
|
private bool send (HttpResponse response)
|
||||||
{
|
{
|
||||||
_logger.Debug (
|
_logger.Debug (
|
||||||
"A response to the WebSocket connection request:\n" + response.ToString ());
|
"A response to the WebSocket connection request:\n" + response.ToString ());
|
||||||
@ -1226,12 +1227,12 @@ namespace WebSocketSharp
|
|||||||
}
|
}
|
||||||
|
|
||||||
// As client
|
// As client
|
||||||
private HandshakeResponse sendHandshakeRequest ()
|
private HttpResponse sendHandshakeRequest ()
|
||||||
{
|
{
|
||||||
var req = createHandshakeRequest ();
|
var req = createHandshakeRequest ();
|
||||||
var res = sendHandshakeRequest (req);
|
var res = sendHandshakeRequest (req);
|
||||||
if (res.IsUnauthorized) {
|
if (res.IsUnauthorized) {
|
||||||
_authChallenge = res.AuthChallenge;
|
_authChallenge = res.AuthenticationChallenge;
|
||||||
if (_credentials != null &&
|
if (_credentials != null &&
|
||||||
(!_preAuth || _authChallenge.Scheme == AuthenticationSchemes.Digest)) {
|
(!_preAuth || _authChallenge.Scheme == AuthenticationSchemes.Digest)) {
|
||||||
if (res.Headers.Contains ("Connection", "close")) {
|
if (res.Headers.Contains ("Connection", "close")) {
|
||||||
@ -1250,7 +1251,7 @@ namespace WebSocketSharp
|
|||||||
}
|
}
|
||||||
|
|
||||||
// As client
|
// As client
|
||||||
private HandshakeResponse sendHandshakeRequest (HttpRequest request)
|
private HttpResponse sendHandshakeRequest (HttpRequest request)
|
||||||
{
|
{
|
||||||
send (request);
|
send (request);
|
||||||
return receiveHandshakeResponse ();
|
return receiveHandshakeResponse ();
|
||||||
@ -1373,7 +1374,7 @@ namespace WebSocketSharp
|
|||||||
#region Internal Methods
|
#region Internal Methods
|
||||||
|
|
||||||
// As server
|
// As server
|
||||||
internal void Close (HandshakeResponse response)
|
internal void Close (HttpResponse response)
|
||||||
{
|
{
|
||||||
_readyState = WebSocketState.Closing;
|
_readyState = WebSocketState.Closing;
|
||||||
|
|
||||||
@ -1386,7 +1387,7 @@ namespace WebSocketSharp
|
|||||||
// As server
|
// As server
|
||||||
internal void Close (HttpStatusCode code)
|
internal void Close (HttpStatusCode code)
|
||||||
{
|
{
|
||||||
Close (createHandshakeResponse (code));
|
Close (createHandshakeCloseResponse (code));
|
||||||
}
|
}
|
||||||
|
|
||||||
// As server
|
// As server
|
||||||
|
@ -267,9 +267,9 @@ namespace WebSocketSharp
|
|||||||
return ReadHttp<HttpRequest> (HttpRequest.Parse, 90000);
|
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)
|
public bool WriteFrame (WebSocketFrame frame)
|
||||||
|
@ -113,7 +113,6 @@
|
|||||||
<Compile Include="LogData.cs" />
|
<Compile Include="LogData.cs" />
|
||||||
<Compile Include="LogLevel.cs" />
|
<Compile Include="LogLevel.cs" />
|
||||||
<Compile Include="Logger.cs" />
|
<Compile Include="Logger.cs" />
|
||||||
<Compile Include="HandshakeResponse.cs" />
|
|
||||||
<Compile Include="WebSocketState.cs" />
|
<Compile Include="WebSocketState.cs" />
|
||||||
<Compile Include="Server\IWebSocketSession.cs" />
|
<Compile Include="Server\IWebSocketSession.cs" />
|
||||||
<Compile Include="Server\WebSocketSessionManager.cs" />
|
<Compile Include="Server\WebSocketSessionManager.cs" />
|
||||||
@ -136,6 +135,7 @@
|
|||||||
<Compile Include="Net\AuthenticationBase.cs" />
|
<Compile Include="Net\AuthenticationBase.cs" />
|
||||||
<Compile Include="HttpBase.cs" />
|
<Compile Include="HttpBase.cs" />
|
||||||
<Compile Include="HttpRequest.cs" />
|
<Compile Include="HttpRequest.cs" />
|
||||||
|
<Compile Include="HttpResponse.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
Loading…
Reference in New Issue
Block a user