public override void Close() { if (this._disposed) { return; } this._disposed = true; MemoryStream headers = this.getHeaders(true); bool sendChunked = this._response.SendChunked; if (headers != null) { long position = headers.Position; if (sendChunked && !this._trailerSent) { byte[] chunkSizeBytes = ResponseStream.getChunkSizeBytes(0, true); headers.Position = headers.Length; headers.Write(chunkSizeBytes, 0, chunkSizeBytes.Length); } this.InternalWrite(headers.GetBuffer(), (int)position, (int)(headers.Length - position)); this._trailerSent = true; } else if (sendChunked && !this._trailerSent) { byte[] chunkSizeBytes = ResponseStream.getChunkSizeBytes(0, true); this.InternalWrite(chunkSizeBytes, 0, chunkSizeBytes.Length); this._trailerSent = true; } this._response.Close(); }
public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, object state) { if (this._disposed) { throw new ObjectDisposedException(base.GetType().ToString()); } MemoryStream headers = this.getHeaders(false); bool sendChunked = this._response.SendChunked; if (headers != null) { long position = headers.Position; headers.Position = headers.Length; if (sendChunked) { byte[] chunkSizeBytes = ResponseStream.getChunkSizeBytes(count, false); headers.Write(chunkSizeBytes, 0, chunkSizeBytes.Length); } headers.Write(buffer, offset, count); buffer = headers.GetBuffer(); offset = (int)position; count = (int)(headers.Position - position); } else if (sendChunked) { byte[] chunkSizeBytes = ResponseStream.getChunkSizeBytes(count, false); this.InternalWrite(chunkSizeBytes, 0, chunkSizeBytes.Length); } return(this._stream.BeginWrite(buffer, offset, count, callback, state)); }
private void writeChunked(byte[] buffer, int offset, int count) { byte[] chunkSizeBytes = ResponseStream.getChunkSizeBytes(count, false); this._stream.Write(chunkSizeBytes, 0, (int)chunkSizeBytes.Length); this._stream.Write(buffer, offset, count); this._stream.Write(ResponseStream._crlf, 0, 2); }
private bool flush(bool closing) { bool flag; if (!this._response.HeadersSent) { if (!this.flushHeaders(closing)) { if (closing) { this._response.CloseConnection = true; } flag = false; return(flag); } this._sendChunked = this._response.SendChunked; this._writeBody = (this._sendChunked ? this._writeChunked : this._write); } this.flushBody(closing); if ((!closing ? false : this._sendChunked)) { byte[] chunkSizeBytes = ResponseStream.getChunkSizeBytes(0, true); this._write(chunkSizeBytes, 0, (int)chunkSizeBytes.Length); } flag = true; return(flag); }
public override void Write(byte[] buffer, int offset, int count) { if (this._disposed) { throw new ObjectDisposedException(base.GetType().ToString()); } MemoryStream headers = this.getHeaders(false); bool sendChunked = this._response.SendChunked; if (headers != null) { long position = headers.Position; headers.Position = headers.Length; if (sendChunked) { byte[] chunkSizeBytes = ResponseStream.getChunkSizeBytes(count, false); headers.Write(chunkSizeBytes, 0, chunkSizeBytes.Length); } int num = Math.Min(count, 16384 - (int)headers.Position + (int)position); headers.Write(buffer, offset, num); count -= num; offset += num; this.InternalWrite(headers.GetBuffer(), (int)position, (int)(headers.Length - position)); headers.SetLength(0L); headers.Capacity = 0; } else if (sendChunked) { byte[] chunkSizeBytes = ResponseStream.getChunkSizeBytes(count, false); this.InternalWrite(chunkSizeBytes, 0, chunkSizeBytes.Length); } if (count > 0) { this.InternalWrite(buffer, offset, count); } if (sendChunked) { this.InternalWrite(ResponseStream._crlf, 0, 2); } }
internal void Close(bool force) { if (!this._disposed) { this._disposed = true; if ((force ? true : !this.flush(true))) { if (this._sendChunked) { byte[] chunkSizeBytes = ResponseStream.getChunkSizeBytes(0, true); this._write(chunkSizeBytes, 0, (int)chunkSizeBytes.Length); } this._body.Dispose(); this._body = null; this._response.Abort(); } else { this._response.Close(); } this._response = null; this._stream = null; } }