Check if the headers are valid
This commit is contained in:
parent
97b4ca3cf8
commit
bf0cb2f8e3
@ -125,16 +125,11 @@ namespace WebSocketSharp.Net
|
||||
|
||||
#region Private Methods
|
||||
|
||||
private void flush (bool closing)
|
||||
private bool flush (bool closing)
|
||||
{
|
||||
if (!_response.HeadersSent) {
|
||||
using (var headers = new MemoryStream ()) {
|
||||
_response.WriteHeadersTo (headers, closing);
|
||||
var start = headers.Position;
|
||||
_write (headers.GetBuffer (), (int) start, (int) (headers.Length - start));
|
||||
}
|
||||
|
||||
_response.HeadersSent = true;
|
||||
if (!flushHeaders (closing))
|
||||
return false;
|
||||
|
||||
_chunked = _response.SendChunked;
|
||||
_writeBody = _chunked ? _writeChunked : _write;
|
||||
@ -145,6 +140,8 @@ namespace WebSocketSharp.Net
|
||||
var last = getChunkSizeBytes (0, true);
|
||||
_write (last, 0, last.Length);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private void flushBody (bool closing)
|
||||
@ -167,6 +164,25 @@ namespace WebSocketSharp.Net
|
||||
_body = !closing ? new MemoryStream () : null;
|
||||
}
|
||||
|
||||
private bool flushHeaders (bool closing)
|
||||
{
|
||||
using (var headers = new MemoryStream ()) {
|
||||
_response.WriteHeadersTo (headers, closing);
|
||||
var start = headers.Position;
|
||||
var len = headers.Length - start;
|
||||
if (len > 32768)
|
||||
return false;
|
||||
|
||||
if (!_response.SendChunked && _response.ContentLength64 != _body.Length)
|
||||
return false;
|
||||
|
||||
_write (headers.GetBuffer (), (int) start, (int) len);
|
||||
}
|
||||
|
||||
_response.HeadersSent = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
private static byte[] getChunkSizeBytes (int size, bool final)
|
||||
{
|
||||
return Encoding.ASCII.GetBytes (String.Format ("{0:x}\r\n{1}", size, final ? "\r\n" : ""));
|
||||
@ -208,18 +224,18 @@ namespace WebSocketSharp.Net
|
||||
return;
|
||||
|
||||
_disposed = true;
|
||||
if (!force) {
|
||||
flush (true);
|
||||
if (!force && flush (true)) {
|
||||
_response.Close ();
|
||||
}
|
||||
else {
|
||||
_body.Dispose ();
|
||||
_body = null;
|
||||
if (_chunked) {
|
||||
var last = getChunkSizeBytes (0, true);
|
||||
_write (last, 0, last.Length);
|
||||
}
|
||||
|
||||
_body.Dispose ();
|
||||
_body = null;
|
||||
|
||||
_response.Abort ();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user