From 4af602179e99c5f290561d873f4844fe4f0aba7f Mon Sep 17 00:00:00 2001 From: sta Date: Wed, 11 Dec 2019 19:54:20 +0900 Subject: [PATCH] [Modify] Replace it --- websocket-sharp/Net/ResponseStream.cs | 31 +++++++++++++++++++-------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/websocket-sharp/Net/ResponseStream.cs b/websocket-sharp/Net/ResponseStream.cs index 85059a40..0939dfbd 100644 --- a/websocket-sharp/Net/ResponseStream.cs +++ b/websocket-sharp/Net/ResponseStream.cs @@ -166,21 +166,34 @@ namespace WebSocketSharp.Net private bool flushHeaders (bool closing) { - using (var buff = new MemoryStream ()) { - var headers = _response.WriteHeadersTo (buff); - var start = buff.Position; + if (!_response.SendChunked) { + if (_response.ContentLength64 != _body.Length) + return false; + } + + var statusLine = _response.StatusLine; + var headers = _response.FullHeaders; + + var buff = new MemoryStream (); + var enc = Encoding.UTF8; + + using (var writer = new StreamWriter (buff, enc, 256)) { + writer.Write (statusLine); + writer.Write (headers.ToStringMultiValue (true)); + writer.Flush (); + + var start = enc.GetPreamble ().Length; var len = buff.Length - start; + if (len > 32768) return false; - if (!_response.SendChunked && _response.ContentLength64 != _body.Length) - return false; - - _write (buff.GetBuffer (), (int) start, (int) len); - _response.CloseConnection = headers["Connection"] == "close"; - _response.HeadersSent = true; + _write (buff.GetBuffer (), start, (int) len); } + _response.CloseConnection = headers["Connection"] == "close"; + _response.HeadersSent = true; + return true; }