Ejemplo n.º 1
0
        public async UniTask CreateKey(byte[] buffer, UdpClient udpSocket ,SocketUdp socketUdp)
        {
            var publicKey = RSAPublicKey.Deserialize(buffer);
            RSA = new RSA();
            var key = RSA.CreateKey(publicKey.Modules, publicKey.Exponent);
            AESKey = key.aeskey;

            Command obj = new Command
            {
                P2PEventType = CommandType.AcceptKey,
                Value = key.encrypted,
            };
            var array = new Command[1];
            array[0] = obj;

            var l2 = new UdpPacketL2
            {
                Commands = array,
                PacketNumber = 0,
                ACKNumber = 0,
            }.Serialize();

            var buf = new UdpPacket
            {
                PeerID = UniP2PManager.MyPeerID,
                UdpPacketL2 = l2,
                UdpPacketL2IV = null
            }.Serialize();
            
            await udpSocket.SendAsync(buf, buf.Length, Peer.IPEndPoint);
            PacketCapture.Write(Peer.IPEndPoint.ToString(), buf.Length, "CreateKey");
            State = UdpConnectionState.Connected;
            Peer.State = PeerState.Connected;
            InitHeartBeatAsync(socketUdp);
        }
Ejemplo n.º 2
0
        public async UniTask RequestKey(UdpClient UdpSocket)
        {
            State = UdpConnectionState.KeyExchange;
            RSA = new RSA();
            var publickey = RSA.RequestKey();
            
            Command obj = new Command
            {
                P2PEventType = CommandType.RequestKey,
                Value = publickey.Serialize(),
            };
            var array = new Command[1];
            array[0] = obj;
            var l2 = new UdpPacketL2
            {
                Commands = array,
                PacketNumber = 0,
                ACKNumber = 0,
            }.Serialize();

            var buf = new UdpPacket
            {
                PeerID = UniP2PManager.MyPeerID,
                UdpPacketL2 = l2,
                UdpPacketL2IV = null
            }.Serialize();

            await UdpSocket.SendAsync(buf, buf.Length, Peer.IPEndPoint);
            PacketCapture.Write(Peer.IPEndPoint.ToString(),buf.Length, "RequestKey");
        }
Ejemplo n.º 3
0
 public void AcceptKey(byte[] buffer, SocketUdp socketUdp)
 {
     AESKey = RSA.AcceptKey(buffer);
     State = UdpConnectionState.Connected;
     Peer.State = PeerState.Connected;
     InitHeartBeatAsync(socketUdp);
 }
Ejemplo n.º 4
0
        internal UdpConnection(UdpSocket s, UdpConnectionMode m, UdpEndPoint ep)
        {
            socket        = s;
            mode          = m;
            endpoint      = ep;
            stats         = new UdpStats();
            networkRtt    = socket.Config.DefaultNetworkPing;
            aliasedRtt    = socket.Config.DefaultAliasedPing;
            mtu           = socket.Config.PacketSize;
            alwaysSendMtu = socket.Config.DefaultAlwaysSendMtu;
            state         = UdpConnectionState.Connecting;
            recvTime      = socket.GetCurrentTime();
            sendTime      = recvTime;
            sendWindow    = new UdpRingBuffer <UdpHandle>(socket.Config.PacketWindow);

            this.networkPingFilterRttValues     = new uint[socket.Config.NetworkPingMedianFilterSize];
            this.networkPingFilterSortedIndices = new int[socket.Config.NetworkPingMedianFilterSize];
            for (int i = 0; i < this.networkPingFilterSortedIndices.Length; ++i)
            {
                this.networkPingFilterSortedIndices[i] = i;
            }
            networkPingFilterNextIndexToReplace = 0;

            serializer            = socket.CreateSerializer();
            serializer.Connection = this;
        }
Ejemplo n.º 5
0
 public void DisConnect()
 {
     isTickReliablePacket = false;
     UnreliableCommandBuffer.Clear();
     ReliableCommandBuffer.Clear();
     SentReliableBuffer.Clear();
     State = UdpConnectionState.DisConnect;
 }
Ejemplo n.º 6
0
        void OnStateConnected(UdpConnectionState oldState)
        {
            if (oldState == UdpConnectionState.Connecting)
            {
                if (IsServer)
                {
                    SendCommand(UdpCommandType.Accepted);
                }

                socket.Raise(UdpEvent.PUBLIC_CONNECTED, this);
            }
        }
Ejemplo n.º 7
0
        void OnStateConnected(UdpConnectionState oldState)
        {
            if (oldState == UdpConnectionState.Connecting)
            {
                UdpLog.Info("connected to {0} ({1})", endpoint.ToString(), mode);

                if (IsServer)
                {
                    SendCommand(UdpCommandType.Accepted);
                }

                socket.Raise(UdpEvent.PUBLIC_CONNECTED, this);
            }
        }
Ejemplo n.º 8
0
 internal UdpConnection(UdpSocket sock, UdpConnectionMode m, UdpEndPoint ep)
 {
     socket        = sock;
     mode          = m;
     endpoint      = ep;
     networkRtt    = socket.Config.DefaultNetworkPing;
     aliasedRtt    = socket.Config.DefaultAliasedPing;
     mtu           = sock.Config.DefaultMtu;
     alwaysSendMtu = sock.Config.DefaultAlwaysSendMtu;
     serializer    = sock.CreateSerializer();
     state         = UdpConnectionState.Connecting;
     recvTime      = socket.GetCurrentTime();
     sendTime      = recvTime;
     stats         = new UdpConnectionStats();
     sendWindow    = new UdpRingBuffer <UdpHandle>(sock.Config.PacketWindow);
 }
Ejemplo n.º 9
0
        void OnStateDisconnected(UdpConnectionState oldState)
        {
            if (oldState == UdpConnectionState.Connected)
            {
                while (sendWindow.Empty == false)
                {
                    UdpHandle handle = sendWindow.Dequeue();

                    if (handle.IsObject)
                    {
                        socket.Raise(UdpEvent.PUBLIC_OBJECT_LOST, this, handle.Object);
                    }
                }

                socket.Raise(UdpEvent.PUBLIC_DISCONNECTED, this);
            }
        }
Ejemplo n.º 10
0
        internal void ChangeState(UdpConnectionState newState)
        {
            if (newState == state)
            {
                return;
            }

            UdpConnectionState oldState = state;

            switch (state = newState)
            {
            case UdpConnectionState.Connected:
                OnStateConnected(oldState);
                break;

            case UdpConnectionState.Disconnected:
                OnStateDisconnected(oldState);
                break;
            }
        }
Ejemplo n.º 11
0
        void OnStateConnected(UdpConnectionState oldState)
        {
            if (oldState == UdpConnectionState.Connecting) {
                UdpLog.Info("connected to {0} ({1})", endpoint.ToString(), mode);

                if (IsServer) {
                    SendCommand(UdpCommandType.Accepted);
                }

                socket.Raise(UdpEvent.PUBLIC_CONNECTED, this);
            }
        }
Ejemplo n.º 12
0
 public UdpConnection(Peer peer)
 {
     Peer = peer;
     State = UdpConnectionState.RequestSend;
 }
Ejemplo n.º 13
0
 internal bool CheckState(UdpConnectionState stateValue)
 {
     return(state == stateValue);
 }
Ejemplo n.º 14
0
 internal UdpConnection(UdpSocket sock, UdpConnectionMode m, UdpEndPoint ep)
 {
     socket = sock;
     mode = m;
     endpoint = ep;
     networkRtt = socket.Config.DefaultNetworkPing;
     aliasedRtt = socket.Config.DefaultAliasedPing;
     mtu = sock.Config.DefaultMtu;
     alwaysSendMtu = sock.Config.DefaultAlwaysSendMtu;
     serializer = sock.CreateSerializer();
     state = UdpConnectionState.Connecting;
     recvTime = socket.GetCurrentTime();
     sendTime = recvTime;
     stats = new UdpConnectionStats();
     sendWindow = new UdpRingBuffer<UdpHandle>(sock.Config.PacketWindow);
 }
Ejemplo n.º 15
0
        void OnStateDisconnected(UdpConnectionState oldState)
        {
            if (oldState == UdpConnectionState.Connected) {
                while (sendWindow.Empty == false) {
                    UdpHandle handle = sendWindow.Dequeue();

                    if (handle.IsObject) {
                        socket.Raise(UdpEvent.PUBLIC_OBJECT_LOST, this, handle.Object);
                    }
                }

                socket.Raise(UdpEvent.PUBLIC_DISCONNECTED, this);
            }
        }
Ejemplo n.º 16
0
        void OnStateConnected(UdpConnectionState oldState)
        {
            if (oldState == UdpConnectionState.Connecting) {
                if (IsServer) {
                    SendCommand(UdpCommandType.Accepted);
                }

                socket.Raise(UdpEvent.PUBLIC_CONNECTED, this);
            }
        }
Ejemplo n.º 17
0
 internal bool CheckState(UdpConnectionState stateValue)
 {
     return state == stateValue;
 }
Ejemplo n.º 18
0
        internal void ChangeState(UdpConnectionState newState)
        {
            if (newState == state)
                return;

            UdpConnectionState oldState = state;

            switch (state = newState) {
                case UdpConnectionState.Connected:
                    OnStateConnected(oldState);
                    break;

                case UdpConnectionState.Disconnected:
                    OnStateDisconnected(oldState);
                    break;
            }
        }
Ejemplo n.º 19
0
        internal UdpConnection(UdpSocket s, UdpConnectionMode m, UdpEndPoint ep)
        {
            socket = s;
            mode = m;
            endpoint = ep;
            stats = new UdpStats();
            networkRtt = socket.Config.DefaultNetworkPing;
            aliasedRtt = socket.Config.DefaultAliasedPing;
            mtu = socket.Config.PacketSize;
            alwaysSendMtu = socket.Config.DefaultAlwaysSendMtu;
            state = UdpConnectionState.Connecting;
            recvTime = socket.GetCurrentTime();
            sendTime = recvTime;
            sendWindow = new UdpRingBuffer<UdpHandle>(socket.Config.PacketWindow);

            this.networkPingFilterRttValues = new uint[socket.Config.NetworkPingMedianFilterSize];
            this.networkPingFilterSortedIndices = new int[socket.Config.NetworkPingMedianFilterSize];
            for (int i = 0; i < this.networkPingFilterSortedIndices.Length; ++i)
            {
                this.networkPingFilterSortedIndices[i] = i;
            }
            networkPingFilterNextIndexToReplace = 0;

            serializer = socket.CreateSerializer();
            serializer.Connection = this;
        }