Modified AcceptWebSocket method with subprotocol

This commit is contained in:
sta 2014-05-06 15:24:54 +09:00
parent b519af5f95
commit 85e567bd72
7 changed files with 37 additions and 12 deletions

View File

@ -510,9 +510,9 @@ namespace WebSocketSharp
}
internal static TcpListenerWebSocketContext GetWebSocketContext (
this TcpClient client, X509Certificate cert, bool secure, Logger logger)
this TcpClient client, string protocol, X509Certificate cert, bool secure, Logger logger)
{
return new TcpListenerWebSocketContext (client, cert, secure, logger);
return new TcpListenerWebSocketContext (client, protocol, cert, secure, logger);
}
internal static bool IsCompressionExtension (this string value)

View File

@ -204,12 +204,34 @@ namespace WebSocketSharp.Net
/// A <see cref="HttpListenerWebSocketContext"/> that represents the WebSocket connection
/// request.
/// </returns>
/// <param name="protocol">
/// A <see cref="string"/> that represents the subprotocol used in the WebSocket connection.
/// </param>
/// <param name="logger">
/// A <see cref="Logger"/> that provides the logging functions used in the WebSocket attempts.
/// </param>
public HttpListenerWebSocketContext AcceptWebSocket (Logger logger)
/// <exception cref="ArgumentException">
/// <para>
/// <paramref name="protocol"/> is empty.
/// </para>
/// <para>
/// -or-
/// </para>
/// <para>
/// <paramref name="protocol"/> contains an invalid character.
/// </para>
/// </exception>
public HttpListenerWebSocketContext AcceptWebSocket (string protocol, Logger logger)
{
return new HttpListenerWebSocketContext (this, logger);
if (protocol != null) {
if (protocol.Length == 0)
throw new ArgumentException ("An empty string.", "protocol");
if (!protocol.IsToken ())
throw new ArgumentException ("Contains an invalid character.", "protocol");
}
return new HttpListenerWebSocketContext (this, protocol, logger ?? new Logger ());
}
#endregion

View File

@ -51,11 +51,12 @@ namespace WebSocketSharp.Net.WebSockets
#region Internal Constructors
internal HttpListenerWebSocketContext (HttpListenerContext context, Logger logger)
internal HttpListenerWebSocketContext (
HttpListenerContext context, string protocol, Logger logger)
{
_context = context;
_stream = WsStream.CreateServerStream (context);
_websocket = new WebSocket (this, logger ?? new Logger ());
_websocket = new WebSocket (this, protocol, logger);
}
#endregion

View File

@ -59,7 +59,7 @@ namespace WebSocketSharp.Net.WebSockets
#region Internal Constructors
internal TcpListenerWebSocketContext (
TcpClient client, X509Certificate cert, bool secure, Logger logger)
TcpClient client, string protocol, X509Certificate cert, bool secure, Logger logger)
{
_client = client;
_secure = secure;
@ -67,7 +67,7 @@ namespace WebSocketSharp.Net.WebSockets
_request = _stream.ReadHandshake<HandshakeRequest> (
HandshakeRequest.Parse, 90000);
_websocket = new WebSocket (this, logger);
_websocket = new WebSocket (this, protocol, logger);
}
#endregion

View File

@ -489,7 +489,7 @@ namespace WebSocketSharp.Server
return;
if (context.Request.IsUpgradeTo ("websocket")) {
acceptWebSocketRequest (context.AcceptWebSocket (_logger));
acceptWebSocketRequest (context.AcceptWebSocket (null, _logger));
return;
}

View File

@ -476,7 +476,7 @@ namespace WebSocketSharp.Server
ThreadPool.QueueUserWorkItem (
state => {
try {
var context = client.GetWebSocketContext (_cert, _secure, _logger);
var context = client.GetWebSocketContext (null, _cert, _secure, _logger);
if (_authSchemes != AuthenticationSchemes.Anonymous &&
!authenticateRequest (_authSchemes, context))
return;

View File

@ -106,9 +106,10 @@ namespace WebSocketSharp
#region Internal Constructors
// As server
internal WebSocket (HttpListenerWebSocketContext context, Logger logger)
internal WebSocket (HttpListenerWebSocketContext context, string protocol, Logger logger)
{
_context = context;
_protocol = protocol;
_logger = logger;
_closeContext = context.Close;
@ -120,9 +121,10 @@ namespace WebSocketSharp
}
// As server
internal WebSocket (TcpListenerWebSocketContext context, Logger logger)
internal WebSocket (TcpListenerWebSocketContext context, string protocol, Logger logger)
{
_context = context;
_protocol = protocol;
_logger = logger;
_closeContext = context.Close;