12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- 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
- }
- }
|