diff --git a/websocket-sharp/Server/HttpServer.cs b/websocket-sharp/Server/HttpServer.cs
index bff346be..f62c1e5b 100644
--- a/websocket-sharp/Server/HttpServer.cs
+++ b/websocket-sharp/Server/HttpServer.cs
@@ -462,9 +462,9 @@ namespace WebSocketSharp.Server
return;
}
+ _serviceHosts.Stop (data);
_listener.Close ();
_receiveRequestThread.Join (5 * 1000);
- _serviceHosts.Stop (code, reason);
_listening = false;
}
@@ -579,9 +579,9 @@ namespace WebSocketSharp.Server
if (!_listening)
return;
+ _serviceHosts.Stop ();
_listener.Close ();
_receiveRequestThread.Join (5 * 1000);
- _serviceHosts.Stop ();
_listening = false;
}
diff --git a/websocket-sharp/Server/IWebSocketServiceHost.cs b/websocket-sharp/Server/IWebSocketServiceHost.cs
index ad98dc00..85b8a206 100644
--- a/websocket-sharp/Server/IWebSocketServiceHost.cs
+++ b/websocket-sharp/Server/IWebSocketServiceHost.cs
@@ -201,14 +201,11 @@ namespace WebSocketSharp.Server
void Stop ();
///
- /// Stops the WebSocket service host with the specified and .
+ /// Stops the WebSocket service host with the specified array of .
///
- ///
- /// A that contains a status code indicating the reason for stop.
- ///
- ///
- /// A that contains the reason for stop.
+ ///
+ /// An array of that contains the reason for stop.
///
- void Stop (ushort code, string reason);
+ void Stop (byte [] data);
}
}
diff --git a/websocket-sharp/Server/WebSocketServer.cs b/websocket-sharp/Server/WebSocketServer.cs
index 2917ab04..0ea0cf94 100644
--- a/websocket-sharp/Server/WebSocketServer.cs
+++ b/websocket-sharp/Server/WebSocketServer.cs
@@ -207,7 +207,7 @@ namespace WebSocketSharp.Server
}
base.Stop ();
- _serviceHosts.Stop (code, reason);
+ _serviceHosts.Stop (data);
}
#endregion
diff --git a/websocket-sharp/Server/WebSocketService.cs b/websocket-sharp/Server/WebSocketService.cs
index a380bf2a..3b0ea584 100644
--- a/websocket-sharp/Server/WebSocketService.cs
+++ b/websocket-sharp/Server/WebSocketService.cs
@@ -211,6 +211,11 @@ namespace WebSocketSharp.Server
_websocket.SendAsync (data, completed);
}
+ internal void Stop (byte [] data)
+ {
+ _websocket.Close (data);
+ }
+
#endregion
#region Protected Methods
diff --git a/websocket-sharp/Server/WebSocketServiceHost.cs b/websocket-sharp/Server/WebSocketServiceHost.cs
index 818874c2..b4472494 100644
--- a/websocket-sharp/Server/WebSocketServiceHost.cs
+++ b/websocket-sharp/Server/WebSocketServiceHost.cs
@@ -280,7 +280,7 @@ namespace WebSocketSharp.Server
}
base.Stop ();
- _sessions.Stop (code, reason);
+ _sessions.Stop (data);
}
#endregion
@@ -765,19 +765,15 @@ namespace WebSocketSharp.Server
}
///
- /// Stops receiving the WebSocket connection requests with the specified and
- /// .
+ /// Stops the WebSocket service host with the specified array of .
///
- ///
- /// A that contains a status code indicating the reason for stop.
- ///
- ///
- /// A that contains the reason for stop.
+ ///
+ /// An array of that contains the reason for stop.
///
- void IWebSocketServiceHost.Stop (ushort code, string reason)
+ void IWebSocketServiceHost.Stop (byte [] data)
{
base.Stop ();
- _sessions.Stop (code, reason);
+ _sessions.Stop (data);
}
#endregion
diff --git a/websocket-sharp/Server/WebSocketServiceHostManager.cs b/websocket-sharp/Server/WebSocketServiceHostManager.cs
index 2bc238ff..4a622bb5 100644
--- a/websocket-sharp/Server/WebSocketServiceHostManager.cs
+++ b/websocket-sharp/Server/WebSocketServiceHostManager.cs
@@ -193,7 +193,7 @@ namespace WebSocketSharp.Server
_serviceHosts.Remove (servicePath);
}
- host.Stop ((ushort) CloseStatusCode.AWAY, String.Empty);
+ host.Stop (((ushort) CloseStatusCode.AWAY).ToByteArray (ByteOrder.BIG));
return true;
}
@@ -208,12 +208,12 @@ namespace WebSocketSharp.Server
}
}
- internal void Stop (ushort code, string reason)
+ internal void Stop (byte [] data)
{
lock (_sync)
{
foreach (var host in _serviceHosts.Values)
- host.Stop (code, reason);
+ host.Stop (data);
_serviceHosts.Clear ();
}
diff --git a/websocket-sharp/Server/WebSocketServiceManager.cs b/websocket-sharp/Server/WebSocketServiceManager.cs
index cddd2932..4e17fe96 100644
--- a/websocket-sharp/Server/WebSocketServiceManager.cs
+++ b/websocket-sharp/Server/WebSocketServiceManager.cs
@@ -508,7 +508,7 @@ namespace WebSocketSharp.Server
}
}
- internal void Stop (ushort code, string reason)
+ internal void Stop (byte [] data)
{
stopSweepTimer ();
lock (_sync)
@@ -518,7 +518,7 @@ namespace WebSocketSharp.Server
_stopped = true;
foreach (var service in copy ().Values)
- service.Stop (code, reason);
+ service.Stop (data);
}
}
@@ -588,7 +588,7 @@ namespace WebSocketSharp.Server
{
var state = service.WebSocket.ReadyState;
if (state == WebSocketState.OPEN)
- service.Stop (CloseStatusCode.ABNORMAL, String.Empty);
+ service.Stop (((ushort) CloseStatusCode.ABNORMAL).ToByteArray (ByteOrder.BIG));
else if (state == WebSocketState.CLOSING)
continue;
else
diff --git a/websocket-sharp/WebSocket.cs b/websocket-sharp/WebSocket.cs
index 3bc4ce6c..e4b843f0 100644
--- a/websocket-sharp/WebSocket.cs
+++ b/websocket-sharp/WebSocket.cs
@@ -586,9 +586,9 @@ namespace WebSocketSharp
private void close (ushort code, string reason)
{
var data = code.Append (reason);
- if (data.Length > 125)
+ var msg = data.CheckIfValidCloseData ();
+ if (msg != null)
{
- var msg = "The payload length of a Close frame must be 125 bytes or less.";
_logger.Error (String.Format ("{0}\ncode: {1}\nreason: {2}", msg, code, reason));
error (msg);
@@ -1314,6 +1314,12 @@ namespace WebSocketSharp
#region Internal Methods
+ // As server
+ internal void Close (byte [] data)
+ {
+ close (new PayloadData (data));
+ }
+
// As server
internal void Close (HttpStatusCode code)
{
@@ -1346,7 +1352,7 @@ namespace WebSocketSharp
///
public void Close (ushort code)
{
- Close (code, String.Empty);
+ Close (code, "");
}
///
@@ -1358,7 +1364,7 @@ namespace WebSocketSharp
///
public void Close (CloseStatusCode code)
{
- close ((ushort) code, String.Empty);
+ close (new PayloadData (((ushort) code).ToByteArray (ByteOrder.BIG)));
}
///
@@ -1377,9 +1383,9 @@ namespace WebSocketSharp
///
public void Close (ushort code, string reason)
{
- if (!code.IsCloseStatusCode ())
+ var msg = code.CheckIfValidCloseStatusCode ();
+ if (msg != null)
{
- var msg = "Invalid close status code.";
_logger.Error (String.Format ("{0}\ncode: {1}", msg, code));
error (msg);