[System*] Throw a PlatformNotSupported exception when using the networking stack...
[mono.git] / mcs / class / System / System.Net / HttpListenerResponse.cs
index dcc553036e1aea112b7e5d6f864e92e58e84e119..73aa6396b5343e27c1ae1808bc72a7c6470053a5 100644 (file)
@@ -218,63 +218,10 @@ namespace System.Net {
                                if (value < 100 || value > 999)
                                        throw new ProtocolViolationException ("StatusCode must be between 100 and 999.");
                                status_code = value;
-                               status_description = GetStatusDescription (value);
+                               status_description = HttpListenerResponseHelper.GetStatusDescription (value);
                        }
                }
 
-               internal static string GetStatusDescription (int code)
-               {
-                       switch (code){
-                       case 100: return "Continue";
-                       case 101: return "Switching Protocols";
-                       case 102: return "Processing";
-                       case 200: return "OK";
-                       case 201: return "Created";
-                       case 202: return "Accepted";
-                       case 203: return "Non-Authoritative Information";
-                       case 204: return "No Content";
-                       case 205: return "Reset Content";
-                       case 206: return "Partial Content";
-                       case 207: return "Multi-Status";
-                       case 300: return "Multiple Choices";
-                       case 301: return "Moved Permanently";
-                       case 302: return "Found";
-                       case 303: return "See Other";
-                       case 304: return "Not Modified";
-                       case 305: return "Use Proxy";
-                       case 307: return "Temporary Redirect";
-                       case 400: return "Bad Request";
-                       case 401: return "Unauthorized";
-                       case 402: return "Payment Required";
-                       case 403: return "Forbidden";
-                       case 404: return "Not Found";
-                       case 405: return "Method Not Allowed";
-                       case 406: return "Not Acceptable";
-                       case 407: return "Proxy Authentication Required";
-                       case 408: return "Request Timeout";
-                       case 409: return "Conflict";
-                       case 410: return "Gone";
-                       case 411: return "Length Required";
-                       case 412: return "Precondition Failed";
-                       case 413: return "Request Entity Too Large";
-                       case 414: return "Request-Uri Too Long";
-                       case 415: return "Unsupported Media Type";
-                       case 416: return "Requested Range Not Satisfiable";
-                       case 417: return "Expectation Failed";
-                       case 422: return "Unprocessable Entity";
-                       case 423: return "Locked";
-                       case 424: return "Failed Dependency";
-                       case 500: return "Internal Server Error";
-                       case 501: return "Not Implemented";
-                       case 502: return "Bad Gateway";
-                       case 503: return "Service Unavailable";
-                       case 504: return "Gateway Timeout";
-                       case 505: return "Http Version Not Supported";
-                       case 507: return "Insufficient Storage";
-                       }
-                       return "";
-               }
-
                public string StatusDescription {
                        get { return status_description; }
                        set {
@@ -480,10 +427,10 @@ namespace System.Net {
 
                        StreamWriter writer = new StreamWriter (ms, encoding, 256);
                        writer.Write ("HTTP/{0} {1} {2}\r\n", version, status_code, status_description);
-                       string headers_str = headers.ToStringMultiValue ();
+                       string headers_str = FormatHeaders (headers);
                        writer.Write (headers_str);
                        writer.Flush ();
-                       int preamble = (encoding.CodePage == 65001) ? 3 : encoding.GetPreamble ().Length;
+                       int preamble = encoding.GetPreamble ().Length;
                        if (output_stream == null)
                                output_stream = context.Connection.GetResponseStream ();
 
@@ -492,6 +439,24 @@ namespace System.Net {
                        HeadersSent = true;
                }
 
+               static string FormatHeaders (WebHeaderCollection headers)
+               {
+                       var sb = new StringBuilder();
+
+                       for (int i = 0; i < headers.Count ; i++) {
+                               string key = headers.GetKey (i);
+                               if (WebHeaderCollection.AllowMultiValues (key)) {
+                                       foreach (string v in headers.GetValues (i)) {
+                                               sb.Append (key).Append (": ").Append (v).Append ("\r\n");
+                                       }
+                               } else {
+                                       sb.Append (key).Append (": ").Append (headers.Get (i)).Append ("\r\n");
+                               }
+                       }
+
+                       return sb.Append("\r\n").ToString();
+               }
+
                static string CookieToClientString (Cookie cookie)
                {
                        if (cookie.Name.Length == 0)