Refactored TcpListenerWebSocketContext.cs
This commit is contained in:
		@@ -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);
 | 
			
		||||
 
 | 
			
		||||
@@ -40,18 +40,16 @@ namespace WebSocketSharp.Net.WebSockets
 | 
			
		||||
  /// Provides the properties used to access the information in a WebSocket connection request
 | 
			
		||||
  /// received by the <see cref="TcpListener"/>.
 | 
			
		||||
  /// </summary>
 | 
			
		||||
  /// <remarks>
 | 
			
		||||
  /// </remarks>
 | 
			
		||||
  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,11 +59,11 @@ 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);
 | 
			
		||||
@@ -268,7 +266,7 @@ namespace WebSocketSharp.Net.WebSockets
 | 
			
		||||
    /// </value>
 | 
			
		||||
    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
 | 
			
		||||
    /// </value>
 | 
			
		||||
    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);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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 ();
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user