예제 #1
0
        /*
         * [5c22fc7f][unpack]: 1
         * [5c22fc7f][test]: token=4294967295 res=3569422453
         * [5c22fc7f][test]: bytes=520 accept 0 1
         * [5c22fc7f][unpack]: 8
         * [5c22fc7f][test]: token=157418043 res=4168385603
         * [5c22fc7f][check]: cur=157418043 seed=1257701721
         * [5c22fc7f][test]: bytes=22 accept 1 8
         *
         */
        public override int ProcessMessage(IPEndPoint endPoint, ChunkConstruct packet)
        {
            var broadcastResponse = false;

            // TODO ODODODO
            if (packet.Token != TokenHelper.TokenNone &&
                !CheckToken(endPoint, packet.Token, packet.ResponseToken, ref broadcastResponse))
            {
                return(0);
            }

            var verified     = packet.Token != TokenHelper.TokenNone;
            var tokenMessage = packet.Flags.HasFlag(PacketFlags.Control) &&
                               packet.Data[0] == (int)ConnectionMessages.Token;

            if (packet.Flags.HasFlag(PacketFlags.Connless))
            {
                return((verified && !broadcastResponse) ? 1 : 0);
            }

            if (!tokenMessage)
            {
                return((verified && !broadcastResponse) ? 1 : 0);
            }

            if (verified)
            {
                return(broadcastResponse ? -1 : 1);
            }

            if (packet.DataSize >= TokenHelper.TokenRequestDataSize)
            {
                NetworkHelper.SendConnectionMsgWithToken(Client, endPoint, packet.ResponseToken, 0,
                                                         ConnectionMessages.Token,
                                                         GenerateToken(endPoint), false);
            }

            return(0);
        }
예제 #2
0
 public override void FetchToken(IPEndPoint endPoint)
 {
     NetworkHelper.SendConnectionMsgWithToken(Client, endPoint,
                                              TokenHelper.TokenNone, 0, ConnectionMessages.Token,
                                              TokenManager.GenerateToken(endPoint), true);
 }
예제 #3
0
 protected override void SendConnectionMsgWithToken(ConnectionMessages msg)
 {
     LastSendTime = Time.Get();
     NetworkHelper.SendConnectionMsgWithToken(UdpClient, EndPoint, PeerToken, 0,
                                              msg, Token, true);
 }