diff options
Diffstat (limited to 'SocketHttpListener/PayloadData.cs')
| -rw-r--r-- | SocketHttpListener/PayloadData.cs | 256 |
1 files changed, 133 insertions, 123 deletions
diff --git a/SocketHttpListener/PayloadData.cs b/SocketHttpListener/PayloadData.cs index a6318da2b..829db6304 100644 --- a/SocketHttpListener/PayloadData.cs +++ b/SocketHttpListener/PayloadData.cs @@ -5,145 +5,155 @@ using System.Text; namespace SocketHttpListener { - internal class PayloadData : IEnumerable<byte> - { - #region Private Fields - - private byte [] _applicationData; - private byte [] _extensionData; - private bool _masked; - - #endregion - - #region Public Const Fields - - public const ulong MaxLength = long.MaxValue; - - #endregion - - #region Public Constructors - - public PayloadData () - : this (new byte [0], new byte [0], false) + internal class PayloadData : IEnumerable<byte> { - } + #region Private Fields + + private byte[] _applicationData; + private byte[] _extensionData; + private bool _masked; - public PayloadData (byte [] applicationData) - : this (new byte [0], applicationData, false) - { - } + #endregion + + #region Public Const Fields + + public const ulong MaxLength = long.MaxValue; + + #endregion + + #region Public Constructors + + public PayloadData() + : this(new byte[0], new byte[0], false) + { + } + + public PayloadData(byte[] applicationData) + : this(new byte[0], applicationData, false) + { + } - public PayloadData (string applicationData) - : this (new byte [0], Encoding.UTF8.GetBytes (applicationData), false) - { - } + public PayloadData(string applicationData) + : this(new byte[0], Encoding.UTF8.GetBytes(applicationData), false) + { + } + + public PayloadData(byte[] applicationData, bool masked) + : this(new byte[0], applicationData, masked) + { + } + + public PayloadData(byte[] extensionData, byte[] applicationData, bool masked) + { + _extensionData = extensionData; + _applicationData = applicationData; + _masked = masked; + } - public PayloadData (byte [] applicationData, bool masked) - : this (new byte [0], applicationData, masked) - { - } + #endregion + + #region Internal Properties - public PayloadData (byte [] extensionData, byte [] applicationData, bool masked) - { - _extensionData = extensionData; - _applicationData = applicationData; - _masked = masked; - } + internal bool ContainsReservedCloseStatusCode + { + get + { + return _applicationData.Length > 1 && + _applicationData.SubArray(0, 2).ToUInt16(ByteOrder.Big).IsReserved(); + } + } - #endregion + #endregion - #region Internal Properties + #region Public Properties - internal bool ContainsReservedCloseStatusCode { - get { - return _applicationData.Length > 1 && - _applicationData.SubArray (0, 2).ToUInt16 (ByteOrder.Big).IsReserved (); - } - } + public byte[] ApplicationData + { + get + { + return _applicationData; + } + } - #endregion + public byte[] ExtensionData + { + get + { + return _extensionData; + } + } - #region Public Properties + public bool IsMasked + { + get + { + return _masked; + } + } - public byte [] ApplicationData { - get { - return _applicationData; - } - } + public ulong Length + { + get + { + return (ulong)(_extensionData.Length + _applicationData.Length); + } + } - public byte [] ExtensionData { - get { - return _extensionData; - } - } + #endregion - public bool IsMasked { - get { - return _masked; - } - } + #region Private Methods - public ulong Length { - get { - return (ulong) (_extensionData.Length + _applicationData.Length); - } - } + private static void mask(byte[] src, byte[] key) + { + for (long i = 0; i < src.Length; i++) + src[i] = (byte)(src[i] ^ key[i % 4]); + } - #endregion + #endregion - #region Private Methods + #region Public Methods - private static void mask (byte [] src, byte [] key) - { - for (long i = 0; i < src.Length; i++) - src [i] = (byte) (src [i] ^ key [i % 4]); + public IEnumerator<byte> GetEnumerator() + { + foreach (byte b in _extensionData) + yield return b; + + foreach (byte b in _applicationData) + yield return b; + } + + public void Mask(byte[] maskingKey) + { + if (_extensionData.Length > 0) + mask(_extensionData, maskingKey); + + if (_applicationData.Length > 0) + mask(_applicationData, maskingKey); + + _masked = !_masked; + } + + public byte[] ToByteArray() + { + return _extensionData.Length > 0 + ? new List<byte>(this).ToArray() + : _applicationData; + } + + public override string ToString() + { + return BitConverter.ToString(ToByteArray()); + } + + #endregion + + #region Explicitly Implemented Interface Members + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + #endregion } - - #endregion - - #region Public Methods - - public IEnumerator<byte> GetEnumerator () - { - foreach (byte b in _extensionData) - yield return b; - - foreach (byte b in _applicationData) - yield return b; - } - - public void Mask (byte [] maskingKey) - { - if (_extensionData.Length > 0) - mask (_extensionData, maskingKey); - - if (_applicationData.Length > 0) - mask (_applicationData, maskingKey); - - _masked = !_masked; - } - - public byte [] ToByteArray () - { - return _extensionData.Length > 0 - ? new List<byte> (this).ToArray () - : _applicationData; - } - - public override string ToString () - { - return BitConverter.ToString (ToByteArray ()); - } - - #endregion - - #region Explicitly Implemented Interface Members - - IEnumerator IEnumerable.GetEnumerator () - { - return GetEnumerator (); - } - - #endregion - } } |
