public void Test_CreateGetPeersResponse()
        {
            var        tid      = DHTHelper.GetTransactionId();
            var        nodeId   = DHTHelper.GetRandomID();
            var        infoHash = DHTHelper.GetRandomHashID();
            var        peers    = new List <IDHTPeer>();
            var        nodes    = new List <DHTNode>();
            DHTMessage msg      = DHTMessage.CreateGetPeersResponse(tid, nodeId, infoHash, peers, nodes);

            Assert.IsNotNull(msg);
            Assert.AreEqual(MessageType.Response, msg.Type);
            // TODO: test contents
        }
Exemple #2
0
        internal void SendAnnouncePeerQuery(IPEndPoint address, byte[] infoHash, byte implied_port, int port, BString token)
        {
            DHTNode node = fRoutingTable.FindNode(address);

            if (node != null)
            {
                long nowTicks = DateTime.Now.Ticks;
                if (nowTicks - node.LastAnnouncementTime < AnnounceLife.Ticks)
                {
                    return;
                }
                node.LastAnnouncementTime = nowTicks;
                // TODO: update announce by timer, every 30m
            }

            var transactionID = DHTHelper.GetTransactionId();
            var msg           = DHTMessage.CreateAnnouncePeerQuery(transactionID, fLocalID, infoHash, implied_port, port, token);

            SetTransaction(transactionID, msg);
            Send(address, msg);
        }
Exemple #3
0
        public void Test_ctor()
        {
            var peersHolder = new DHTPeersHolder();

            var dhtClient = new DHTClient(DHTClient.IPAnyAddress, DHTClient.PublicDHTPort, peersHolder, "x1");

            Assert.IsNotNull(dhtClient);
            Assert.IsNotNull(dhtClient.LocalID);
            Assert.IsNotNull(dhtClient.Socket);
            Assert.AreEqual(new IPEndPoint(DHTClient.IPAnyAddress, DHTClient.PublicDHTPort), dhtClient.LocalEndPoint);

            dhtClient.PeersFound       += OnPeersFound;
            dhtClient.PeerPinged       += OnPeerPinged;
            dhtClient.QueryReceived    += OnQueryReceive;
            dhtClient.ResponseReceived += OnResponseReceive;

            var tid = DHTHelper.GetTransactionId();
            var msg = new DHTMessage(MessageType.Query, QueryType.Ping, null);

            dhtClient.SetTransaction(tid, msg);
            Assert.AreEqual(QueryType.Ping, dhtClient.CheckTransaction(tid));
        }
Exemple #4
0
        public void SendAnnouncePeerQuery(IPEndPoint address, byte[] infoHash, byte implied_port, int port, BString token)
        {
            DHTNode node = fRoutingTable.FindNode(address);

            if (node != null)
            {
                long nowTicks = DateTime.Now.Ticks;
                if (nowTicks - node.LastAnnouncementTime < AnnounceLife.Ticks)
                {
                    return;
                }
                node.LastAnnouncementTime = nowTicks;
                // TODO: update announce by timer, every 30m
            }

            var transactionID = DHTHelper.GetTransactionId();

            byte[] nid = fLocalID;

            BDictionary sendData = DHTMessage.CreateAnnouncePeerQuery(transactionID, nid, infoHash, implied_port, port, token);

            SetTransaction(transactionID, new DHTMessage(MsgType.query, QueryType.announce_peer, sendData));
            Send(address, sendData);
        }