using System; using System.Linq; using System.Collections.Generic; using System.Collections.Specialized; using System.Text; namespace NzbDrone.Common.Http { public class HttpHeader : Dictionary { public HttpHeader(NameValueCollection headers) { foreach (var key in headers.AllKeys) { this[key] = headers[key]; } } public HttpHeader() { } public long? ContentLength { get { if (!ContainsKey("Content-Length")) { return null; } return Convert.ToInt64(this["Content-Length"]); } set { this["Content-Length"] = value; } } public string ContentType { get { if (!ContainsKey("Content-Type")) { return null; } return this["Content-Type"].ToString(); } set { this["Content-Type"] = value; } } public string Accept { get { if (!ContainsKey("Accept")) { return null; } return this["Accept"].ToString(); } set { this["Accept"] = value; } } public Encoding GetEncodingFromContentType() { Encoding encoding = null; if (ContentType.IsNotNullOrWhiteSpace()) { var charset = ContentType.ToLowerInvariant() .Split(';', '=', ' ') .SkipWhile(v => v != "charset") .Skip(1).FirstOrDefault(); if (charset.IsNotNullOrWhiteSpace()) { encoding = Encoding.GetEncoding(charset); } } if (encoding == null) { // TODO: Find encoding by Byte order mask. } if (encoding == null) { encoding = Encoding.UTF8; } return encoding; } } }