diff --git a/include/opendht/callbacks.h b/include/opendht/callbacks.h index b3b1b6f7..fd067c6b 100644 --- a/include/opendht/callbacks.h +++ b/include/opendht/callbacks.h @@ -52,7 +52,7 @@ struct OPENDHT_PUBLIC NodeStats { unsigned table_depth {0}; unsigned getKnownNodes() const { return good_nodes + dubious_nodes; } std::string toString() const; -#if OPENDHT_PROXY_SERVER +#if OPENDHT_PROXY_SERVER || OPENDHT_PROXY_CLIENT /** * Build a json object from a NodeStats */ diff --git a/include/opendht/dht_proxy_client.h b/include/opendht/dht_proxy_client.h index bf8aa4ff..2017df1a 100644 --- a/include/opendht/dht_proxy_client.h +++ b/include/opendht/dht_proxy_client.h @@ -30,11 +30,14 @@ #include "dht_interface.h" #include "scheduler.h" -namespace restbed -{ +namespace restbed { class Request; } +namespace Json { + class Value; +} + namespace dht { class OPENDHT_PUBLIC DhtProxyClient final : public DhtInterface { diff --git a/include/opendht/dhtrunner.h b/include/opendht/dhtrunner.h index 5f955cd8..9eb997ae 100644 --- a/include/opendht/dhtrunner.h +++ b/include/opendht/dhtrunner.h @@ -302,10 +302,8 @@ public: struct Config { SecureDhtConfig dht_config; bool threaded; -#if OPENDHT_PROXY_CLIENT std::string proxy_server; std::string push_node_id; -#endif //OPENDHT_PROXY_CLIENT }; /** @@ -326,10 +324,8 @@ public: /*.id = */identity }, /*.threaded = */threaded, -#if OPENDHT_PROXY_CLIENT /*.proxy_server = */"", /*.push_node_id = */"" -#endif //OPENDHT_PROXY_CLIENT }); } void run(in_port_t port, Config config); diff --git a/include/opendht/value.h b/include/opendht/value.h index 60dd1d99..9c8b155a 100644 --- a/include/opendht/value.h +++ b/include/opendht/value.h @@ -37,7 +37,7 @@ #include #include -#if OPENDHT_PROXY_SERVER +#if OPENDHT_PROXY_SERVER || OPENDHT_PROXY_CLIENT #include #endif //OPENDHT_PROXY_SERVER @@ -350,7 +350,7 @@ struct OPENDHT_PUBLIC Value Value(ValueType::Id t, const uint8_t* dat_ptr, size_t dat_len, Id id = INVALID_ID) : id(id), type(t), data(dat_ptr, dat_ptr+dat_len) {} -#if OPENDHT_PROXY_SERVER +#if OPENDHT_PROXY_SERVER || OPENDHT_PROXY_CLIENT /** * Build a value from a json object * @param json @@ -429,7 +429,7 @@ struct OPENDHT_PUBLIC Value return ss.str(); } -#if OPENDHT_PROXY_SERVER +#if OPENDHT_PROXY_SERVER || OPENDHT_PROXY_CLIENT /** * Build a json object from a value * Example: diff --git a/src/callbacks.cpp b/src/callbacks.cpp index 26a321f9..2cac5e68 100644 --- a/src/callbacks.cpp +++ b/src/callbacks.cpp @@ -68,7 +68,7 @@ NodeStats::toString() const return ss.str(); } -#if OPENDHT_PROXY_SERVER +#if OPENDHT_PROXY_SERVER || OPENDHT_PROXY_CLIENT /** * Build a json object from a NodeStats */ diff --git a/src/dht_proxy_client.cpp b/src/dht_proxy_client.cpp index 3b3e62ec..117a7f3a 100644 --- a/src/dht_proxy_client.cpp +++ b/src/dht_proxy_client.cpp @@ -441,8 +441,11 @@ DhtProxyClient::listen(const InfoHash& key, GetCallback cb, Value::Filter&& filt if (deviceKey_.empty()) { std::chrono::milliseconds timeout(std::numeric_limits::max()); settings->set_connection_timeout(timeout); // Avoid the client to close the socket after 5 seconds. - } else + } +#if OPENDHT_PUSH_NOTIFICATIONS + else fillBodyToGetToken(req); +#endif struct State { std::atomic_bool ok {true}; diff --git a/src/dhtrunner.cpp b/src/dhtrunner.cpp index 68b48965..5acdb379 100644 --- a/src/dhtrunner.cpp +++ b/src/dhtrunner.cpp @@ -91,10 +91,14 @@ DhtRunner::run(const SockAddr& local4, const SockAddr& local6, DhtRunner::Config #if OPENDHT_PROXY_CLIENT config_ = config; #endif //OPENDHT_PROXY_CLIENT + doRun(local4, local6, config.dht_config); - if (not config_.proxy_server.empty()) { + +#if OPENDHT_PROXY_CLIENT + if (not config.proxy_server.empty()) { enableProxy(true); } +#endif //OPENDHT_PROXY_CLIENT if (not config.threaded) return; dht_thread = std::thread([this]() { @@ -875,8 +879,10 @@ DhtRunner::enableProxy(bool proxify) new DhtProxyClient(config_.proxy_server, config_.push_node_id) ); dht_via_proxy_ = std::unique_ptr(new SecureDht(std::move(dht_via_proxy), config_.dht_config)); +#if OPENDHT_PUSH_NOTIFICATIONS if (not pushToken_.empty()) dht_via_proxy_->setPushNotificationToken(pushToken_); +#endif //dht_via_proxy_->startProxy(); // add current listeners for (auto& listener: listeners_) { @@ -904,6 +910,8 @@ DhtRunner::enableProxy(bool proxify) } } +#if OPENDHT_PUSH_NOTIFICATIONS + /** * Updates the push notification device token */ @@ -914,6 +922,7 @@ DhtRunner::setPushNotificationToken(const std::string& token) { dht_via_proxy_->setPushNotificationToken(token); } +#endif // OPENDHT_PUSH_NOTIFICATIONS #endif // OPENDHT_PROXY_CLIENT #if OPENDHT_PROXY_SERVER diff --git a/src/value.cpp b/src/value.cpp index 759c17fb..fddbcb16 100644 --- a/src/value.cpp +++ b/src/value.cpp @@ -22,7 +22,7 @@ #include "default_types.h" #include "securedht.h" // print certificate ID -#if OPENDHT_PROXY_SERVER +#if OPENDHT_PROXY_SERVER || OPENDHT_PROXY_CLIENT #include "base64.h" #endif //OPENDHT_PROXY_SERVER @@ -172,7 +172,7 @@ Value::msgpack_unpack_body(const msgpack::object& o) } } -#if OPENDHT_PROXY_SERVER +#if OPENDHT_PROXY_SERVER || OPENDHT_PROXY_CLIENT Value::Value(Json::Value& json) { try { diff --git a/tools/dhtnode.cpp b/tools/dhtnode.cpp index 6b9a8db3..d6b56619 100644 --- a/tools/dhtnode.cpp +++ b/tools/dhtnode.cpp @@ -220,8 +220,10 @@ void cmd_loop(std::shared_ptr& dht, dht_params& params #if OPENDHT_PROXY_CLIENT else if (op == "stt") { iss >> idstr >> deviceKey; +#if OPENDHT_PUSH_NOTIFICATIONS if (not deviceKey.empty()) dht->setPushNotificationToken(deviceKey); +#endif // OPENDHT_PUSH_NOTIFICATIONS dht->setProxyServer(idstr); dht->enableProxy(true); continue; @@ -491,8 +493,10 @@ main(int argc, char **argv) #if OPENDHT_PROXY_CLIENT config.proxy_server = params.proxyclient; config.push_node_id = "dhtnode"; +#if OPENDHT_PUSH_NOTIFICATIONS if (not params.proxyclient.empty()) dht->setPushNotificationToken(params.devicekey); +#endif #endif //OPENDHT_PROXY_CLIENT dht->run(params.port, config);