Modified AcceptWebSocket method with subprotocol
This commit is contained in:
parent
b519af5f95
commit
85e567bd72
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -489,7 +489,7 @@ namespace WebSocketSharp.Server
|
||||
return;
|
||||
|
||||
if (context.Request.IsUpgradeTo ("websocket")) {
|
||||
acceptWebSocketRequest (context.AcceptWebSocket (_logger));
|
||||
acceptWebSocketRequest (context.AcceptWebSocket (null, _logger));
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user