diff --git a/websocket-sharp/HttpResponse.cs b/websocket-sharp/HttpResponse.cs
index e6bf4a7f..7332b801 100644
--- a/websocket-sharp/HttpResponse.cs
+++ b/websocket-sharp/HttpResponse.cs
@@ -140,6 +140,14 @@ namespace WebSocketSharp
return res;
}
+ internal static HttpResponse CreateUnauthorizedResponse (string challenge)
+ {
+ var res = new HttpResponse (HttpStatusCode.Unauthorized);
+ res.Headers["WWW-Authenticate"] = challenge;
+
+ return res;
+ }
+
internal static HttpResponse CreateWebSocketResponse ()
{
var res = new HttpResponse (HttpStatusCode.SwitchingProtocols);
diff --git a/websocket-sharp/Net/WebSockets/TcpListenerWebSocketContext.cs b/websocket-sharp/Net/WebSockets/TcpListenerWebSocketContext.cs
index e6e9c7cd..a15ce957 100644
--- a/websocket-sharp/Net/WebSockets/TcpListenerWebSocketContext.cs
+++ b/websocket-sharp/Net/WebSockets/TcpListenerWebSocketContext.cs
@@ -40,18 +40,16 @@ namespace WebSocketSharp.Net.WebSockets
/// Provides the properties used to access the information in a WebSocket connection request
/// received by the .
///
- ///
- ///
- public class TcpListenerWebSocketContext : WebSocketContext
+ internal class TcpListenerWebSocketContext : WebSocketContext
{
#region Private Fields
- private TcpClient _client;
private CookieCollection _cookies;
private NameValueCollection _queryString;
private HttpRequest _request;
private bool _secure;
private WebSocketStream _stream;
+ private TcpClient _tcpClient;
private Uri _uri;
private IPrincipal _user;
private WebSocket _websocket;
@@ -61,14 +59,14 @@ namespace WebSocketSharp.Net.WebSockets
#region Internal Constructors
internal TcpListenerWebSocketContext (
- TcpClient client, string protocol, bool secure, X509Certificate cert, Logger logger)
+ TcpClient tcpClient, string protocol, bool secure, X509Certificate certificate, Logger logger)
{
- _client = client;
+ _tcpClient = tcpClient;
_secure = secure;
- _stream = WebSocketStream.CreateServerStream (client, secure, cert);
+ _stream = WebSocketStream.CreateServerStream (tcpClient, secure, certificate);
_request = _stream.ReadHttpRequest (90000);
_uri = HttpUtility.CreateRequestUrl (
- _request.RequestUri, _request.Headers ["Host"], _request.IsWebSocketRequest, secure);
+ _request.RequestUri, _request.Headers["Host"], _request.IsWebSocketRequest, secure);
_websocket = new WebSocket (this, protocol, logger);
}
@@ -119,7 +117,7 @@ namespace WebSocketSharp.Net.WebSockets
///
public override string Host {
get {
- return _request.Headers ["Host"];
+ return _request.Headers["Host"];
}
}
@@ -179,7 +177,7 @@ namespace WebSocketSharp.Net.WebSockets
///
public override string Origin {
get {
- return _request.Headers ["Origin"];
+ return _request.Headers["Origin"];
}
}
@@ -193,7 +191,7 @@ namespace WebSocketSharp.Net.WebSockets
get {
return _queryString ??
(_queryString = HttpUtility.ParseQueryStringInternally (
- _uri != null ? _uri.Query : null, Encoding.UTF8));
+ _uri != null ? _uri.Query : null, Encoding.UTF8));
}
}
@@ -221,7 +219,7 @@ namespace WebSocketSharp.Net.WebSockets
///
public override string SecWebSocketKey {
get {
- return _request.Headers ["Sec-WebSocket-Key"];
+ return _request.Headers["Sec-WebSocket-Key"];
}
}
@@ -238,7 +236,7 @@ namespace WebSocketSharp.Net.WebSockets
///
public override IEnumerable SecWebSocketProtocols {
get {
- var protocols = _request.Headers ["Sec-WebSocket-Protocol"];
+ var protocols = _request.Headers["Sec-WebSocket-Protocol"];
if (protocols != null)
foreach (var protocol in protocols.Split (','))
yield return protocol.Trim ();
@@ -256,7 +254,7 @@ namespace WebSocketSharp.Net.WebSockets
///
public override string SecWebSocketVersion {
get {
- return _request.Headers ["Sec-WebSocket-Version"];
+ return _request.Headers["Sec-WebSocket-Version"];
}
}
@@ -268,7 +266,7 @@ namespace WebSocketSharp.Net.WebSockets
///
public override System.Net.IPEndPoint ServerEndPoint {
get {
- return (System.Net.IPEndPoint) _client.Client.LocalEndPoint;
+ return (System.Net.IPEndPoint) _tcpClient.Client.LocalEndPoint;
}
}
@@ -292,7 +290,7 @@ namespace WebSocketSharp.Net.WebSockets
///
public override System.Net.IPEndPoint UserEndPoint {
get {
- return (System.Net.IPEndPoint) _client.Client.RemoteEndPoint;
+ return (System.Net.IPEndPoint) _tcpClient.Client.RemoteEndPoint;
}
}
@@ -316,7 +314,7 @@ namespace WebSocketSharp.Net.WebSockets
internal void Close ()
{
_stream.Close ();
- _client.Close ();
+ _tcpClient.Close ();
}
internal void Close (HttpStatusCode code)
@@ -324,11 +322,9 @@ namespace WebSocketSharp.Net.WebSockets
_websocket.Close (HttpResponse.CreateCloseResponse (code));
}
- internal void SendAuthChallenge (string challenge)
+ internal void SendAuthenticationChallenge (string challenge)
{
- var res = new HttpResponse (HttpStatusCode.Unauthorized);
- res.Headers ["WWW-Authenticate"] = challenge;
- _stream.WriteBytes (res.ToByteArray ());
+ _stream.WriteHttp (HttpResponse.CreateUnauthorizedResponse (challenge));
_request = _stream.ReadHttpRequest (15000);
}
diff --git a/websocket-sharp/Server/WebSocketServer.cs b/websocket-sharp/Server/WebSocketServer.cs
index 007af3ed..d8c84555 100644
--- a/websocket-sharp/Server/WebSocketServer.cs
+++ b/websocket-sharp/Server/WebSocketServer.cs
@@ -546,7 +546,7 @@ namespace WebSocketSharp.Server
var header = context.Headers ["Authorization"];
if (header == null || !header.StartsWith (expected, StringComparison.OrdinalIgnoreCase)) {
- context.SendAuthChallenge (challenge);
+ context.SendAuthenticationChallenge (challenge);
return auth ();
}
@@ -554,7 +554,7 @@ namespace WebSocketSharp.Server
if (context.IsAuthenticated)
return true;
- context.SendAuthChallenge (challenge);
+ context.SendAuthenticationChallenge (challenge);
return auth ();
};