int _position = 0;
int _freeSpace = _preferredLength;
char [] buffer = new char [_preferredLength];
+ readonly Encoding _encoding;
- public CharBucket ()
+ public CharBucket (Encoding encoding)
{
+ _encoding = encoding;
}
public override int Length
if (_position == 0)
return;
- wr.SendResponseFromMemory (buffer, _position);
+ wr.SendResponseFromMemory (buffer, 0, _position, _encoding);
}
public override void Send (Stream stream)
if (_position == 0)
return;
- StreamWriter writer = new StreamWriter (stream);
- writer.Write (buffer, 0, _position);
+ byte[] bytesToWrite =_encoding.GetBytes (buffer, 0, _position);
+ stream.Write (bytesToWrite, 0, bytesToWrite.Length);
}
}
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.SendResponseFromMemory (buffer, offset, count, response.ContentEncoding);
wr.FlushResponse (false);
}
else {
// Write to the filter, which will call us back, and then Flush
filtering = true;
try {
- StreamWriter wr = new StreamWriter (filter, response.ContentEncoding);
- wr.Write (buffer, offset, count);
+ byte [] bytesToWrite = response.ContentEncoding.GetBytes (buffer, offset, count);
+ filter.Write (bytesToWrite, 0, bytesToWrite.Length);
}
finally {
filtering = false;
response.WriteHeaders (false);
HttpWorkerRequest wr = response.WorkerRequest;
// Direct write because not buffering
- if (offset == 0) {
- wr.SendResponseFromMemory (s.ToCharArray (), count);
- }
- else {
- UnsafeWrite (wr, s.ToCharArray (), offset, count);
- }
+ wr.SendResponseFromMemory (s, offset, count, response.ContentEncoding);
wr.FlushResponse (false);
}
else {
// Write to the filter, which will call us back, and then Flush
filtering = true;
try {
- StreamWriter wr = new StreamWriter (filter, response.ContentEncoding);
- wr.Write (s, offset, count);
+ byte [] bytesToWrite = response.ContentEncoding.GetBytes (s.ToCharArray (), offset, count);
+ filter.Write (bytesToWrite, 0, bytesToWrite.Length);
}
finally {
filtering = false;
Array.Copy (buffer, offset, copy, 0, count);
wr.SendResponseFromMemory (copy, count);
}
- void UnsafeWrite (HttpWorkerRequest wr, char [] buffer, int offset, int count)
- {
- if (count <= 0)
- return;
-
- char [] copy = new char [count];
- Array.Copy (buffer, offset, copy, 0, count);
- wr.SendResponseFromMemory (copy, count);
- }
#else
unsafe void UnsafeWrite (HttpWorkerRequest wr, byte [] buffer, int offset, int count)
{
void AppendBuffer (char [] buffer, int offset, int count)
{
if (!(cur_bucket is CharBucket))
- AppendBucket (new CharBucket ());
+ AppendBucket (new CharBucket (response.ContentEncoding));
dirty = true;
while (count > 0) {
if (cur_bucket.FreeSpace == 0)
- AppendBucket (new CharBucket ());
+ AppendBucket (new CharBucket (response.ContentEncoding));
int len = count;
int freeSpace = cur_bucket.FreeSpace;
void AppendBuffer (string buffer, int offset, int count)
{
if (!(cur_bucket is CharBucket))
- AppendBucket (new CharBucket ());
+ AppendBucket (new CharBucket (response.ContentEncoding));
dirty = true;
while (count > 0) {
if (cur_bucket.FreeSpace == 0)
- AppendBucket (new CharBucket ());
+ AppendBucket (new CharBucket (response.ContentEncoding));
int len = count;
int freeSpace = cur_bucket.FreeSpace;