public void Issue10054_ZeroRead() { // "HelloWorld" as UTF8/DeflateStream(...,CompressionMode.Compress) var buffer = new byte[] { 243, 72, 205, 201, 201, 15, 207, 47, 202, 73, 1, 0 }; var mem = new MemoryStream(buffer); var chu = new ChunkedReader(mem); var def = new DeflateStream(chu, CompressionMode.Decompress); var buffer2 = new byte[4096]; int read2 = 0; chu.limit = 3; read2 += def.Read(buffer2, read2, buffer2.Length - read2); chu.limit = 100; read2 += def.Read(buffer2, read2, buffer2.Length - read2); var res = Encoding.UTF8.GetString(buffer2, 0, read2); Assert.AreEqual("HelloWorld", res); }
public void InitResponse() { SendHeaders(); byte[] databuffer = new byte[65536]; int readlen = 0; int dclrf = -1; while (dclrf == -1 && readlen < databuffer.Length) { int rc = _sock.Receive(databuffer, readlen, databuffer.Length - readlen, SocketFlags.None); if (rc == 0) { throw (new Exception("ErrorFindDoubleCLRF")); } readlen += rc; dclrf = IndexOfDoubleCRLF(databuffer, 0, readlen); } if (dclrf == -1) { throw (new Exception("ErrorFindDoubleCLRF")); } string[] lines = Encoding.UTF8.GetString(databuffer, 0, dclrf).Split(new string[] { "\r\n" }, StringSplitOptions.None); string[] firstlineparts = lines[0].Split(new char[] { ' ' }, 3); if (firstlineparts[0] != "HTTP/1.1" && firstlineparts[0] != "HTTP/1.0") { throw (new Exception("InvalidHttpVersion:" + firstlineparts[0])); } StatusCode = int.Parse(firstlineparts[1]); if (firstlineparts.Length > 2) { StatusDesc = firstlineparts[2]; } for (int li = 1; li < lines.Length; li++) { string header = lines[li]; int pos = header.IndexOf(':'); if (pos == -1) { throw (new Exception("ErrorParsingHeaders")); } string name = header.Substring(0, pos).Trim(); string value = header.Substring(pos + 1).Trim(); _resheaders.Add(new KeyValuePair <string, string>(name, value)); if (name == "Content-Encoding" && value == "chunked") { _chunked = true; } if (name == "Content-Length") { _contentlen = long.Parse(value); } if (name == "Connection" && value.Equals("keep-alive", StringComparison.OrdinalIgnoreCase)) { _keepalive = true; } } if (_chunked) { _reader = new ChunkedReader(); } else { _reader = new ContentReader(_contentlen); } _reader._sock = _sock; _reader._buffer = databuffer; _reader._bufferindex = dclrf + 4; _reader._bufferlength = readlen - dclrf - 4; }