tools: add turn to dsh
Change-Id: I6c252a9f9d6de1c4f6d85043d3ed238eec747244
diff --git a/tools/dsh/dsh.cpp b/tools/dsh/dsh.cpp
index 51b80a5..92f30b1 100644
--- a/tools/dsh/dsh.cpp
+++ b/tools/dsh/dsh.cpp
@@ -87,7 +87,11 @@
dhtnet::Dsh::Dsh(const std::filesystem::path& path,
dht::crypto::Identity identity,
- const std::string& bootstrap)
+ const std::string& bootstrap,
+ const std::string& turn_host,
+ const std::string& turn_user,
+ const std::string& turn_pass,
+ const std::string& turn_realm)
: logger(dht::log::getStdLogger())
// , std::shared_ptr<tls::CertificateStore>(path / "certstore", logger)
{
@@ -218,8 +222,12 @@
dht::crypto::Identity identity,
const std::string& bootstrap,
dht::InfoHash peer_id,
- const std::string& binary)
- : Dsh(path, identity, bootstrap)
+ const std::string& binary,
+ const std::string& turn_host,
+ const std::string& turn_user,
+ const std::string& turn_pass,
+ const std::string& turn_realm)
+ : Dsh(path, identity, bootstrap, turn_host, turn_user, turn_pass, turn_realm)
{
// Build a client
std::condition_variable cv;
diff --git a/tools/dsh/dsh.h b/tools/dsh/dsh.h
index 09ab147..c349619 100644
--- a/tools/dsh/dsh.h
+++ b/tools/dsh/dsh.h
@@ -29,13 +29,21 @@
// Build a server
Dsh(const std::filesystem::path& path,
dht::crypto::Identity identity,
- const std::string& bootstrap);
+ const std::string& bootstrap,
+ const std::string& turn_host,
+ const std::string& turn_user,
+ const std::string& turn_pass,
+ const std::string& turn_realm);
// Build a client
Dsh(const std::filesystem::path& path,
dht::crypto::Identity identity,
const std::string& bootstrap,
dht::InfoHash peer_id,
- const std::string& binary);
+ const std::string& binary,
+ const std::string& turn_host,
+ const std::string& turn_user,
+ const std::string& turn_pass,
+ const std::string& turn_realm);
~Dsh();
void run();
diff --git a/tools/dsh/main.cpp b/tools/dsh/main.cpp
index a259cdc..b6697a3 100644
--- a/tools/dsh/main.cpp
+++ b/tools/dsh/main.cpp
@@ -28,7 +28,8 @@
#else
#include <fmt/ostream.h>
#endif
-
+#include <yaml-cpp/yaml.h>
+#include <fstream>
struct dhtsh_params
{
@@ -39,22 +40,35 @@
std::string bootstrap {};
dht::InfoHash peer_id {};
std::string binary {};
+ std::string ca {};
+ std::string turn_host {};
+ std::string turn_user {};
+ std::string turn_pass {};
+ std::string turn_realm {};
+ std::string dsh_configuration {};
};
-static const constexpr struct option long_options[] = {{"help", no_argument, nullptr, 'h'},
- {"version", no_argument, nullptr, 'v'},
- {"listen", no_argument, nullptr, 'l'},
- {"bootstrap", required_argument, nullptr, 'b'},
- {"binary", required_argument, nullptr, 's'},
- {"id_path", required_argument, nullptr, 'I'},
- {nullptr, 0, nullptr, 0}};
+static const constexpr struct option long_options[]
+ = {{"help", no_argument, nullptr, 'h'},
+ {"version", no_argument, nullptr, 'v'},
+ {"listen", no_argument, nullptr, 'l'},
+ {"bootstrap", required_argument, nullptr, 'b'},
+ {"binary", required_argument, nullptr, 's'},
+ {"id_path", required_argument, nullptr, 'I'},
+ {"CA", required_argument, nullptr, 'C'},
+ {"turn_host", required_argument, nullptr, 't'},
+ {"turn_user", required_argument, nullptr, 'u'},
+ {"turn_pass", required_argument, nullptr, 'w'},
+ {"turn_realm", required_argument, nullptr, 'r'},
+ {"dsh_configuration", required_argument, nullptr, 'd'},
+ {nullptr, 0, nullptr, 0}};
dhtsh_params
parse_args(int argc, char** argv)
{
dhtsh_params params;
int opt;
- while ((opt = getopt_long(argc, argv, "hvls:I:p:i:", long_options, nullptr)) != -1) {
+ while ((opt = getopt_long(argc, argv, "hvls:I:p:i:C:r:w:u:t:d:", long_options, nullptr)) != -1) {
switch (opt) {
case 'h':
params.help = true;
@@ -74,6 +88,23 @@
case 'I':
params.path = optarg;
break;
+ case 't':
+ params.turn_host = optarg;
+ break;
+ case 'u':
+ params.turn_user = optarg;
+ break;
+ case 'w':
+ params.turn_pass = optarg;
+ break;
+ case 'r':
+ params.turn_realm = optarg;
+ break;
+ case 'C':
+ params.ca = optarg;
+ break;
+ case 'd':
+ params.dsh_configuration = optarg;
default:
std::cerr << "Invalid option" << std::endl;
exit(EXIT_FAILURE);
@@ -127,13 +158,18 @@
if (params.help){
fmt::print("Usage: dsh [OPTIONS] [PEER_ID]\n"
- "\nOptions:\n"
- " -h, --help Show this help message and exit.\n"
- " -v, --version Display the program version.\n"
- " -l, --listen Start the program in listen mode.\n"
- " -b, --bootstrap Specify the bootstrap option with an argument.\n"
- " -s, --binary Specify the binary option with an argument.\n"
- " -I, --id_path Specify the id_path option with an argument.\n");
+ "\nOptions:\n"
+ " -h, --help Show this help message and exit.\n"
+ " -v, --version Display the program version.\n"
+ " -l, --listen Start the program in listen mode.\n"
+ " -b, --bootstrap Specify the bootstrap option with an argument.\n"
+ " -s, --binary Specify the binary option with an argument.\n"
+ " -I, --id_path Specify the id_path option with an argument.\n"
+ " -C, --CA Specify the CA option with an argument.\n"
+ " -t, --turn_host Specify the turn_host option with an argument.\n"
+ " -u, --turn_user Specify the turn_user option with an argument.\n"
+ " -w, --turn_pass Specify the turn_pass option with an argument.\n"
+ " -r, --turn_realm Specify the turn_realm option with an argument.\n");
return EXIT_SUCCESS;
}
if (params.version){
@@ -149,16 +185,25 @@
std::unique_ptr<dhtnet::Dsh> dhtsh;
if (params.listen) {
// create dnc instance
- dhtsh = std::make_unique<dhtnet::Dsh>(params.path, identity, params.bootstrap);
+ dhtsh = std::make_unique<dhtnet::Dsh>(params.path,
+ identity,
+ params.bootstrap,
+ params.turn_host,
+ params.turn_user,
+ params.turn_pass,
+ params.turn_realm);
} else {
dhtsh = std::make_unique<dhtnet::Dsh>(params.path,
identity,
params.bootstrap,
params.peer_id,
- params.binary);
+ params.binary,
+ params.turn_host,
+ params.turn_user,
+ params.turn_pass,
+ params.turn_realm);
}
dhtsh->run();
return EXIT_SUCCESS;
-
}