You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
jellyfin/SocketHttpListener.Portable/HttpBase.cs

104 lines
2.2 KiB

using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.IO;
using System.Text;
using System.Threading;
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
{
get
{
return _headers;
}
}
public Version ProtocolVersion
{
get
{
return _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
}
}