Skip to content
Snippets Groups Projects
Commit e8d96d3b authored by Adrien Béraud's avatar Adrien Béraud
Browse files

c wrapper: add support for permanent put

parent c92d236c
No related branches found
No related tags found
No related merge requests found
...@@ -10,8 +10,7 @@ extern "C" { ...@@ -10,8 +10,7 @@ extern "C" {
#endif #endif
// dht::InfoHash // 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(); return reinterpret_cast<const dht::InfoHash*>(h)->to_c_str();
} }
...@@ -19,13 +18,11 @@ void dht_infohash_zero(dht_infohash* h) { ...@@ -19,13 +18,11 @@ void dht_infohash_zero(dht_infohash* h) {
*reinterpret_cast<dht::InfoHash*>(h) = dht::InfoHash{}; *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(); *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); *reinterpret_cast<dht::InfoHash*>(h) = dht::InfoHash::get(dat, dat_size);
} }
...@@ -33,19 +30,16 @@ bool dht_infohash_is_zero(const dht_infohash* h) { ...@@ -33,19 +30,16 @@ bool dht_infohash_is_zero(const dht_infohash* h) {
return !static_cast<bool>(*reinterpret_cast<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(); return reinterpret_cast<const dht::PkId*>(h)->to_c_str();
} }
// dht::Blob // dht::Blob
void dht_blob_delete(dht_blob* data) void dht_blob_delete(dht_blob* data) {
{
delete reinterpret_cast<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; dht_data_view view;
view.data = reinterpret_cast<const dht::Blob*>(data)->data(); view.data = reinterpret_cast<const dht::Blob*>(data)->data();
view.size = reinterpret_cast<const dht::Blob*>(data)->size(); view.size = reinterpret_cast<const dht::Blob*>(data)->size();
...@@ -53,8 +47,7 @@ dht_data_view dht_blob_get_data(const dht_blob* data) ...@@ -53,8 +47,7 @@ dht_data_view dht_blob_get_data(const dht_blob* data)
} }
// dht::Value // 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)); const ValueSp& vsp(*reinterpret_cast<const ValueSp*>(data));
dht_data_view view; dht_data_view view;
view.data = vsp->data.data(); view.data = vsp->data.data();
...@@ -62,6 +55,11 @@ dht_data_view dht_value_get_data(const dht_value* data) ...@@ -62,6 +55,11 @@ dht_data_view dht_value_get_data(const dht_value* data)
return view; 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) { 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 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 ...@@ -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) { void dht_runner_shutdown(dht_runner* r, dht_shutdown_cb done_cb, void* cb_user_data) {
auto runner = reinterpret_cast<dht::DhtRunner*>(r); auto runner = reinterpret_cast<dht::DhtRunner*>(r);
runner->shutdown([done_cb, cb_user_data](){ runner->shutdown([done_cb, cb_user_data](){
......
...@@ -21,7 +21,9 @@ typedef struct dht_data_view dht_data_view; ...@@ -21,7 +21,9 @@ typedef struct dht_data_view dht_data_view;
// dht::Value // dht::Value
struct OPENDHT_C_PUBLIC dht_value; struct OPENDHT_C_PUBLIC dht_value;
typedef struct dht_value 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_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_new(const uint8_t* data, size_t size);
OPENDHT_C_PUBLIC dht_value* dht_value_ref(const dht_value*); OPENDHT_C_PUBLIC dht_value* dht_value_ref(const dht_value*);
OPENDHT_C_PUBLIC void dht_value_unref(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 ...@@ -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 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_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(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); OPENDHT_C_PUBLIC void dht_runner_shutdown(dht_runner* runner, dht_shutdown_cb done_cb, void* cb_user_data);
#ifdef __cplusplus #ifdef __cplusplus
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment