예제 #1
0
        public HandshakeExtension GetExtension(string name)
        {
            if (name == null)
            {
                throw new ArgumentNullException("name");
            }

            return(RequiredExtensions.FirstOrDefault(x => x.Name == name) ??
                   OptionalExtensions.FirstOrDefault(x => x.Name == name));
        }
예제 #2
0
        public int CopyTo(byte[] destination, int offset)
        {
            var firstOffset = offset;

            destination[offset++] = VersionMajor;
            destination[offset++] = VersionMinor;
            destination[offset++] = Flags;

            //identity
            destination[offset++]  = (byte)Identity.Length;
            _receiveStateBytesLeft = Encoding.ASCII.GetBytes(Identity, 0, Identity.Length, destination, offset);
            offset += _receiveStateBytesLeft;

            //required extensions
            if (RequiredExtensions == null || RequiredExtensions.Length == 0)
            {
                //leave them as zeroes.
                offset += 2;
            }
            else
            {
                var str = string.Join(";", RequiredExtensions.Select(x => x.Serialize()));
                var buf = BitConverter.GetBytes((ushort)str.Length);
                if (BitConverter.IsLittleEndian)
                {
                    Array.Reverse(buf);
                }
                Buffer.BlockCopy(buf, 0, destination, offset, 2);
                _receiveStateBytesLeft = Encoding.ASCII.GetBytes(str, 0, str.Length, destination, offset + 2);
                offset += 2 + _receiveStateBytesLeft;
            }

            //optional extensions
            if (OptionalExtensions == null || OptionalExtensions.Length == 0)
            {
                //leave them as zeroes.
                offset += 2;
            }
            else
            {
                var str = string.Join(";", OptionalExtensions.Select(x => x.Serialize()));
                var buf = BitConverter.GetBytes((ushort)str.Length);
                if (BitConverter.IsLittleEndian)
                {
                    Array.Reverse(buf);
                }
                Buffer.BlockCopy(buf, 0, destination, offset, 2);
                _receiveStateBytesLeft = Encoding.ASCII.GetBytes(str, 0, str.Length, destination, offset + 2);
                offset += 2 + _receiveStateBytesLeft;
            }

            return(offset - firstOffset);
        }
예제 #3
0
        public bool HasExtension(string extension)
        {
            bool result = false;

            for (uint i = 0; i < RequiredExtensions.NumberOfItems; i++)
            {
                if (string.Equals(RequiredExtensions.GetItem(i), extension))
                {
                    result = true;
                    break;
                }
            }

            return(result);
        }