From 5bf19c875c17e3f349179c82a303484def2d8b3c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Simon=20D=C3=A9saulniers?= <sim.desaulniers@gmail.com>
Date: Sun, 2 Feb 2025 05:24:10 -0500
Subject: [PATCH] c: dht_value_with_id_new for setting an ID

Necessary for cancelling put values. Otherwise, the user doesn't have
the value ID for asking to cancel the permanent put.
---
 c/opendht.cpp | 6 +++++-
 c/opendht_c.h | 1 +
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/c/opendht.cpp b/c/opendht.cpp
index f5db5773..cf80546f 100644
--- a/c/opendht.cpp
+++ b/c/opendht.cpp
@@ -132,8 +132,12 @@ void dht_value_set_user_type(dht_value* data, const char* user_type) {
     (*reinterpret_cast<ValueSp*>(data))->user_type = user_type;
 }
 
+dht_value* dht_value_with_id_new(const uint8_t* data, size_t size, uint64_t value_id) {
+    return reinterpret_cast<dht_value*>(new ValueSp(std::make_shared<dht::Value>(dht::ValueType::USER_DATA.id, data, size, value_id)));
+}
+
 dht_value* dht_value_new(const uint8_t* data, size_t size) {
-    return reinterpret_cast<dht_value*>(new ValueSp(std::make_shared<dht::Value>(data, size)));
+    return dht_value_with_id_new(data, size, 0);
 }
 
 dht_value* dht_value_new_from_string(const char* str) {
diff --git a/c/opendht_c.h b/c/opendht_c.h
index dc87ec16..dd3750bf 100644
--- a/c/opendht_c.h
+++ b/c/opendht_c.h
@@ -104,6 +104,7 @@ struct OPENDHT_C_PUBLIC dht_value;
 typedef struct dht_value dht_value;
 typedef uint64_t dht_value_id;
 OPENDHT_C_PUBLIC dht_value* dht_value_new(const uint8_t* data, size_t size);
+OPENDHT_C_PUBLIC dht_value* dht_value_with_id_new(const uint8_t* data, size_t size, uint64_t value_id);
 OPENDHT_C_PUBLIC dht_value* dht_value_new_from_string(const char* str);
 OPENDHT_C_PUBLIC dht_value* dht_value_ref(const dht_value*);
 OPENDHT_C_PUBLIC void dht_value_unref(dht_value*);
-- 
GitLab