internal void SendAnnouncePeerQuery(DHTNode remoteNode, DHTId infoHash, byte implied_port, int port, BString token) { if (remoteNode == null || token == null || token.Length == 0) { return; } long nowTicks = DateTime.UtcNow.Ticks; if (nowTicks - remoteNode.LastAnnouncementTime < AnnounceLife.Ticks) { return; } remoteNode.LastAnnouncementTime = nowTicks; #if DEBUG_DHT_INTERNALS fLogger.WriteDebug("Send announce peer query {0}, {1}, {2}", remoteNode.EndPoint, implied_port, port); #endif // https://www.bittorrent.org/beps/bep_0005.html // If implied_port (0/1) is present and non-zero, the port argument should be ignored // and the source port of the UDP packet should be used as the peer's port instead. var transactionID = DHTTransactions.GetNextId(); var msg = DHTMessage.CreateAnnouncePeerQuery(transactionID, fLocalID, infoHash, implied_port, port, token); fTransactions.SetQuery(transactionID, msg); Send(remoteNode.EndPoint, msg); }
public void Test_CreateAnnouncePeerQuery() { var tid = DHTTransactions.GetNextId(); var nodeId = DHTId.CreateRandom(); var infoHash = DHTId.CreateRandom(); DHTMessage msg = DHTMessage.CreateAnnouncePeerQuery(tid, nodeId, infoHash, 1, 1, new BString("XX")); Assert.IsNotNull(msg); Assert.AreEqual(MessageType.Query, msg.Type); Assert.AreEqual(QueryType.AnnouncePeer, msg.QueryType); // TODO: test contents }
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); }
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); }