コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: MessageSTUN.cs プロジェクト: cxz456999/NATP
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
 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);
 }
コード例 #5
0
 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);
 }