Modified AcceptWebSocket method with subprotocol
This commit is contained in:
parent
b519af5f95
commit
85e567bd72
@ -510,9 +510,9 @@ namespace WebSocketSharp
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal static TcpListenerWebSocketContext GetWebSocketContext (
|
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)
|
internal static bool IsCompressionExtension (this string value)
|
||||||
|
@ -204,12 +204,34 @@ namespace WebSocketSharp.Net
|
|||||||
/// A <see cref="HttpListenerWebSocketContext"/> that represents the WebSocket connection
|
/// A <see cref="HttpListenerWebSocketContext"/> that represents the WebSocket connection
|
||||||
/// request.
|
/// request.
|
||||||
/// </returns>
|
/// </returns>
|
||||||
|
/// <param name="protocol">
|
||||||
|
/// A <see cref="string"/> that represents the subprotocol used in the WebSocket connection.
|
||||||
|
/// </param>
|
||||||
/// <param name="logger">
|
/// <param name="logger">
|
||||||
/// A <see cref="Logger"/> that provides the logging functions used in the WebSocket attempts.
|
/// A <see cref="Logger"/> that provides the logging functions used in the WebSocket attempts.
|
||||||
/// </param>
|
/// </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
|
#endregion
|
||||||
|
@ -51,11 +51,12 @@ namespace WebSocketSharp.Net.WebSockets
|
|||||||
|
|
||||||
#region Internal Constructors
|
#region Internal Constructors
|
||||||
|
|
||||||
internal HttpListenerWebSocketContext (HttpListenerContext context, Logger logger)
|
internal HttpListenerWebSocketContext (
|
||||||
|
HttpListenerContext context, string protocol, Logger logger)
|
||||||
{
|
{
|
||||||
_context = context;
|
_context = context;
|
||||||
_stream = WsStream.CreateServerStream (context);
|
_stream = WsStream.CreateServerStream (context);
|
||||||
_websocket = new WebSocket (this, logger ?? new Logger ());
|
_websocket = new WebSocket (this, protocol, logger);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -59,7 +59,7 @@ namespace WebSocketSharp.Net.WebSockets
|
|||||||
#region Internal Constructors
|
#region Internal Constructors
|
||||||
|
|
||||||
internal TcpListenerWebSocketContext (
|
internal TcpListenerWebSocketContext (
|
||||||
TcpClient client, X509Certificate cert, bool secure, Logger logger)
|
TcpClient client, string protocol, X509Certificate cert, bool secure, Logger logger)
|
||||||
{
|
{
|
||||||
_client = client;
|
_client = client;
|
||||||
_secure = secure;
|
_secure = secure;
|
||||||
@ -67,7 +67,7 @@ namespace WebSocketSharp.Net.WebSockets
|
|||||||
_request = _stream.ReadHandshake<HandshakeRequest> (
|
_request = _stream.ReadHandshake<HandshakeRequest> (
|
||||||
HandshakeRequest.Parse, 90000);
|
HandshakeRequest.Parse, 90000);
|
||||||
|
|
||||||
_websocket = new WebSocket (this, logger);
|
_websocket = new WebSocket (this, protocol, logger);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -489,7 +489,7 @@ namespace WebSocketSharp.Server
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if (context.Request.IsUpgradeTo ("websocket")) {
|
if (context.Request.IsUpgradeTo ("websocket")) {
|
||||||
acceptWebSocketRequest (context.AcceptWebSocket (_logger));
|
acceptWebSocketRequest (context.AcceptWebSocket (null, _logger));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -476,7 +476,7 @@ namespace WebSocketSharp.Server
|
|||||||
ThreadPool.QueueUserWorkItem (
|
ThreadPool.QueueUserWorkItem (
|
||||||
state => {
|
state => {
|
||||||
try {
|
try {
|
||||||
var context = client.GetWebSocketContext (_cert, _secure, _logger);
|
var context = client.GetWebSocketContext (null, _cert, _secure, _logger);
|
||||||
if (_authSchemes != AuthenticationSchemes.Anonymous &&
|
if (_authSchemes != AuthenticationSchemes.Anonymous &&
|
||||||
!authenticateRequest (_authSchemes, context))
|
!authenticateRequest (_authSchemes, context))
|
||||||
return;
|
return;
|
||||||
|
@ -106,9 +106,10 @@ namespace WebSocketSharp
|
|||||||
#region Internal Constructors
|
#region Internal Constructors
|
||||||
|
|
||||||
// As server
|
// As server
|
||||||
internal WebSocket (HttpListenerWebSocketContext context, Logger logger)
|
internal WebSocket (HttpListenerWebSocketContext context, string protocol, Logger logger)
|
||||||
{
|
{
|
||||||
_context = context;
|
_context = context;
|
||||||
|
_protocol = protocol;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
|
|
||||||
_closeContext = context.Close;
|
_closeContext = context.Close;
|
||||||
@ -120,9 +121,10 @@ namespace WebSocketSharp
|
|||||||
}
|
}
|
||||||
|
|
||||||
// As server
|
// As server
|
||||||
internal WebSocket (TcpListenerWebSocketContext context, Logger logger)
|
internal WebSocket (TcpListenerWebSocketContext context, string protocol, Logger logger)
|
||||||
{
|
{
|
||||||
_context = context;
|
_context = context;
|
||||||
|
_protocol = protocol;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
|
|
||||||
_closeContext = context.Close;
|
_closeContext = context.Close;
|
||||||
|
Loading…
Reference in New Issue
Block a user