diff --git a/src/dhtrunner.cpp b/src/dhtrunner.cpp index ee38f549ff665085081c8ab2f1ca518328233f3d..c8a990f122b72b6cf48c8bcba78d75d8292a8879 100644 --- a/src/dhtrunner.cpp +++ b/src/dhtrunner.cpp @@ -92,6 +92,9 @@ DhtRunner::run(const SockAddr& local4, const SockAddr& local6, DhtRunner::Config config_ = config; #endif //OPENDHT_PROXY_CLIENT doRun(local4, local6, config.dht_config); + if (not config_.proxy_server.empty()) { + enableProxy(true); + } if (not config.threaded) return; dht_thread = std::thread([this]() { @@ -187,17 +190,17 @@ DhtRunner::getNodeId() const std::pair<size_t, size_t> DhtRunner::getStoreSize() const { std::lock_guard<std::mutex> lck(dht_mtx); - if (!activeDht()) + if (!dht_) return {}; - return activeDht()->getStoreSize(); + return dht_->getStoreSize(); } void DhtRunner::setStorageLimit(size_t limit) { std::lock_guard<std::mutex> lck(dht_mtx); - if (!activeDht()) + if (!dht_) throw std::runtime_error("dht is not running"); - return activeDht()->setStorageLimit(limit); + return dht_->setStorageLimit(limit); } std::vector<NodeExport> @@ -205,15 +208,15 @@ DhtRunner::exportNodes() const { std::lock_guard<std::mutex> lck(dht_mtx); if (!dht_) return {}; - return activeDht()->exportNodes(); + return dht_->exportNodes(); } std::vector<ValuesExport> DhtRunner::exportValues() const { std::lock_guard<std::mutex> lck(dht_mtx); - if (!activeDht()) + if (!dht_) return {}; - return activeDht()->exportValues(); + return dht_->exportValues(); } void @@ -237,7 +240,7 @@ DhtRunner::registerType(const ValueType& type) { void DhtRunner::importValues(const std::vector<ValuesExport>& values) { std::lock_guard<std::mutex> lck(dht_mtx); - activeDht()->importValues(values); + dht_->importValues(values); } unsigned @@ -332,7 +335,8 @@ DhtRunner::setLocalCertificateStore(CertificateStoreQuery&& query_method) { time_point DhtRunner::loop_() { - if (!activeDht()) + auto dht = activeDht(); + if (not dht) return {}; decltype(pending_ops) ops {}; @@ -343,7 +347,7 @@ DhtRunner::loop_() std::move(pending_ops) : std::move(pending_ops_prio); } while (not ops.empty()) { - ops.front()(*activeDht()); + ops.front()(*dht); ops.pop(); } @@ -358,15 +362,15 @@ DhtRunner::loop_() for (const auto& pck : received) { auto& buf = pck.first; auto& from = pck.second; - wakeup = activeDht()->periodic(buf.data(), buf.size()-1, from); + wakeup = dht->periodic(buf.data(), buf.size()-1, from); } received.clear(); } else { - wakeup = activeDht()->periodic(nullptr, 0, nullptr, 0); + wakeup = dht->periodic(nullptr, 0, nullptr, 0); } - NodeStatus nstatus4 = activeDht()->getStatus(AF_INET); - NodeStatus nstatus6 = activeDht()->getStatus(AF_INET6); + NodeStatus nstatus4 = dht->getStatus(AF_INET); + NodeStatus nstatus6 = dht->getStatus(AF_INET6); if (nstatus4 != status4 || nstatus6 != status6) { status4 = nstatus4; status6 = nstatus6; diff --git a/tools/dhtnode.cpp b/tools/dhtnode.cpp index 4b1839815c7b5c2a8e3215dcf4b5011e988f6414..53d1cd2995eecc1c2f386021be582b8bea8cc778 100644 --- a/tools/dhtnode.cpp +++ b/tools/dhtnode.cpp @@ -484,15 +484,19 @@ main(int argc, char **argv) crt = dht::crypto::generateEcIdentity("DHT Node", ca_tmp); } - dht->run(params.port, crt, true, params.network); + dht::DhtRunner::Config config; + config.dht_config.node_config.network = params.network; + config.dht_config.id = crt; + config.threaded = true; #if OPENDHT_PROXY_CLIENT - if (!params.proxyclient.empty()) { + config.proxy_server = params.proxyclient; + config.push_node_id = "dhtnode"; + if (not params.proxyclient.empty()) dht->setPushNotificationToken(params.devicekey); - dht->setProxyServer(params.proxyclient, "dhtnode"); - dht->enableProxy(true); - } #endif //OPENDHT_PROXY_CLIENT + dht->run(params.port, config); + if (params.log) { if (params.syslog or (params.daemonize and params.logfile.empty())) log::enableSyslog(*dht, "dhtnode");