HttpBase.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. using System;
  2. using System.Text;
  3. using MediaBrowser.Model.Services;
  4. namespace SocketHttpListener
  5. {
  6. internal abstract class HttpBase
  7. {
  8. #region Private Fields
  9. private QueryParamCollection _headers;
  10. private Version _version;
  11. #endregion
  12. #region Internal Fields
  13. internal byte[] EntityBodyData;
  14. #endregion
  15. #region Protected Fields
  16. protected const string CrLf = "\r\n";
  17. #endregion
  18. #region Protected Constructors
  19. protected HttpBase(Version version, QueryParamCollection headers)
  20. {
  21. _version = version;
  22. _headers = headers;
  23. }
  24. #endregion
  25. #region Public Properties
  26. public string EntityBody
  27. {
  28. get
  29. {
  30. var data = EntityBodyData;
  31. return data != null && data.Length > 0
  32. ? getEncoding(_headers["Content-Type"]).GetString(data, 0, data.Length)
  33. : string.Empty;
  34. }
  35. }
  36. public QueryParamCollection Headers
  37. {
  38. get
  39. {
  40. return _headers;
  41. }
  42. }
  43. public Version ProtocolVersion
  44. {
  45. get
  46. {
  47. return _version;
  48. }
  49. }
  50. #endregion
  51. #region Private Methods
  52. private static Encoding getEncoding(string contentType)
  53. {
  54. if (contentType == null || contentType.Length == 0)
  55. return Encoding.UTF8;
  56. var i = contentType.IndexOf("charset=", StringComparison.Ordinal);
  57. if (i == -1)
  58. return Encoding.UTF8;
  59. var charset = contentType.Substring(i + 8);
  60. i = charset.IndexOf(';');
  61. if (i != -1)
  62. charset = charset.Substring(0, i).TrimEnd();
  63. return Encoding.GetEncoding(charset.Trim('"'));
  64. }
  65. #endregion
  66. #region Public Methods
  67. public byte[] ToByteArray()
  68. {
  69. return Encoding.UTF8.GetBytes(ToString());
  70. }
  71. #endregion
  72. }
  73. }