public bool FromBuffer(byte[] buffer, long offset, long size) { serializer.SetBuffer(buffer, offset, size); if (buffer[offset] != 0x38) { IsMessage = false; connectionID = serializer.ReadInt(); data = new byte[size - 4]; Buffer.BlockCopy(buffer, (int)offset + 4, data, 0, (int)size - 4); //data = serializer.ReadBytes((int)size-4); return(false); } serializer.ReadByte(); // read heard 00111000 methodType = (NATPMethod)serializer.ReadByte(); if (!Enum.IsDefined(typeof(NATPMethod), methodType)) { IsMessage = false; serializer.bytePos = (int)offset; connectionID = serializer.ReadInt(); data = new byte[size - 4]; Buffer.BlockCopy(buffer, (int)offset + 4, data, 0, (int)size - 4); //data = serializer.ReadBytes((int)size - 4); return(false); } IsMessage = true; ReadAttribute(); data = null; return(true); }
public void ReadResponse(byte[] datas, long offset, long size, out byte[] rcvData) { serializer.SetBuffer(datas, offset, size); methodId = (ushort)((uint)serializer.ReadUShort() & 0x3FFF); //0x3F (0011 1111) sets left most 2 bits to 00 methodLength = serializer.ReadUShort(); transactionID = serializer.ReadBytes(16); if (!Enum.IsDefined(typeof(STUNMethod), (STUNMethod)methodId) || methodLength != serializer.byteLength - serializer.bytePos) { serializer.SetStartPos(); isIndicateData = IsSTUNMessage = false; serializer.ReverserBuffer((int)offset, 4); ushort appSize = serializer.ReadUShort(); responseChannelNumber = serializer.ReadUShort(); rcvData = new byte[appSize]; Array.Copy(datas, 4, rcvData, 0, appSize); return; } method = (STUNMethod)methodId; isIndicateData = method == STUNMethod.DataIndication; IsSTUNMessage = !isIndicateData; ReadAttribute(out rcvData); }
private List <byte[]> DecryptPackage(byte[] data) { serializer.SetBuffer(data, 0, data.Length); List <byte[]> packages = new List <byte[]>(); while (!serializer.IsEnd()) { int pkgLength = serializer.ReadInt(); packages.Add(serializer.ReadBytes(pkgLength)); } return(packages); }
public bool FromBuffer(byte[] buffer, long offset, long size) { if (buffer[offset] != 0x38) { IsMessage = false; return(false); } serializer.SetBuffer(buffer, offset, size); serializer.ReadByte(); // read heard 00111000 methodType = (SignalingMethod)serializer.ReadByte(); if (!Enum.IsDefined(typeof(SignalingMethod), methodType)) { IsMessage = false; return(false); } IsMessage = true; ReadAttribute(); return(true); }
public bool FromBuffer(byte[] buffer, long offset, long size) { if (buffer[offset] != 0x38) { return(false); } serializer.SetBuffer(buffer, offset, size); serializer.ReadByte(); // read heard 00111000 methodType = (SignalingMethod)serializer.ReadByte(); if (!Enum.IsDefined(typeof(SignalingMethod), methodType)) { return(false); } //Console.WriteLine("SignalingMethod: {0}", Enum.GetName(typeof(SignalingMethod), methodType)); ReadAttribute(); IsMessage = true; return(true); }