public override void Handle(DhtEngine engine, Node node) { base.Handle(engine, node); BEncodedString token = engine.TokenManager.GenerateToken(node); var response = new GetPeersResponse(engine.RoutingTable.LocalNode.Id, TransactionId, token); if (engine.Torrents.ContainsKey(InfoHash)) { var list = new BEncodedList(); foreach (Node n in engine.Torrents[InfoHash]) list.Add(n.CompactPort()); response.Values = list; } else { // Is this right? response.Nodes = Node.CompactNode(engine.RoutingTable.GetClosest(InfoHash)); } engine.MessageLoop.EnqueueSend(response, node.EndPoint); }
public override void Handle(DhtEngine engine, Node node) { base.Handle(engine, node); BEncodedString token = engine.TokenManager.GenerateToken(node); var response = new GetPeersResponse(engine.RoutingTable.LocalNode.Id, TransactionId, token); if (engine.Torrents.ContainsKey(InfoHash)) { var list = new BEncodedList(); foreach (Node n in engine.Torrents[InfoHash]) { list.Add(n.CompactPort()); } response.Values = list; } else { response.Nodes = Node.CompactNode(engine.RoutingTable.GetClosest(InfoHash)); } engine.MessageLoop.EnqueueSend(response, node, node.EndPoint); }
public void GetPeersResponseEncode() { GetPeersResponse m = new GetPeersResponse(id, transactionId, token); m.Values = new BEncodedList(); m.Values.Add((BEncodedString)"axje.u"); m.Values.Add((BEncodedString)"idhtnm"); Compare(m, "d1:rd2:id20:abcdefghij01234567895:token8:aoeusnth6:valuesl6:axje.u6:idhtnmee1:t2:aa1:y1:re"); }