public void Test_GetNeighbor() { var bytes1 = new byte[] { 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11 }; var bytes2 = new byte[] { 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77 }; var result = DHTHelper.GetNeighbor(bytes1, bytes2); Assert.AreEqual("1111111111111111111177777777777777777777", result.ToHexString()); }
internal void SendFindNodeQuery(IPEndPoint address, byte[] data) { var transactionID = DHTHelper.GetTransactionId(); byte[] nid = (data == null) ? fLocalID : DHTHelper.GetNeighbor(data, fLocalID); var msg = DHTMessage.CreateFindNodeQuery(transactionID, nid); SetTransaction(transactionID, msg); Send(address, msg); }
private void SendFindNodeQuery(IPEndPoint address, byte[] data) { var transactionID = DHTHelper.GetTransactionId(); byte[] nid = (data == null) ? fLocalID : DHTHelper.GetNeighbor(data, fLocalID); BDictionary sendData = DHTMessage.CreateFindNodeQuery(transactionID, nid); SetTransaction(transactionID, new DHTMessage(MsgType.query, QueryType.find_node, sendData)); Send(address, sendData); }
private void OnRecvGetPeersQuery(IPEndPoint ipinfo, BDictionary data) { var t = data.Get <BString>("t"); var args = data.Get <BDictionary>("a"); var id = args.Get <BString>("id"); var infoHash = args.Get <BString>("info_hash"); fLogger.WriteDebug("Receive `get_peers` query from {0} [{1}] for {2}", ipinfo.ToString(), id.Value.ToHexString(), infoHash.Value.ToHexString()); fRoutingTable.UpdateNode(new DHTNode(id.Value, ipinfo)); var neighbor = DHTHelper.GetNeighbor(infoHash.Value, fLocalID); var peersList = (Algorithms.ArraysEqual(infoHash.Value, fSearchInfoHash)) ? fPeersHolder.GetPeersList() : null; var nodesList = fRoutingTable.FindNodes(infoHash.Value); Send(ipinfo, DHTMessage.CreateGetPeersResponse(t, neighbor, infoHash.Value, peersList, nodesList)); }