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

c wrapper: add dht_runner_listen

parent e9377f2e
No related branches found
No related tags found
No related merge requests found
...@@ -63,11 +63,12 @@ bool dht_publickey_check_signature(const dht_publickey* pk, const char* data, si ...@@ -63,11 +63,12 @@ bool dht_publickey_check_signature(const dht_publickey* pk, const char* data, si
dht_blob dht_publickey_encrypt(const dht_publickey* pk, const char* data, size_t data_size) dht_blob dht_publickey_encrypt(const dht_publickey* pk, const char* data, size_t data_size)
{ {
auto rdata = new dht::Blob;
*rdata = reinterpret_cast<const dht::crypto::PublicKey*>(pk)->encrypt((const uint8_t*)data, data_size);
dht_blob ret; dht_blob ret;
ret.ptr = new dht::Blob; ret.data = rdata->data();
*reinterpret_cast<dht::Blob*>(ret.ptr) = reinterpret_cast<const dht::crypto::PublicKey*>(pk)->encrypt((const uint8_t*)data, data_size); ret.data_length = rdata->size();
ret.data = reinterpret_cast<dht::Blob*>(ret.ptr)->data(); ret.ptr = rdata;
ret.data_length = reinterpret_cast<dht::Blob*>(ret.ptr)->size();
return ret; return ret;
} }
...@@ -103,6 +104,30 @@ void dht_runner_get(dht_runner* r, const dht_infohash* h, dht_get_cb cb, dht_don ...@@ -103,6 +104,30 @@ void dht_runner_get(dht_runner* r, const dht_infohash* h, dht_get_cb cb, dht_don
}); });
} }
dht_op_token* dht_runner_listen(dht_runner* r, const dht_infohash* h, dht_value_cb cb, void* cb_user_data)
{
auto runner = reinterpret_cast<dht::DhtRunner*>(r);
auto hash = reinterpret_cast<const dht::InfoHash*>(h);
auto fret = new std::future<size_t>;
*fret = runner->listen(*hash, [cb,cb_user_data](const std::vector<std::shared_ptr<dht::Value>>& values, bool expired) {
for (const auto& value : values) {
if (not cb(reinterpret_cast<dht_value*>(value.get()), expired, cb_user_data))
return false;
}
return true;
});
return (dht_op_token*)fret;
}
void
dht_runner_cancel_listen(dht_runner* r, const dht_infohash* h, dht_op_token* t)
{
auto runner = reinterpret_cast<dht::DhtRunner*>(r);
auto hash = reinterpret_cast<const dht::InfoHash*>(h);
auto token = reinterpret_cast<std::future<size_t>*>(t);
runner->cancelListen(*hash, std::move(*token));
}
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
...@@ -61,6 +61,10 @@ typedef bool (*dht_done_cb)(bool ok, void* user_data); ...@@ -61,6 +61,10 @@ typedef bool (*dht_done_cb)(bool ok, void* user_data);
typedef bool (*dht_shutdown_cb)(void* user_data); typedef bool (*dht_shutdown_cb)(void* user_data);
// dht::DhtRunner // dht::DhtRunner
struct OPENDHT_C_PUBLIC dht_op_token;
typedef struct dht_op_token dht_op_token;
OPENDHT_C_PUBLIC void dht_op_token_delete(dht_op_token* token);
struct OPENDHT_C_PUBLIC dht_runner; struct OPENDHT_C_PUBLIC dht_runner;
typedef struct dht_runner dht_runner; typedef struct dht_runner dht_runner;
OPENDHT_C_PUBLIC dht_runner* dht_runner_new(); OPENDHT_C_PUBLIC dht_runner* dht_runner_new();
...@@ -68,6 +72,8 @@ OPENDHT_C_PUBLIC void dht_runner_delete(dht_runner* runner); ...@@ -68,6 +72,8 @@ OPENDHT_C_PUBLIC void dht_runner_delete(dht_runner* runner);
OPENDHT_C_PUBLIC void dht_runner_run(dht_runner* runner, in_port_t port); OPENDHT_C_PUBLIC void dht_runner_run(dht_runner* runner, in_port_t port);
OPENDHT_C_PUBLIC void dht_runner_ping(dht_runner* runner, struct sockaddr* addr, socklen_t addr_len); OPENDHT_C_PUBLIC void dht_runner_ping(dht_runner* runner, struct sockaddr* addr, socklen_t addr_len);
OPENDHT_C_PUBLIC void dht_runner_get(dht_runner* runner, const dht_infohash* hash, dht_get_cb cb, dht_done_cb done_cb, void* cb_user_data); OPENDHT_C_PUBLIC void dht_runner_get(dht_runner* runner, const dht_infohash* hash, dht_get_cb cb, dht_done_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, void* cb_user_data);
OPENDHT_C_PUBLIC void dht_runner_cancel_listen(dht_runner* runner, const dht_infohash* hash, dht_op_token* token);
#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