void print_node_info(const DhtRunner& dht, const dht_params& params) { std::cout << "OpenDht node " << dht.getNodeId() << " running on port " << dht.getBoundPort() << std::endl; if (params.is_bootstrap_node) std::cout << "Running in bootstrap mode (discouraged)." << std::endl; if (params.generate_identity) std::cout << "Public key ID " << dht.getId() << std::endl; }
int main(int argc, char **argv) { auto params = parseArgs(argc, argv); // TODO: remove with GnuTLS >= 3.3 int rc = gnutls_global_init(); if (rc != GNUTLS_E_SUCCESS) throw std::runtime_error(std::string("Error initializing GnuTLS: ")+gnutls_strerror(rc)); auto ca_tmp = dht::crypto::generateIdentity("DHT Node CA"); auto crt_tmp = dht::crypto::generateIdentity("Scanner node", ca_tmp); DhtRunner dht; dht.run(params.port, crt_tmp, true, params.network); if (not params.bootstrap.first.empty()) dht.bootstrap(params.bootstrap.first.c_str(), params.bootstrap.second.c_str()); std::cout << "OpenDht node " << dht.getNodeId() << " running on port " << params.port << std::endl; std::cout << "Scanning network..." << std::endl; auto all_nodes = std::make_shared<NodeSet>(); dht::InfoHash cur_h {}; cur_h.setBit(8*HASH_LEN-1, 1); std::this_thread::sleep_for(std::chrono::seconds(2)); std::atomic_uint done {false}; step(dht, done, all_nodes, cur_h, 0); { std::mutex m; std::unique_lock<std::mutex> lk(m); cv.wait(lk, [&](){ return done.load() == 0; }); } std::cout << std::endl << "Scan ended: " << all_nodes->size() << " nodes found." << std::endl; for (const auto& n : *all_nodes) std::cout << "Node " << *n << std::endl; dht.join(); gnutls_global_deinit(); return 0; }
void print_node_info(const DhtRunner& dht, const dht_params& params) { std::cout << "OpenDht node " << dht.getNodeId() << " running on port " << dht.getBoundPort() << std::endl; std::cout << "Public key ID " << dht.getId() << std::endl; }