diff options
| author | Dennis Brentjes <d.brentjes@gmail.com> | 2016-10-21 14:01:26 +0200 |
|---|---|---|
| committer | Dennis Brentjes <d.brentjes@gmail.com> | 2016-10-21 18:15:46 +0200 |
| commit | 510ce3bec7915a790fbf75ace5521e437d9d416a (patch) | |
| tree | 7b9286875652b677a110287d11d024f85879cc7a /node/main.cpp | |
| parent | 640e0ad7a762d0473581c2114c2c945961bea80f (diff) | |
| download | cmix-510ce3bec7915a790fbf75ace5521e437d9d416a.tar.gz cmix-510ce3bec7915a790fbf75ace5521e437d9d416a.tar.bz2 cmix-510ce3bec7915a790fbf75ace5521e437d9d416a.zip | |
Adds SSL connections between nodes.
Diffstat (limited to 'node/main.cpp')
| -rw-r--r-- | node/main.cpp | 67 |
1 files changed, 62 insertions, 5 deletions
diff --git a/node/main.cpp b/node/main.cpp index 527e3c5..0c81312 100644 --- a/node/main.cpp +++ b/node/main.cpp @@ -4,6 +4,7 @@ #include "logging.hpp" #include <boost/program_options.hpp> +#include <boost/filesystem/operations.hpp> #include <iostream> @@ -18,8 +19,12 @@ int main(int argc, char* argv[]) { ("interface4,4", po::value<std::string>()->default_value("0.0.0.0"), "Set the ipv4 address to listen on.") ("enable_v6", po::value<bool>()->default_value(true), "Enable/disable ipv6 accept support.") ("interface6,6", po::value<std::string>()->default_value("::"), "Set the ipv6 address to listen on.") - ("next_node,n", po::value<std::string>(), "The address of the next node in the network") + ("next_node,n", po::value<std::string>(), "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.") + ("cert,c", po::value<std::string>(), "The cert file to use (in pem format).") + ("key,k", po::value<std::string>(), "The key file (in pem format).") + ("dhparam,d", po::value<std::string>(), "The dhparam file.") + ("certdir", po::value<std::string>(), "Directory containing trusted certificates.") ; po::variables_map vm; @@ -37,12 +42,54 @@ int main(int argc, char* argv[]) { std::string if6 = vm["interface6"].as<std::string>(); uint16_t port = vm["port"].as<uint16_t>(); - init_logging(boost::log::trivial::severity_level::trace, "node_" + std::to_string(port)); + std::string cert; + if(vm.count("cert")) { + std::string filename = vm["cert"].as<std::string>(); + if(boost::filesystem::exists(filename)) { + cert = filename; + } else { + std::cerr << "cert file: \"" << filename << "\" does not exist"; + return -1; + } + } else { + std::cerr << "supplying a certificate is required" << std::endl; + return -1; + } - BOOST_LOG_TRIVIAL(info) << "Started node"; + std::string key; + if(vm.count("key")) { + std::string filename = vm["key"].as<std::string>(); + if(boost::filesystem::exists(filename)) { + key = filename; + } else { + std::cerr << "key file: \"" << filename << "\" does not exist"; + return -1; + } + } else { + std::cerr << "supplying a key file is required" << std::endl; + return -1; + } + + std::string dhparam; + if(vm.count("dhparam")) { + std::string filename = vm["dhparam"].as<std::string>(); + if(boost::filesystem::exists(filename)) { + dhparam = filename; + } else { + std::cerr << "dhparam file: \"" << filename << "\" does not exist"; + return -1; + } + } else { + std::cerr << "supplying a dhparam file is required" << std::endl; + return -1; + } + + ListenSettings lsettings{en4, if4, en6, if6, port, true, cert, key, dhparam}; - ListenSettings lsettings{en4, if4, en6, if6, port}; + init_logging(boost::log::trivial::severity_level::trace, "node_" + std::to_string(port)); + + BOOST_LOG_TRIVIAL(info) << "Started node"; bool is_first = bool(vm.count("first")); std::string next_node; @@ -52,10 +99,20 @@ int main(int argc, char* argv[]) { std::cerr << "next_node option is required." << std::endl; return -1; } + std::string certdir; + if(vm.count("certdir")) { + std::string filename = vm["certdir"].as<std::string>(); + if(boost::filesystem::is_directory(filename)) { + certdir = filename; + } else { + std::cerr << "cert dir: \"" << filename << "\" is not a directory"; + return -1; + } + } Uri uri = parse_uri(next_node); - NodeNetworkSettings nsettings{is_first, uri.host, uri.port}; + NodeNetworkSettings nsettings{is_first, uri.host, uri.port, certdir}; Node node(lsettings, nsettings); node.run(); |
