| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 | 
							- using System;
 
- using System.Collections;
 
- using System.Collections.Generic;
 
- 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)
 
-     {
 
-     }
 
-     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 (byte [] applicationData, bool masked)
 
-       : this (new byte [0], applicationData, masked)
 
-     {
 
-     }
 
-     public PayloadData (byte [] extensionData, byte [] applicationData, bool masked)
 
-     {
 
-       _extensionData = extensionData;
 
-       _applicationData = applicationData;
 
-       _masked = masked;
 
-     }
 
-     #endregion
 
-     #region Internal Properties
 
-     internal bool ContainsReservedCloseStatusCode {
 
-       get {
 
-         return _applicationData.Length > 1 &&
 
-                _applicationData.SubArray (0, 2).ToUInt16 (ByteOrder.Big).IsReserved ();
 
-       }
 
-     }
 
-     #endregion
 
-     #region Public Properties
 
-     public byte [] ApplicationData {
 
-       get {
 
-         return _applicationData;
 
-       }
 
-     }
 
-     public byte [] ExtensionData {
 
-       get {
 
-         return _extensionData;
 
-       }
 
-     }
 
-     public bool IsMasked {
 
-       get {
 
-         return _masked;
 
-       }
 
-     }
 
-     public ulong Length {
 
-       get {
 
-         return (ulong) (_extensionData.Length + _applicationData.Length);
 
-       }
 
-     }
 
-     #endregion
 
-     #region Private 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]);
 
-     }
 
-     #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
 
-   }
 
- }
 
 
  |