diff --git a/include/opendht/dht_proxy_server.h b/include/opendht/dht_proxy_server.h index eebaa20f09632276660810ac74527458025f6204..8be073ac958af602eeb7f41acb050f40d9ae587e 100644 --- a/include/opendht/dht_proxy_server.h +++ b/include/opendht/dht_proxy_server.h @@ -86,9 +86,13 @@ public: * @note if the server fails to start (if port is already used or reserved), * it will fails silently */ - DhtProxyServer(std::shared_ptr<DhtRunner> dht, in_port_t port = 8000, - const std::string& pushServer = "", - std::shared_ptr<dht::Logger> logger = {}); + DhtProxyServer( +#ifdef OPENDHT_PROXY_OPENSSL + dht::crypto::Identity& identity, +#endif + std::shared_ptr<DhtRunner> dht, in_port_t port = 8000, + const std::string& pushServer = "", std::shared_ptr<dht::Logger> logger = {}); + virtual ~DhtProxyServer(); DhtProxyServer(const DhtProxyServer& other) = delete; diff --git a/src/dht_proxy_server.cpp b/src/dht_proxy_server.cpp index fbdf2dff0d4821ab2ee1deac8bf7101f6d301495..8db78805b8217880d6d428cb38fb9be690673e3f 100644 --- a/src/dht_proxy_server.cpp +++ b/src/dht_proxy_server.cpp @@ -46,9 +46,12 @@ constexpr char RESP_MSG_PUT_FAILED[] = "{\"err\":\"Put failed\"}"; constexpr const std::chrono::minutes PRINT_STATS_PERIOD {2}; -DhtProxyServer::DhtProxyServer(std::shared_ptr<DhtRunner> dht, in_port_t port, - const std::string& pushServer, - std::shared_ptr<dht::Logger> logger +DhtProxyServer::DhtProxyServer( +#ifdef OPENDHT_PROXY_OPENSSL + dht::crypto::Identity& identity, +#endif + std::shared_ptr<DhtRunner> dht, in_port_t port, + const std::string& pushServer, std::shared_ptr<dht::Logger> logger ): dht_(dht), logger_(logger), lockListener_(std::make_shared<std::mutex>()), listeners_(std::make_shared<std::map<restinio::connection_id_t, http::ListenerSession>>()), diff --git a/tests/dhtproxytester.cpp b/tests/dhtproxytester.cpp index 565b4da51a0da301acb750f835f673ea696910aa..459cffc4ce6b08e4a4a5469c8402a86b15384eb1 100644 --- a/tests/dhtproxytester.cpp +++ b/tests/dhtproxytester.cpp @@ -40,8 +40,18 @@ DhtProxyTester::setUp() { nodeProxy = std::make_shared<dht::DhtRunner>(); nodeProxy->run(0, /*identity*/{}, /*threaded*/true); nodeProxy->bootstrap(nodePeer.getBound()); - serverProxy = std::unique_ptr<dht::DhtProxyServer>(new dht::DhtProxyServer( - nodeProxy, 8080, /*pushServer*/"127.0.0.1:8090", logger)); + +#ifdef OPENDHT_PUSH_NOTIFICATIONS + auto ca_tmp = dht::crypto::generateEcIdentity("DHT Node CA"); + serverIdentity = dht::crypto::generateIdentity("DHT Node", ca_tmp); +#endif + + serverProxy = std::unique_ptr<dht::DhtProxyServer>( + new dht::DhtProxyServer( +#ifdef OPENDHT_PUSH_NOTIFICATIONS + serverIdentity, +#endif + nodeProxy, 8080, /*pushServer*/"127.0.0.1:8090", logger)); clientConfig.dht_config.node_config.maintain_storage = false; clientConfig.threaded = true; diff --git a/tests/dhtproxytester.h b/tests/dhtproxytester.h index 691b9450a13c9a155166157a894ce04a68a7de18..a5078b7eae1db122449084a634446e15b9f68753 100644 --- a/tests/dhtproxytester.h +++ b/tests/dhtproxytester.h @@ -66,6 +66,10 @@ class DhtProxyTester : public CppUnit::TestFixture { std::shared_ptr<dht::DhtRunner> nodeClient; std::shared_ptr<dht::DhtRunner> nodeProxy; + +#ifdef OPENDHT_PUSH_NOTIFICATIONS + dht::crypto::Identity serverIdentity; +#endif std::unique_ptr<dht::DhtProxyServer> serverProxy; dht::DhtRunner::Context clientContext {}; diff --git a/tools/dhtnode.cpp b/tools/dhtnode.cpp index a29495fb479f4bd3e1655d0cebb92da0216c246e..6bef49e3d91ef2ae4feb6f08aaf1bd8edee24dba 100644 --- a/tools/dhtnode.cpp +++ b/tools/dhtnode.cpp @@ -225,11 +225,16 @@ void cmd_loop(std::shared_ptr<DhtRunner>& node, dht_params& params #endif // OPENDHT_PUSH_NOTIFICATIONS try { unsigned int port = std::stoi(idstr); + proxies.emplace(port, std::unique_ptr<DhtProxyServer>( + new DhtProxyServer( +#ifdef OPENDHT_PROXY_OPENSSL + params.id, /* dht::crypto::Identity */ +#endif + node, port #ifdef OPENDHT_PUSH_NOTIFICATIONS - proxies.emplace(port, std::unique_ptr<DhtProxyServer>(new DhtProxyServer(node, port, pushServer))); -#else - proxies.emplace(port, std::unique_ptr<DhtProxyServer>(new DhtProxyServer(node, port))); -#endif // OPENDHT_PUSH_NOTIFICATIONS + ,pushServer +#endif + ))); } catch (...) { } continue; } else if (op == "psp") { @@ -554,7 +559,12 @@ main(int argc, char **argv) #endif if (params.proxyserver != 0) { #ifdef OPENDHT_PROXY_SERVER - proxies.emplace(params.proxyserver, std::unique_ptr<DhtProxyServer>(new DhtProxyServer(node, params.proxyserver, params.pushserver, context.logger))); + proxies.emplace(params.proxyserver, std::unique_ptr<DhtProxyServer>( + new DhtProxyServer( +#ifdef OPENDHT_PROXY_OPENSSL + params.id, /* dht::crypto::Identity */ +#endif + node, params.proxyserver, params.pushserver, context.logger))); #else std::cerr << "DHT proxy server requested but OpenDHT built without proxy server support." << std::endl; exit(EXIT_FAILURE);