Esempio n. 1
0
        public byte[] ToArray()
        {
            using (var buff = new MemoryStream())
            {
                var header = (int)Fin;
                header = (header << 1) + (int)Rsv1;
                header = (header << 1) + (int)Rsv2;
                header = (header << 1) + (int)Rsv3;
                header = (header << 4) + (int)Opcode;
                header = (header << 1) + (int)Mask;
                header = (header << 7) + (int)PayloadLength;
                buff.Write(((ushort)header).InternalToByteArray(Endianness.Big), 0, 2);

                if (PayloadLength > 125)
                {
                    buff.Write(ExtendedPayloadLength, 0, PayloadLength == 126 ? 2 : 8);
                }

                if (Mask == Mask.On)
                {
                    buff.Write(MaskingKey, 0, 4);
                }

                if (PayloadLength > 0)
                {
                    var bytes = PayloadData.ToArray();
                    if (PayloadLength < 127)
                    {
                        buff.Write(bytes, 0, bytes.Length);
                    }
                    else
                    {
                        using (var input = new MemoryStream(bytes))
                            input.CopyTo(buff, 1024);
                    }
                }

#if NET452
                buff.Close();
#endif
                return(buff.ToArray());
            }
        }
Esempio n. 2
0
        internal WebSocketFrame(
            Fin fin, Opcode opcode, PayloadData payloadData, bool compressed = false, bool mask = true)
        {
            Fin    = fin;
            Rsv1   = IsOpcodeData(opcode) && compressed ? Rsv.On : Rsv.Off;
            Rsv2   = Rsv.Off;
            Rsv3   = Rsv.Off;
            Opcode = opcode;

            var len = payloadData.Length;

            if (len < 126)
            {
                PayloadLength         = (byte)len;
                ExtendedPayloadLength = WebSocket.EmptyBytes;
            }
            else if (len < 0x010000)
            {
                PayloadLength         = (byte)126;
                ExtendedPayloadLength = ((ushort)len).InternalToByteArray(Endianness.Big);
            }
            else
            {
                PayloadLength         = (byte)127;
                ExtendedPayloadLength = len.InternalToByteArray(Endianness.Big);
            }

            if (mask)
            {
                Mask       = Mask.On;
                MaskingKey = CreateMaskingKey();
                payloadData.Mask(MaskingKey);
            }
            else
            {
                Mask       = Mask.Off;
                MaskingKey = WebSocket.EmptyBytes;
            }

            PayloadData = payloadData;
        }
Esempio n. 3
0
 internal static WebSocketFrame CreateCloseFrame(PayloadData payloadData, bool mask)
 {
     return(new WebSocketFrame(Fin.Final, Opcode.Close, payloadData, false, mask));
 }
Esempio n. 4
0
 internal WebSocketFrame(Opcode opcode, PayloadData payloadData, bool mask = true)
     : this(Fin.Final, opcode, payloadData, false, mask)
 {
 }
Esempio n. 5
0
 static PayloadData()
 {
     Empty     = new PayloadData();
     MaxLength = Int64.MaxValue;
 }
Esempio n. 6
0
 internal CloseEventArgs(CloseStatusCode code, string reason = null)
 {
     PayloadData = new PayloadData((ushort)code, reason);
 }
Esempio n. 7
0
 internal CloseEventArgs(PayloadData payloadData = null)
 {
     PayloadData = payloadData ?? new PayloadData();
 }
Esempio n. 8
0
 internal CloseEventArgs(ushort code, string reason)
 {
     PayloadData = new PayloadData(code, reason);
 }
Esempio n. 9
0
 internal static WebSocketFrame CreateCloseFrame(PayloadData payloadData, bool mask) => new WebSocketFrame(Fin.Final, Opcode.Close, payloadData ?? new PayloadData(), false, mask);
Esempio n. 10
0
 internal WebSocketFrame(Opcode opcode, PayloadData payloadData)
     : this(Fin.Final, opcode, payloadData)
 {
 }
Esempio n. 11
0
 internal static WebSocketFrame CreateCloseFrame(PayloadData payloadData) => new WebSocketFrame(Fin.Final, Opcode.Close, payloadData ?? new PayloadData());
Esempio n. 12
0
 internal CloseEventArgs(PayloadData payloadData)
 {
     PayloadData = payloadData;
 }