#include "node.hpp" #include "uriparser.hpp" #include "logging.hpp" #include #include int main(int argc, char* argv[]) { namespace po = boost::program_options; init_logging(boost::log::trivial::severity_level::trace, "node"); BOOST_LOG_TRIVIAL(info) << "Started node"; po::options_description desc("Allowed options"); desc.add_options() ("help,h", "produce help message.") ("port,p", po::value()->default_value(9200), "Set listening port.") ("enable_v4", po::value()->default_value(true), "Enable/disable ipv4 accept support.") ("interface4,4", po::value()->default_value("0.0.0.0"), "Set the ipv4 address to listen on.") ("enable_v6", po::value()->default_value(true), "Enable/disable ipv6 accept support.") ("interface6,6", po::value()->default_value("::"), "Set the ipv6 address to listen on.") ("next_node,n", po::value(), "The address of the next node in the network") ("first,f", "This is the first node and will be the communication point for the clients.") ; po::variables_map vm; po::store(po::parse_command_line(argc, argv, desc), vm); po::notify(vm); if (vm.count("help")) { std::cout << desc << "\n"; return 0; } bool en4 = vm["enable_v4"].as(); std::string if4 = vm["interface4"].as(); bool en6 = vm["enable_v6"].as(); std::string if6 = vm["interface6"].as(); uint16_t port = vm["port"].as(); ListenSettings lsettings{en4, if4, en6, if6, port}; bool is_first = bool(vm.count("first")); std::string next_node; if(vm.count("next_node")) { next_node = vm["next_node"].as(); } else { std::cerr << "next_node option is required." << std::endl; return -1; } Uri uri = parse_uri(next_node); NodeNetworkSettings nsettings{is_first, uri.host, uri.port}; Node node(lsettings, nsettings); node.run(); }