From e8d96d3b42d064d805abccf4514963b17f35b7cd 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:04:12 -0400 Subject: [PATCH] c wrapper: add support for permanent put --- c/opendht.cpp | 42 ++++++++++++++++++++++++++++-------------- c/opendht_c.h | 4 ++++ 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/c/opendht.cpp b/c/opendht.cpp index ee87e11e..6c5d77fc 100644 --- a/c/opendht.cpp +++ b/c/opendht.cpp @@ -10,8 +10,7 @@ extern "C" { #endif // dht::InfoHash -const char* dht_infohash_print(const dht_infohash* h) -{ +const char* dht_infohash_print(const dht_infohash* h) { return reinterpret_cast<const dht::InfoHash*>(h)->to_c_str(); } @@ -19,13 +18,11 @@ void dht_infohash_zero(dht_infohash* h) { *reinterpret_cast<dht::InfoHash*>(h) = dht::InfoHash{}; } -void dht_infohash_random(dht_infohash* h) -{ +void dht_infohash_random(dht_infohash* h) { *reinterpret_cast<dht::InfoHash*>(h) = dht::InfoHash::getRandom(); } -void dht_infohash_get(dht_infohash* h, const uint8_t* dat, size_t dat_size) -{ +void dht_infohash_get(dht_infohash* h, const uint8_t* dat, size_t dat_size) { *reinterpret_cast<dht::InfoHash*>(h) = dht::InfoHash::get(dat, dat_size); } @@ -33,19 +30,16 @@ bool dht_infohash_is_zero(const dht_infohash* h) { return !static_cast<bool>(*reinterpret_cast<const dht::InfoHash*>(h)); } -const char* dht_pkid_print(const dht_pkid* h) -{ +const char* dht_pkid_print(const dht_pkid* h) { return reinterpret_cast<const dht::PkId*>(h)->to_c_str(); } // dht::Blob -void dht_blob_delete(dht_blob* data) -{ +void dht_blob_delete(dht_blob* data) { delete reinterpret_cast<dht::Blob*>(data); } -dht_data_view dht_blob_get_data(const dht_blob* data) -{ +dht_data_view dht_blob_get_data(const dht_blob* data) { dht_data_view view; view.data = reinterpret_cast<const dht::Blob*>(data)->data(); view.size = reinterpret_cast<const dht::Blob*>(data)->size(); @@ -53,8 +47,7 @@ dht_data_view dht_blob_get_data(const dht_blob* data) } // dht::Value -dht_data_view dht_value_get_data(const dht_value* data) -{ +dht_data_view dht_value_get_data(const dht_value* data) { const ValueSp& vsp(*reinterpret_cast<const ValueSp*>(data)); dht_data_view view; view.data = vsp->data.data(); @@ -62,6 +55,11 @@ dht_data_view dht_value_get_data(const dht_value* data) return view; } +dht_value_id dht_value_get_id(const dht_value* data) { + const ValueSp& vsp(*reinterpret_cast<const ValueSp*>(data)); + return vsp->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))); } @@ -256,6 +254,22 @@ void dht_runner_put(dht_runner* r, const dht_infohash* h, const dht_value* v, dh }); } +void dht_runner_put_permanent(dht_runner* r, const dht_infohash* h, const dht_value* v, dht_done_cb done_cb, void* cb_user_data) { + auto runner = reinterpret_cast<dht::DhtRunner*>(r); + auto hash = reinterpret_cast<const dht::InfoHash*>(h); + auto value = reinterpret_cast<const ValueSp*>(v); + runner->put(*hash, *value, [done_cb, cb_user_data](bool ok){ + if (done_cb) + done_cb(ok, cb_user_data); + }, dht::time_point::max(), true); +} + +void dht_runner_cancel_put(dht_runner* r, const dht_infohash* h, dht_value_id value_id) { + auto runner = reinterpret_cast<dht::DhtRunner*>(r); + auto hash = reinterpret_cast<const dht::InfoHash*>(h); + runner->cancelPut(*hash, value_id); +} + void dht_runner_shutdown(dht_runner* r, dht_shutdown_cb done_cb, void* cb_user_data) { auto runner = reinterpret_cast<dht::DhtRunner*>(r); runner->shutdown([done_cb, cb_user_data](){ diff --git a/c/opendht_c.h b/c/opendht_c.h index 455d3d1b..c70bee4e 100644 --- a/c/opendht_c.h +++ b/c/opendht_c.h @@ -21,7 +21,9 @@ typedef struct dht_data_view dht_data_view; // dht::Value struct OPENDHT_C_PUBLIC dht_value; typedef struct dht_value dht_value; +typedef uint64_t dht_value_id; OPENDHT_C_PUBLIC dht_data_view dht_value_get_data(const dht_value* data); +OPENDHT_C_PUBLIC dht_value_id dht_value_get_id(const dht_value* data); OPENDHT_C_PUBLIC dht_value* dht_value_new(const uint8_t* data, size_t size); OPENDHT_C_PUBLIC dht_value* dht_value_ref(const dht_value*); OPENDHT_C_PUBLIC void dht_value_unref(dht_value*); @@ -130,6 +132,8 @@ OPENDHT_C_PUBLIC void dht_runner_get(dht_runner* runner, const dht_infohash* has OPENDHT_C_PUBLIC dht_op_token* dht_runner_listen(dht_runner* runner, const dht_infohash* hash, dht_value_cb cb, dht_shutdown_cb done_cb, void* cb_user_data); OPENDHT_C_PUBLIC void dht_runner_cancel_listen(dht_runner* runner, const dht_infohash* hash, dht_op_token* token); OPENDHT_C_PUBLIC void dht_runner_put(dht_runner* runner, const dht_infohash* hash, const dht_value* value, dht_done_cb done_cb, void* cb_user_data); +OPENDHT_C_PUBLIC void dht_runner_put_permanent(dht_runner* runner, const dht_infohash* hash, const dht_value* value, dht_done_cb done_cb, void* cb_user_data); +OPENDHT_C_PUBLIC void dht_runner_cancel_put(dht_runner* runner, const dht_infohash* hash, dht_value_id value_id); OPENDHT_C_PUBLIC void dht_runner_shutdown(dht_runner* runner, dht_shutdown_cb done_cb, void* cb_user_data); #ifdef __cplusplus -- GitLab