HttpBase.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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 => _headers;
  37. public Version ProtocolVersion => _version;
  38. #endregion
  39. #region Private Methods
  40. private static Encoding getEncoding(string contentType)
  41. {
  42. if (contentType == null || contentType.Length == 0)
  43. return Encoding.UTF8;
  44. var i = contentType.IndexOf("charset=", StringComparison.Ordinal);
  45. if (i == -1)
  46. return Encoding.UTF8;
  47. var charset = contentType.Substring(i + 8);
  48. i = charset.IndexOf(';');
  49. if (i != -1)
  50. charset = charset.Substring(0, i).TrimEnd();
  51. return Encoding.GetEncoding(charset.Trim('"'));
  52. }
  53. #endregion
  54. #region Public Methods
  55. public byte[] ToByteArray()
  56. {
  57. return Encoding.UTF8.GetBytes(ToString());
  58. }
  59. #endregion
  60. }
  61. }