Merge branch 'alexischr/nursery-canaries-managed-alloc'
[mono.git] / mcs / class / System.Web / System.Web / HttpResponseHeader.cs
index c9cccba3d2b114842abcab9d04b5b24fced5a12c..574bbade505e556e0881c3c6f1ecea296e67f46f 100644 (file)
@@ -6,7 +6,7 @@
 //
 
 //
-// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2005-2010 Novell, Inc (http://www.novell.com)
 //
 // Permission is hereby granted, free of charge, to any person obtaining
 // a copy of this software and associated documentation files (the
 using System.Collections;
 using System.Text;
 using System.Web.Configuration;
+using System.Web.Util;
 
-namespace System.Web {
-
-       internal abstract class BaseResponseHeader {
+namespace System.Web
+{
+       abstract class BaseResponseHeader
+       {
                string headerValue;
                
                public string Value {
                        get { return headerValue; }
-                       set { headerValue = EncodeHeader (value); }
+                       set {
+                               string hname, hvalue;
+                               HttpEncoder.Current.HeaderNameValueEncode (null, value, out hname, out hvalue);
+                               headerValue = hvalue;
+                       }
                }
-         
+/*       
                static bool headerCheckingEnabled;
                
-               static BaseResponseHeader () {
-#if NET_2_0
-                       HttpRuntimeSection section = WebConfigurationManager.GetWebApplicationSection ("system.web/httpRuntime") as HttpRuntimeSection;
-#else
-                       HttpRuntimeConfig section = HttpContext.GetAppConfig ("system.web/httpRuntime") as HttpRuntimeConfig;
-#endif
+               static BaseResponseHeader ()
+               {
+                       HttpRuntimeSection section = HttpRuntime.Section;
                        headerCheckingEnabled = section == null || section.EnableHeaderChecking;
                }
-
+*/
 
                internal BaseResponseHeader (string val)
                {
                        Value = val;
                }
-
-               string EncodeHeader (string value)
-               {
-                       if (value == null || value.Length == 0)
-                               return value;
-                       
-                       if (headerCheckingEnabled) {
-                               StringBuilder ret = new StringBuilder ();
-                               int len = value.Length;
-
-                               for (int i = 0; i < len; i++) {
-                                       switch (value [i]) {
-                                               case '\r':
-                                                       ret.Append ("%0d");
-                                                       break;
-
-                                               case '\n':
-                                                       ret.Append ("%0a");
-                                                       break;
-
-                                               default:
-                                                       ret.Append (value [i]);
-                                                       break;
-                                       }
-                               }
-
-                               return ret.ToString ();
-                       } else
-                               return value;
-               }
                
                internal abstract void SendContent (HttpWorkerRequest wr);
        }
 
-       internal sealed class KnownResponseHeader : BaseResponseHeader {
+       internal sealed class KnownResponseHeader : BaseResponseHeader
+       {
                public int ID;
 
                internal KnownResponseHeader (int ID, string val) : base (val)
@@ -106,8 +80,19 @@ namespace System.Web {
                }
        }
 
-       internal  class UnknownResponseHeader : BaseResponseHeader {
-               public string Name;
+       internal sealed class UnknownResponseHeader : BaseResponseHeader
+       {
+               string headerName;
+               
+               public string Name {
+                       get { return headerName; }
+                       set {
+                               string hname, hvalue;
+                               HttpEncoder.Current.HeaderNameValueEncode (value, null, out hname, out hvalue);
+                               headerName = hname;
+                       }
+               }
+               
 
                public UnknownResponseHeader (string name, string val) : base (val)
                {