From f072485b8383033398e41c4fe1141d8b34b7f0a2 Mon Sep 17 00:00:00 2001 From: sta Date: Mon, 26 Jan 2015 17:34:02 +0900 Subject: [PATCH] Modified the WebSocket class, fix for 'No Status Code' for the close --- websocket-sharp/WebSocket.cs | 78 +++++++++++++++++++++++------------- 1 file changed, 50 insertions(+), 28 deletions(-) diff --git a/websocket-sharp/WebSocket.cs b/websocket-sharp/WebSocket.cs index f448b404..79647a5b 100644 --- a/websocket-sharp/WebSocket.cs +++ b/websocket-sharp/WebSocket.cs @@ -1694,9 +1694,7 @@ namespace WebSocketSharp /// public void Close (ushort code) { - var msg = _readyState.CheckIfClosable () ?? - code.CheckIfValidCloseStatusCode (); - + var msg = _readyState.CheckIfClosable () ?? code.CheckIfValidCloseStatusCode (); if (msg != null) { _logger.Error (msg); error ("An error has occurred in closing the connection.", null); @@ -1704,6 +1702,11 @@ namespace WebSocketSharp return; } + if (code.IsNoStatusCode ()) { + close (new CloseEventArgs (), true, true); + return; + } + var send = !code.IsReserved (); close (new CloseEventArgs (code), send, send); } @@ -1726,6 +1729,11 @@ namespace WebSocketSharp return; } + if (code.IsNoStatusCode ()) { + close (new CloseEventArgs (), true, true); + return; + } + var send = !code.IsReserved (); close (new CloseEventArgs (code), send, send); } @@ -1748,11 +1756,7 @@ namespace WebSocketSharp /// public void Close (ushort code, string reason) { - CloseEventArgs e = null; - var msg = _readyState.CheckIfClosable () ?? - code.CheckIfValidCloseStatusCode () ?? - (e = new CloseEventArgs (code, reason)).RawData.CheckIfValidControlData ("reason"); - + var msg = _readyState.CheckIfClosable () ?? code.CheckIfValidCloseParameters (reason); if (msg != null) { _logger.Error (msg); error ("An error has occurred in closing the connection.", null); @@ -1760,8 +1764,13 @@ namespace WebSocketSharp return; } + if (code.IsNoStatusCode ()) { + close (new CloseEventArgs (), true, true); + return; + } + var send = !code.IsReserved (); - close (e, send, send); + close (new CloseEventArgs (code, reason), send, send); } /// @@ -1781,10 +1790,7 @@ namespace WebSocketSharp /// public void Close (CloseStatusCode code, string reason) { - CloseEventArgs e = null; - var msg = _readyState.CheckIfClosable () ?? - (e = new CloseEventArgs (code, reason)).RawData.CheckIfValidControlData ("reason"); - + var msg = _readyState.CheckIfClosable () ?? code.CheckIfValidCloseParameters (reason); if (msg != null) { _logger.Error (msg); error ("An error has occurred in closing the connection.", null); @@ -1792,8 +1798,13 @@ namespace WebSocketSharp return; } + if (code.IsNoStatusCode ()) { + close (new CloseEventArgs (), true, true); + return; + } + var send = !code.IsReserved (); - close (e, send, send); + close (new CloseEventArgs (code, reason), send, send); } /// @@ -1833,9 +1844,7 @@ namespace WebSocketSharp /// public void CloseAsync (ushort code) { - var msg = _readyState.CheckIfClosable () ?? - code.CheckIfValidCloseStatusCode (); - + var msg = _readyState.CheckIfClosable () ?? code.CheckIfValidCloseStatusCode (); if (msg != null) { _logger.Error (msg); error ("An error has occurred in closing the connection.", null); @@ -1843,6 +1852,11 @@ namespace WebSocketSharp return; } + if (code.IsNoStatusCode ()) { + closeAsync (new CloseEventArgs (), true, true); + return; + } + var send = !code.IsReserved (); closeAsync (new CloseEventArgs (code), send, send); } @@ -1868,6 +1882,11 @@ namespace WebSocketSharp return; } + if (code.IsNoStatusCode ()) { + closeAsync (new CloseEventArgs (), true, true); + return; + } + var send = !code.IsReserved (); closeAsync (new CloseEventArgs (code), send, send); } @@ -1894,11 +1913,7 @@ namespace WebSocketSharp /// public void CloseAsync (ushort code, string reason) { - CloseEventArgs e = null; - var msg = _readyState.CheckIfClosable () ?? - code.CheckIfValidCloseStatusCode () ?? - (e = new CloseEventArgs (code, reason)).RawData.CheckIfValidControlData ("reason"); - + var msg = _readyState.CheckIfClosable () ?? code.CheckIfValidCloseParameters (reason); if (msg != null) { _logger.Error (msg); error ("An error has occurred in closing the connection.", null); @@ -1906,8 +1921,13 @@ namespace WebSocketSharp return; } + if (code.IsNoStatusCode ()) { + closeAsync (new CloseEventArgs (), true, true); + return; + } + var send = !code.IsReserved (); - closeAsync (e, send, send); + closeAsync (new CloseEventArgs (code, reason), send, send); } /// @@ -1933,10 +1953,7 @@ namespace WebSocketSharp /// public void CloseAsync (CloseStatusCode code, string reason) { - CloseEventArgs e = null; - var msg = _readyState.CheckIfClosable () ?? - (e = new CloseEventArgs (code, reason)).RawData.CheckIfValidControlData ("reason"); - + var msg = _readyState.CheckIfClosable () ?? code.CheckIfValidCloseParameters (reason); if (msg != null) { _logger.Error (msg); error ("An error has occurred in closing the connection.", null); @@ -1944,8 +1961,13 @@ namespace WebSocketSharp return; } + if (code.IsNoStatusCode ()) { + closeAsync (new CloseEventArgs (), true, true); + return; + } + var send = !code.IsReserved (); - closeAsync (e, send, send); + closeAsync (new CloseEventArgs (code, reason), send, send); } ///