[assembly: AssemblyDelaySign (true)]
#if NET_2_1
[assembly: AssemblyKeyFile ("../silverlight.pub")]
+ [assembly: InternalsVisibleTo ("System.Windows, PublicKey=00240000048000009400000006020000002400005253413100040000010001008D56C76F9E8649383049F383C44BE0EC204181822A6C31CF5EB7EF486944D032188EA1D3920763712CCB12D75FB77E9811149E6148E5D32FBAAB37611C1878DDC19E20EF135D0CB2CFF2BFEC3D115810C3D9069638FE4BE215DBF795861920E5AB6F7DB2E2CEEF136AC23D5DD2BF031700AEC232F6C6B1C785B4305C123B37AB")]
+ [assembly: InternalsVisibleTo ("System.Windows.Browser, PublicKey=00240000048000009400000006020000002400005253413100040000010001008D56C76F9E8649383049F383C44BE0EC204181822A6C31CF5EB7EF486944D032188EA1D3920763712CCB12D75FB77E9811149E6148E5D32FBAAB37611C1878DDC19E20EF135D0CB2CFF2BFEC3D115810C3D9069638FE4BE215DBF795861920E5AB6F7DB2E2CEEF136AC23D5DD2BF031700AEC232F6C6B1C785B4305C123B37AB")]
+ [assembly: InternalsVisibleTo ("System.Xml, PublicKey=00240000048000009400000006020000002400005253413100040000010001008D56C76F9E8649383049F383C44BE0EC204181822A6C31CF5EB7EF486944D032188EA1D3920763712CCB12D75FB77E9811149E6148E5D32FBAAB37611C1878DDC19E20EF135D0CB2CFF2BFEC3D115810C3D9069638FE4BE215DBF795861920E5AB6F7DB2E2CEEF136AC23D5DD2BF031700AEC232F6C6B1C785B4305C123B37AB")]
#else
[assembly: AssemblyKeyFile ("../ecma.pub")]
[assembly: AllowPartiallyTrustedCallers]
//
// Authors:
// Jb Evain <jbevain@novell.com>
+// Sebastien Pouliot <sebastien@ximian.com>
//
-// (c) 2007 Novell, Inc. (http://www.novell.com)
+// (c) 2007, 2009 Novell, Inc. (http://www.novell.com)
//
//
public class WebHeaderCollection : IEnumerable {
- Dictionary<string, string> headers = new Dictionary<string, string> ();
+ internal Dictionary<string, string> headers = new Dictionary<string, string> ();
+ bool validate;
public WebHeaderCollection ()
+ : this (false)
{
}
+ internal WebHeaderCollection (bool restrict)
+ {
+ validate = restrict;
+ }
+
public int Count {
get { return headers.Count; }
}
if (header == null)
throw new ArgumentNullException ("header");
- string value;
- if (headers.TryGetValue (header, out value))
- return value;
-
- return null;
+ string value = null;
+ headers.TryGetValue (header.ToLowerInvariant (), out value);
+ return value;
}
set {
if (header == null)
if (header.Length == 0)
throw new ArgumentException ("header");
+ header = header.ToLowerInvariant ();
+ if (validate)
+ ValidateHeader (header);
headers [header] = value;
}
}
public string this [HttpRequestHeader header] {
get { return this [HttpRequestHeaderToString (header)]; }
- set { this [HttpRequestHeaderToString (header)] = value; }
+ set {
+ string h = HttpRequestHeaderToString (header);
+ if (validate)
+ ValidateHeader (h);
+ headers [h] = value;
+ }
}
IEnumerator IEnumerable.GetEnumerator ()
throw new IndexOutOfRangeException ();
}
}
+
+ internal static void ValidateHeader (string header)
+ {
+ switch (header) {
+ case "connection":
+ case "date":
+ case "keep-alive":
+ case "trailer":
+ case "transfer-encoding":
+ case "upgrade":
+ case "via":
+ case "warning":
+ case "allow":
+ case "content-length":
+ case "content-type":
+ case "content-location":
+ case "content-range":
+ case "last-modified":
+ case "accept":
+ case "accept-charset":
+ case "accept-encoding":
+ case "accept-language":
+ case "authorization":
+ case "cookie":
+ case "expect":
+ case "host":
+ case "if-modified-since":
+ case "max-forwards":
+ case "proxy-authorization":
+ case "referer":
+ case "range":
+ case "te":
+ case "user-agent":
+ // extra (not HttpRequestHeader defined) headers that are not accepted by SL2
+ // note: the HttpResponseHeader enum is not available in SL2
+ case "accept-ranges":
+ case "age":
+ case "allowed":
+ case "connect":
+ case "content-transfer-encoding":
+ case "delete":
+ case "etag":
+ case "get":
+ case "head":
+ case "location":
+ case "options":
+ case "post":
+ case "proxy-authenticate":
+ case "proxy-connection":
+ case "public":
+ case "put":
+ case "request-range":
+ case "retry-after":
+ case "server":
+ case "sec-headertest":
+ case "sec-":
+ case "trace":
+ case "uri":
+ case "vary":
+ case "www-authenticate":
+ case "x-flash-version":
+ throw new ArgumentException ();
+ default:
+ return;
+ }
+ }
}
}