示例#1
0
        // From network
        public Encapsulation_Packet(byte[] Packet, ref int Offset, int Length)
        {
            ushort Cmd = BitConverter.ToUInt16(Packet, Offset);

            if (!(Enum.IsDefined(typeof(EncapsulationCommands), Cmd)))
            {
                Status = EncapsulationStatus.Unsupported_Command;
                return;
            }

            Command     = (EncapsulationCommands)Cmd;
            Offset     += 2;
            this.Length = BitConverter.ToUInt16(Packet, Offset);

            if (Length < 24 + this.Length)
            {
                Status = EncapsulationStatus.Invalid_Length;
                return;
            }

            Offset       += 2;
            Sessionhandle = BitConverter.ToUInt32(Packet, Offset);
            Offset       += 4;
            Status        = (EncapsulationStatus)BitConverter.ToUInt32(Packet, Offset);
            Offset       += 4;
            Array.Copy(Packet, Offset, SenderContext, 0, 8);
            Offset += 8;
            Options = BitConverter.ToUInt32(Packet, Offset);
            Offset += 4;  // value 24
        }
示例#2
0
        public byte[] toByteArray(EncapsulationStatus Status = EncapsulationStatus.Success)
        {
            byte[] ret = new byte[24 + Length];

            Array.Copy(BitConverter.GetBytes((ushort)Command), 0, ret, 0, 2);
            Array.Copy(BitConverter.GetBytes(Length), 0, ret, 2, 2);
            Array.Copy(BitConverter.GetBytes(Sessionhandle), 0, ret, 4, 4);
            Array.Copy(BitConverter.GetBytes((uint)Status), 0, ret, 8, 4);
            Array.Copy(SenderContext, 0, ret, 12, 8);
            Buffer.BlockCopy(BitConverter.GetBytes(Options), 0, ret, 20, 4);
            if (Encapsulateddata != null)
            {
                Array.Copy(Encapsulateddata, 0, ret, 24, Encapsulateddata.Length);
            }
            return(ret);
        }