コード例 #1
0
        public virtual byte[] GenerateResponse(NatPacketType packetType)
        {
            List <byte> data = new List <byte>();

            data.AddRange(MagicData);
            data.Add(Version);
            data.Add((byte)packetType);
            data.AddRange(BitConverter.GetBytes(Cookie));

            return(data.ToArray());
        }
コード例 #2
0
        public override byte[] GenerateResponse(NatPacketType packetType)
        {
            List <byte> data = new List <byte>();

            data.AddRange(base.GenerateResponse(packetType));
            data.AddRange(((IPEndPoint)RemoteEndPoint).Address.GetAddressBytes());
            data.AddRange(BitConverter.GetBytes((short)((IPEndPoint)RemoteEndPoint).Port));
            data.Add(GotYourData);
            data.Add(Finished);

            return(data.ToArray());
        }
コード例 #3
0
        public virtual bool Parse(byte[] recv)
        {
            if (recv.Length < Size)
            {
                return(false);
            }

            Version    = recv[MagicData.Length];
            PacketType = (NatPacketType)recv[MagicData.Length + 1];
            Cookie     = BitConverter.ToInt32(ByteTools.SubBytes(recv, MagicData.Length + 2, 4));

            return(true);
        }
コード例 #4
0
        public virtual bool Parse()
        {
            if (RawRequest.Length < Size)
            {
                return(false);
            }

            Version    = RawRequest[MagicData.Length];
            PacketType = (NatPacketType)RawRequest[MagicData.Length + 1];
            Cookie     = BitConverter.ToUInt32(ByteTools.SubBytes(RawRequest, MagicData.Length + 2, 4));

            return(true);
        }
コード例 #5
0
        public override byte[] GenerateResponse(NatPacketType packetType)
        {
            List <byte> data = new List <byte>();

            data.AddRange(base.GenerateResponse(packetType));

            data.Add(PortType);
            data.Add(ClientIndex);
            data.Add(UseGamePort);
            data.AddRange(BitConverter.GetBytes(LocalIP));
            data.AddRange(BitConverter.GetBytes(LocalPort));

            return(data.ToArray());
        }
コード例 #6
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="packetType"></param>
        /// <param name="endPoint">public endpoint</param>
        /// <returns></returns>
        public byte[] GenerateResponse(NatPacketType packetType, EndPoint endPoint)
        {
            List <byte> data = new List <byte>();

            data.AddRange(base.GenerateResponse(packetType));

            data.Add(PortType);
            data.Add(ClientIndex);
            data.Add(UseGamePort);

            data.AddRange(((IPEndPoint)endPoint).Address.GetAddressBytes());
            data.AddRange(BitConverter.GetBytes((short)((IPEndPoint)endPoint).Port));

            return(data.ToArray());
        }
コード例 #7
0
        public override byte[] GenerateResponse(NatPacketType packetType)
        {
            List <byte> data = new List <byte>();

            data.AddRange(base.GenerateResponse(packetType));

            data.Add(PortType);
            data.Add(ClientIndex);
            data.Add(NegResult);
            data.AddRange(BitConverter.GetBytes((int)NatType));
            data.AddRange(BitConverter.GetBytes((int)MappingScheme));
            data.AddRange(Encoding.ASCII.GetBytes(GameName));

            return(data.ToArray());
        }
コード例 #8
0
        public BasePacket(byte[] data)
        {
            if (data.Length < BasePacketSize)
            {
                return;
            }

            byte[] sub = ByteExtensions.SubBytes(data, 0, magicDataLen);
            //bool isEqual = Array.Equals(sub, NatNegInfo.MagicData);
            if (sub[0] != NatNegInfo.MagicData[0] || sub[1] != NatNegInfo.MagicData[1] || sub[2] != NatNegInfo.MagicData[2])
            {
                return;
            }

            if (data[magicDataLen + 2] < 0 || data[magicDataLen + 2] > (byte)NatPacketType.PreInitAck)
            {
                return;
            }

            Version    = data[magicDataLen];
            PacketType = (NatPacketType)data[magicDataLen + 1];
            Cookie     = BitConverter.ToInt32(ByteExtensions.SubBytes(data, magicDataLen + 2, 4));
        }
コード例 #9
0
 public NNRequestBase SetPacketType(NatPacketType type)
 {
     PacketType = type;
     return(this);
 }
コード例 #10
0
 public BasePacket SetPacketType(NatPacketType type)
 {
     PacketType = type;
     return(this);
 }