public void GetPeersEncode() { GetPeers m = new GetPeers(id, infohash); m.TransactionId = transactionId; Compare(m, "d1:ad2:id20:abcdefghij01234567899:info_hash20:mnopqrstuvwxyz123456e1:q9:get_peers1:t2:aa1:y1:qe"); message = m; }
private async Task SendGetPeers(Node target) { NodeId distance = target.Id.Xor(infoHash); ClosestActiveNodes.Add(distance, target); GetPeers m = new GetPeers(engine.LocalId, infoHash); activeQueries++; var args = await engine.SendQueryAsync(m, target); activeQueries--; // We want to keep a list of the top (K) closest nodes which have responded int index = ClosestActiveNodes.Values.IndexOf(target); if (index >= Bucket.MaxCapacity || args.TimedOut) { ClosestActiveNodes.RemoveAt(index); } if (args.TimedOut) { if (activeQueries == 0) { tcs.TrySetResult(new Node[0]); } return; } GetPeersResponse response = (GetPeersResponse)args.Response; // Ensure that the local Node object has the token. There may/may not be // an additional copy in the routing table depending on whether or not // it was able to fit into the table. target.Token = response.Token; if (response.Values != null) { // We have actual peers! engine.RaisePeersFound(infoHash, Peer.Decode(response.Values)); } else if (response.Nodes != null) { // We got a list of nodes which are closer IEnumerable <Node> newNodes = Node.FromCompactNode(response.Nodes); foreach (Node closer in Node.CloserNodes(infoHash, ClosestNodes, newNodes, Bucket.MaxCapacity)) { await SendGetPeers(closer); } } if (activeQueries == 0) { tcs.TrySetResult(ClosestActiveNodes.Values.ToArray()); } }
public void GetPeersEncode() { var m = new GetPeers(_id, _infohash) { TransactionId = _transactionId }; Compare(m, "d1:ad2:id20:abcdefghij01234567899:info_hash20:mnopqrstuvwxyz123456e1:q9:get_peers1:t2:aa1:y1:qe"); _message = m; }
public void GetPeersDecode() { string text = "d1:ad2:id20:abcdefghij01234567899:info_hash20:mnopqrstuvwxyz123456e1:q9:get_peers1:t2:aa1:y1:qe"; GetPeers m = (GetPeers)Decode(text); Assert.AreEqual(infohash, m.InfoHash, "#1"); Assert.AreEqual(id, m.Id, "#2"); Assert.AreEqual(transactionId, m.TransactionId, "#3"); Compare(m, text); }
private void SendGetPeers(Node n) { NodeId distance = n.Id.Xor(infoHash); queriedNodes.Add(distance, n); activeQueries++; GetPeers m = new GetPeers(engine.LocalId, infoHash); SendQueryTask task = new SendQueryTask(engine, m, n); task.Completed += GetPeersCompleted; task.Execute(); }
private void SendGetPeers(Node n) { var distance = n.Id.Xor(_infoHash); if (ClosestActiveNodes.ContainsKey(distance)) { return; } ClosestActiveNodes.Add(distance, n); _activeQueries++; var m = new GetPeers(_engine.LocalId, _infoHash); var task = new SendQueryTask(_engine, m, n); task.Completed += GetPeersCompleted; task.Execute(); }
public void GetPeersEncode() { var m = new GetPeers(_id, _infohash) {TransactionId = _transactionId}; Compare(m, "d1:ad2:id20:abcdefghij01234567899:info_hash20:mnopqrstuvwxyz123456e1:q9:get_peers1:t2:aa1:y1:qe"); _message = m; }