Call SetEndOfSendNotification
[mono.git] / mcs / class / System.Web / System.Web / HttpResponseStream.jvm.cs
index 5ac4d138ab17062c6a0c93aa775f911d63c49cab..bbbc1cd2d646b19a6b2112b6a151c1b993fb9055 100644 (file)
@@ -157,9 +157,11 @@ namespace System.Web
                        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
@@ -214,7 +216,7 @@ namespace System.Web
                                if (_position == 0)
                                        return;
 
-                               wr.SendResponseFromMemory (buffer, _position);
+                               wr.SendResponseFromMemory (buffer, 0, _position, _encoding);
                        }
 
                        public override void Send (Stream stream)
@@ -222,8 +224,8 @@ namespace System.Web
                                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);
                        }
                }
 
@@ -375,20 +377,15 @@ namespace System.Web
                                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;
@@ -409,20 +406,15 @@ namespace System.Web
                                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;
@@ -474,15 +466,6 @@ namespace System.Web
                        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)
                {
@@ -518,13 +501,13 @@ namespace System.Web
                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;
@@ -541,13 +524,13 @@ namespace System.Web
                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;