public void WritePtr (IntPtr ptr, int length)
{
if (length == 0)
return;
bool buffering = response.BufferOutput;
if (buffering) {
// It does not matter whether we're in ApplyFilter or not
AppendBuffer (ptr, length);
} else if (filter == null || filtering) {
response.WriteHeaders (false);
HttpWorkerRequest wr = response.WorkerRequest;
// Direct write because not buffering
wr.SendResponseFromMemory (ptr, length);
wr.FlushResponse (false);
} else {
// Write to the filter, which will call us back, and then Flush
filtering = true;
try {
byte [] bytes = new byte [length];
Marshal.Copy (ptr, bytes, 0, length);
filter.Write (bytes, 0, length);
bytes = null;
} finally {
filtering = false;
}
Flush (response.WorkerRequest, false);
}
}