|
|
|
using System;
|
|
|
|
using System.Linq;
|
|
|
|
using System.Collections.Generic;
|
|
|
|
using System.Collections.Specialized;
|
|
|
|
using System.Text;
|
|
|
|
|
|
|
|
namespace NzbDrone.Common.Http
|
|
|
|
{
|
|
|
|
public class HttpHeader : Dictionary<string, object>
|
|
|
|
{
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|