diff --git a/websocket-sharp/Ext.cs b/websocket-sharp/Ext.cs
index b1c09412..09df2fa8 100644
--- a/websocket-sharp/Ext.cs
+++ b/websocket-sharp/Ext.cs
@@ -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)
diff --git a/websocket-sharp/Net/HttpListenerContext.cs b/websocket-sharp/Net/HttpListenerContext.cs
index 60db71a1..290e7fc6 100644
--- a/websocket-sharp/Net/HttpListenerContext.cs
+++ b/websocket-sharp/Net/HttpListenerContext.cs
@@ -204,12 +204,34 @@ namespace WebSocketSharp.Net
/// A that represents the WebSocket connection
/// request.
///
+ ///
+ /// A that represents the subprotocol used in the WebSocket connection.
+ ///
///
/// A that provides the logging functions used in the WebSocket attempts.
///
- public HttpListenerWebSocketContext AcceptWebSocket (Logger logger)
+ ///
+ ///
+ /// is empty.
+ ///
+ ///
+ /// -or-
+ ///
+ ///
+ /// contains an invalid character.
+ ///
+ ///
+ 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
diff --git a/websocket-sharp/Net/WebSockets/HttpListenerWebSocketContext.cs b/websocket-sharp/Net/WebSockets/HttpListenerWebSocketContext.cs
index a6e7d01e..f1c2c2ff 100644
--- a/websocket-sharp/Net/WebSockets/HttpListenerWebSocketContext.cs
+++ b/websocket-sharp/Net/WebSockets/HttpListenerWebSocketContext.cs
@@ -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
diff --git a/websocket-sharp/Net/WebSockets/TcpListenerWebSocketContext.cs b/websocket-sharp/Net/WebSockets/TcpListenerWebSocketContext.cs
index 44b60cb2..3f364e9f 100644
--- a/websocket-sharp/Net/WebSockets/TcpListenerWebSocketContext.cs
+++ b/websocket-sharp/Net/WebSockets/TcpListenerWebSocketContext.cs
@@ -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.Parse, 90000);
- _websocket = new WebSocket (this, logger);
+ _websocket = new WebSocket (this, protocol, logger);
}
#endregion
diff --git a/websocket-sharp/Server/HttpServer.cs b/websocket-sharp/Server/HttpServer.cs
index a3886539..19e14a6e 100644
--- a/websocket-sharp/Server/HttpServer.cs
+++ b/websocket-sharp/Server/HttpServer.cs
@@ -489,7 +489,7 @@ namespace WebSocketSharp.Server
return;
if (context.Request.IsUpgradeTo ("websocket")) {
- acceptWebSocketRequest (context.AcceptWebSocket (_logger));
+ acceptWebSocketRequest (context.AcceptWebSocket (null, _logger));
return;
}
diff --git a/websocket-sharp/Server/WebSocketServer.cs b/websocket-sharp/Server/WebSocketServer.cs
index 0f69ee98..c6996d77 100644
--- a/websocket-sharp/Server/WebSocketServer.cs
+++ b/websocket-sharp/Server/WebSocketServer.cs
@@ -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;
diff --git a/websocket-sharp/WebSocket.cs b/websocket-sharp/WebSocket.cs
index 0f1ad645..da34a715 100644
--- a/websocket-sharp/WebSocket.cs
+++ b/websocket-sharp/WebSocket.cs
@@ -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;