#include #include #include #include bool dumpRc(const std::vector& files) { for(const auto& file : files) { llarp::RouterContact rc; const bool ret = rc.Read(file.c_str()); if (ret) { std::cout << "file = " << file << "\n"; std::cout << rc << "\n\n"; } else { std::cerr << "file = " << file << " was not a valid rc file\n"; } } return true; } int main(int argc, char *argv[]) { #ifdef LOKINET_DEBUG absl::SetMutexDeadlockDetectionMode(absl::OnDeadlockCycle::kAbort); #endif // clang-format off cxxopts::Options options( "lokinet-rcutil", "LokiNET is a free, open source, private, decentralized, \"market based sybil resistant\" and IP based onion routing network" ); options.add_options() ("v,verbose", "Verbose", cxxopts::value()) ("h,help", "help", cxxopts::value()) ("dump", "dump rc file", cxxopts::value>(), "FILE"); // clang-format on try { const auto result = options.parse(argc, argv); if(result.count("verbose") > 0) { SetLogLevel(llarp::eLogDebug); llarp::LogDebug("debug logging activated"); } if(result.count("help") > 0) { std::cout << options.help() << std::endl; return 0; } if(result.count("dump") > 0) { if (!dumpRc(result["dump"].as>())) { return 1; } } } catch(const cxxopts::OptionParseException &ex) { std::cerr << ex.what() << std::endl; std::cout << options.help() << std::endl; return 1; } return 0; }