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