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