public override void Write (byte [] buffer, int offset, int count)
{
bool buffering = response.BufferOutput;
#if NET_2_0
if (buffer == null)
throw new ArgumentNullException ("buffer");
#endif
int max_count = buffer.Length - offset;
#if NET_2_0
if (offset < 0 || max_count <= 0)
#else
if (offset < 0)
#endif
throw new ArgumentOutOfRangeException ("offset");
if (count < 0)
throw new ArgumentOutOfRangeException ("count");
if (count > max_count)
count = max_count;
#if ONLY_1_1
if (max_count <= 0)
return;
#endif
if (buffering) {
// It does not matter whether we're in ApplyFilter or not
AppendBuffer (buffer, offset, count);
} else if (filter == null || filtering) {
response.WriteHeaders (false);
HttpWorkerRequest wr = response.WorkerRequest;
// Direct write because not buffering
if (offset == 0) {
wr.SendResponseFromMemory (buffer, count);
} else {
UnsafeWrite (wr, buffer, offset, count);
}
wr.FlushResponse (false);
} else {
// Write to the filter, which will call us back, and then Flush
filtering = true;
try {
filter.Write (buffer, offset, count);
} finally {
filtering = false;
}
Flush (response.WorkerRequest, false);
}
}