Merge pull request #3023 from lambdageek/dev/monoerror-minisig
[mono.git] / mcs / class / System.Net.Http / System.Net.Http.Headers / HttpContentHeaders.cs
index 4d0f8f115387cd06349c4d9cd299159e7c5c3bbd..023c958f22e9ddb88a7e40b2a749117390f79054 100644 (file)
@@ -32,14 +32,116 @@ namespace System.Net.Http.Headers
 {
        public sealed class HttpContentHeaders : HttpHeaders
        {
-               internal HttpContentHeaders ()
+               readonly HttpContent content;
+
+               internal HttpContentHeaders (HttpContent content)
                        : base (HttpHeaderKind.Content)
                {
+                       this.content = content;
                }
                
                public ICollection<string> Allow {
                        get {
-                               throw new NotImplementedException ();
+                               return GetValues<string> ("Allow");
+                       }
+               }
+
+               public ICollection<string> ContentEncoding {
+                       get {
+                               return GetValues<string> ("Content-Encoding");
+                       }
+               }
+               
+               public ContentDispositionHeaderValue ContentDisposition {
+                       get {
+                               return GetValue<ContentDispositionHeaderValue> ("Content-Disposition");
+                       }
+                       set {
+                               AddOrRemove ("Content-Disposition", value);
+                       }
+               }
+
+               public ICollection<string> ContentLanguage {
+                       get {
+                               return GetValues<string> ("Content-Language");
+                       }
+               }
+
+               public long? ContentLength {
+                       get {
+                               long? v = GetValue<long?> ("Content-Length");
+                               if (v != null)
+                                       return v;
+
+                               v = content.LoadedBufferLength;
+                               if (v != null)
+                                       return v;
+
+                               long l;
+                               if (content.TryComputeLength (out l)) {
+                                       // .net compatibility reading value actually set header property value
+                                       SetValue ("Content-Length", l);
+                                       return l;
+                               }
+
+                               return null;
+                       }
+                       set {
+                               AddOrRemove ("Content-Length", value);
+                       }
+               }
+
+               public Uri ContentLocation {
+                       get {
+                               return GetValue<Uri> ("Content-Location");
+                       }
+                       set {
+                               AddOrRemove ("Content-Location", value);
+                       }
+               }
+
+               public byte[] ContentMD5 {
+                       get {
+                               return GetValue<byte[]> ("Content-MD5");
+                       }
+                       set {
+                               AddOrRemove ("Content-MD5", value, Parser.MD5.ToString);
+                       }
+               }
+
+               public ContentRangeHeaderValue ContentRange {
+                       get {
+                               return GetValue<ContentRangeHeaderValue> ("Content-Range");
+                       }
+                       set {
+                               AddOrRemove ("Content-Range", value);
+                       }
+               }
+
+               public MediaTypeHeaderValue ContentType {
+                       get {
+                               return GetValue<MediaTypeHeaderValue> ("Content-Type");
+                       }
+                       set {
+                               AddOrRemove ("Content-Type", value);
+                       }
+               }
+
+               public DateTimeOffset? Expires {
+                       get {
+                               return GetValue<DateTimeOffset?> ("Expires");
+                       }
+                       set {
+                               AddOrRemove ("Expires", value, Parser.DateTime.ToString);
+                       }
+               }
+
+               public DateTimeOffset? LastModified {
+                       get {
+                               return GetValue<DateTimeOffset?> ("Last-Modified");
+                       }
+                       set {
+                               AddOrRemove ("Last-Modified", value, Parser.DateTime.ToString);
                        }
                }
        }