|
|
|
using System;
|
|
|
|
using System.Text;
|
|
|
|
using MediaBrowser.Model.Services;
|
|
|
|
|
|
|
|
namespace SocketHttpListener
|
|
|
|
{
|
|
|
|
internal abstract class HttpBase
|
|
|
|
{
|
|
|
|
#region Private Fields
|
|
|
|
|
|
|
|
private QueryParamCollection _headers;
|
|
|
|
private Version _version;
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region Internal Fields
|
|
|
|
|
|
|
|
internal byte[] EntityBodyData;
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region Protected Fields
|
|
|
|
|
|
|
|
protected const string CrLf = "\r\n";
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region Protected Constructors
|
|
|
|
|
|
|
|
protected HttpBase(Version version, QueryParamCollection headers)
|
|
|
|
{
|
|
|
|
_version = version;
|
|
|
|
_headers = headers;
|
|
|
|
}
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region Public Properties
|
|
|
|
|
|
|
|
public string EntityBody
|
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
|
|
|
var data = EntityBodyData;
|
|
|
|
|
|
|
|
return data != null && data.Length > 0
|
|
|
|
? getEncoding(_headers["Content-Type"]).GetString(data, 0, data.Length)
|
|
|
|
: string.Empty;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public QueryParamCollection Headers => _headers;
|
|
|
|
|
|
|
|
public Version ProtocolVersion => _version;
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region Private Methods
|
|
|
|
|
|
|
|
private static Encoding getEncoding(string contentType)
|
|
|
|
{
|
|
|
|
if (contentType == null || contentType.Length == 0)
|
|
|
|
return Encoding.UTF8;
|
|
|
|
|
|
|
|
var i = contentType.IndexOf("charset=", StringComparison.Ordinal);
|
|
|
|
if (i == -1)
|
|
|
|
return Encoding.UTF8;
|
|
|
|
|
|
|
|
var charset = contentType.Substring(i + 8);
|
|
|
|
i = charset.IndexOf(';');
|
|
|
|
if (i != -1)
|
|
|
|
charset = charset.Substring(0, i).TrimEnd();
|
|
|
|
|
|
|
|
return Encoding.GetEncoding(charset.Trim('"'));
|
|
|
|
}
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region Public Methods
|
|
|
|
|
|
|
|
public byte[] ToByteArray()
|
|
|
|
{
|
|
|
|
return Encoding.UTF8.GetBytes(ToString());
|
|
|
|
}
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
}
|
|
|
|
}
|