From b14fc7483f56357043ef6c86a4608ad277de2eca Mon Sep 17 00:00:00 2001 From: sta Date: Thu, 1 Jun 2017 04:50:40 +0900 Subject: [PATCH] [Modify] It throws exceptions --- websocket-sharp/Server/HttpServer.cs | 59 ++++++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 4 deletions(-) diff --git a/websocket-sharp/Server/HttpServer.cs b/websocket-sharp/Server/HttpServer.cs index df824ca1..507722ef 100644 --- a/websocket-sharp/Server/HttpServer.cs +++ b/websocket-sharp/Server/HttpServer.cs @@ -1040,12 +1040,63 @@ namespace WebSocketSharp.Server /// A that represents the reason for the WebSocket /// connection close. The size must be 123 bytes or less. /// + /// + /// + /// is less than 1000 or greater than 4999. + /// + /// + /// -or- + /// + /// + /// The size of is greater than 123 bytes. + /// + /// + /// + /// + /// is 1010 (mandatory extension). + /// + /// + /// -or- + /// + /// + /// is 1005 (no status) and + /// there is . + /// + /// + /// -or- + /// + /// + /// could not be UTF-8-encoded. + /// + /// public void Stop (ushort code, string reason) { - string msg; - if (!WebSocket.CheckParametersForClose (code, reason, false, out msg)) { - _log.Error (msg); - return; + if (!code.IsCloseStatusCode ()) { + var msg = "Less than 1000 or greater than 4999."; + throw new ArgumentOutOfRangeException ("code", msg); + } + + if (code == 1010) { + var msg = "1010 cannot be used."; + throw new ArgumentException (msg, "code"); + } + + if (!reason.IsNullOrEmpty ()) { + if (code == 1005) { + var msg = "1005 cannot be used."; + throw new ArgumentException (msg, "code"); + } + + byte[] bytes; + if (!reason.TryGetUTF8EncodedBytes (out bytes)) { + var msg = "It could not be UTF-8-encoded."; + throw new ArgumentException (msg, "reason"); + } + + if (bytes.Length > 123) { + var msg = "Its size is greater than 123 bytes."; + throw new ArgumentOutOfRangeException ("reason", msg); + } } stop (code, reason);