// 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 }
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); }