From 76b4da089e72b54dda0a155dfd0994309467ddf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com> Date: Mon, 21 Oct 2019 14:33:37 -0400 Subject: [PATCH] c wrapper: add dht_runner_get_public_address --- c/opendht.cpp | 19 +++++++++++++++++++ c/opendht_c.h | 3 +++ 2 files changed, 22 insertions(+) diff --git a/c/opendht.cpp b/c/opendht.cpp index 0524a72e..b73acbb4 100644 --- a/c/opendht.cpp +++ b/c/opendht.cpp @@ -294,6 +294,25 @@ dht_infohash dht_runner_get_id(const dht_runner* r) { return ret; } +const struct sockaddr** dht_runner_get_public_address(const dht_runner* r) +{ + auto runner = reinterpret_cast<const dht::DhtRunner*>(r); + auto addrs = const_cast<dht::DhtRunner*>(runner)->getPublicAddress(); + if (addrs.empty()) + return nullptr; + auto ret = (const struct sockaddr**)malloc(sizeof(struct sockaddr*) * (addrs.size() + 1)); + for (size_t i=0; i<addrs.size(); i++) { + if (auto len = addrs[i].getLength()) { + ret[i] = (const struct sockaddr*)malloc(len); + memcpy((struct sockaddr*)ret[i], addrs[i].get(), len); + } else { + ret[i] = nullptr; + } + } + ret[addrs.size()] = nullptr; + return ret; +} + #ifdef __cplusplus } #endif diff --git a/c/opendht_c.h b/c/opendht_c.h index d142aab9..47c73412 100644 --- a/c/opendht_c.h +++ b/c/opendht_c.h @@ -11,6 +11,8 @@ extern "C" { #include <stdint.h> #include <stddef.h> +struct sockaddr; + // Non-owning data view struct OPENDHT_C_PUBLIC dht_data_view { const uint8_t* data; @@ -137,6 +139,7 @@ OPENDHT_C_PUBLIC void dht_runner_cancel_put(dht_runner* runner, const dht_infoha OPENDHT_C_PUBLIC void dht_runner_shutdown(dht_runner* runner, dht_shutdown_cb done_cb, void* cb_user_data); OPENDHT_C_PUBLIC dht_infohash dht_runner_get_node_id(const dht_runner* runner); OPENDHT_C_PUBLIC dht_infohash dht_runner_get_id(const dht_runner* runner); +OPENDHT_C_PUBLIC const struct sockaddr** dht_runner_get_public_address(const dht_runner* runner); #ifdef __cplusplus } -- GitLab