|
|
|
|
@ -144,7 +144,7 @@ namespace WebSocketSharp.Net
|
|
|
|
|
|
|
|
|
|
_sawCr = true;
|
|
|
|
|
if (offset == length)
|
|
|
|
|
return InputChunkState.BodyFinished;
|
|
|
|
|
return InputChunkState.DataEnded;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (buffer[offset++] != 10)
|
|
|
|
|
@ -200,7 +200,7 @@ namespace WebSocketSharp.Net
|
|
|
|
|
return InputChunkState.Trailer;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return InputChunkState.Body;
|
|
|
|
|
return InputChunkState.Data;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private InputChunkState setHeaders (byte[] buffer, ref int offset, int length)
|
|
|
|
|
@ -271,15 +271,15 @@ namespace WebSocketSharp.Net
|
|
|
|
|
_gotIt = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (_state == InputChunkState.Body && offset < length) {
|
|
|
|
|
_state = writeBody (buffer, ref offset, length);
|
|
|
|
|
if (_state == InputChunkState.Body)
|
|
|
|
|
if (_state == InputChunkState.Data && offset < length) {
|
|
|
|
|
_state = writeData (buffer, ref offset, length);
|
|
|
|
|
if (_state == InputChunkState.Data)
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (_state == InputChunkState.BodyFinished && offset < length) {
|
|
|
|
|
if (_state == InputChunkState.DataEnded && offset < length) {
|
|
|
|
|
_state = seekCrLf (buffer, ref offset, length);
|
|
|
|
|
if (_state == InputChunkState.BodyFinished)
|
|
|
|
|
if (_state == InputChunkState.DataEnded)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
_sawCr = false;
|
|
|
|
|
@ -297,24 +297,24 @@ namespace WebSocketSharp.Net
|
|
|
|
|
write (buffer, ref offset, length);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private InputChunkState writeBody (byte[] buffer, ref int offset, int length)
|
|
|
|
|
private InputChunkState writeData (byte[] buffer, ref int offset, int length)
|
|
|
|
|
{
|
|
|
|
|
if (_chunkSize == 0)
|
|
|
|
|
return InputChunkState.BodyFinished;
|
|
|
|
|
return InputChunkState.DataEnded;
|
|
|
|
|
|
|
|
|
|
var cnt = length - offset;
|
|
|
|
|
var left = _chunkSize - _chunkRead;
|
|
|
|
|
if (cnt > left)
|
|
|
|
|
cnt = left;
|
|
|
|
|
|
|
|
|
|
var body = new byte[cnt];
|
|
|
|
|
Buffer.BlockCopy (buffer, offset, body, 0, cnt);
|
|
|
|
|
_chunks.Add (new Chunk (body));
|
|
|
|
|
var data = new byte[cnt];
|
|
|
|
|
Buffer.BlockCopy (buffer, offset, data, 0, cnt);
|
|
|
|
|
_chunks.Add (new Chunk (data));
|
|
|
|
|
|
|
|
|
|
offset += cnt;
|
|
|
|
|
_chunkRead += cnt;
|
|
|
|
|
|
|
|
|
|
return _chunkRead == _chunkSize ? InputChunkState.BodyFinished : InputChunkState.Body;
|
|
|
|
|
return _chunkRead == _chunkSize ? InputChunkState.DataEnded : InputChunkState.Data;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|