48inline constexpr const char*
50 return status == NodeStatus::Connected ?
"connected" : (
51 status == NodeStatus::Connecting ?
"connecting" :
56 unsigned good_nodes {0},
60 unsigned table_depth {0};
61 unsigned searches {0};
62 unsigned node_cache_size {0};
63 unsigned getKnownNodes()
const {
return good_nodes + dubious_nodes; }
64 unsigned long getNetworkSizeEstimation()
const {
return 8 * std::exp2(table_depth); }
65 std::string toString()
const;
71 Json::Value toJson()
const;
76 MSGPACK_DEFINE_MAP(good_nodes, dubious_nodes, cached_nodes, incoming_nodes, table_depth, searches, node_cache_size)
84 size_t ongoing_ops {0};
85 size_t storage_values {0};
86 size_t storage_size {0};
94 Json::Value toJson()
const;
96 explicit NodeInfo(
const Json::Value& v);
99 MSGPACK_DEFINE_MAP(
id, node_id, ipv4, ipv6)
117 bool is_bootstrap {
false};
120 bool maintain_storage {
false};
123 std::string persist_path {};
126 ssize_t max_req_per_sec {0};
129 ssize_t max_peer_req_per_sec {0};
132 ssize_t max_searches {0};
135 ssize_t max_store_size {0};
138 ssize_t max_store_keys {0};
145 bool public_stable {
false};
148 bool client_mode {
false};
157 crypto::Identity
id {};
163 bool cert_cache_all {
false};
166static constexpr size_t DEFAULT_STORAGE_LIMIT {1024 * 1024 * 64};
168using ValuesExport = std::pair<InfoHash, Blob>;
170using QueryCallback = std::function<bool(
const std::vector<std::shared_ptr<FieldValueIndex>>& fields)>;
171using GetCallback = std::function<bool(
const std::vector<std::shared_ptr<Value>>& values)>;
172using ValueCallback = std::function<bool(
const std::vector<std::shared_ptr<Value>>& values,
bool expired)>;
173using GetCallbackSimple = std::function<bool(std::shared_ptr<Value> value)>;
174using ShutdownCallback = std::function<void()>;
175using IdentityAnnouncedCb = std::function<void(
bool)>;
176using PublicAddressChangedCb = std::function<void(std::vector<SockAddr>)>;
178using CertificateStoreQuery = std::function<std::vector<std::shared_ptr<crypto::Certificate>>(
const InfoHash& pk_id)>;
179using DoneCallback = std::function<void(
bool success,
const std::vector<std::shared_ptr<Node>>& nodes)>;
180using DoneCallbackSimple = std::function<void(
bool success)>;
182typedef bool (*GetCallbackRaw)(std::shared_ptr<Value>,
void *user_data);
183typedef bool (*ValueCallbackRaw)(std::shared_ptr<Value>,
bool expired,
void *user_data);
184typedef void (*DoneCallbackRaw)(bool, std::vector<std::shared_ptr<Node>>*,
void *user_data);
185typedef void (*ShutdownCallbackRaw)(
void *user_data);
186typedef void (*DoneCallbackSimpleRaw)(bool,
void *user_data);
187typedef bool (*FilterRaw)(
const Value&,
void *user_data);
190OPENDHT_PUBLIC GetCallbackSimple bindGetCb(GetCallbackRaw raw_cb,
void* user_data);
191OPENDHT_PUBLIC GetCallback bindGetCb(GetCallbackSimple cb);
192OPENDHT_PUBLIC ValueCallback bindValueCb(ValueCallbackRaw raw_cb,
void* user_data);
193OPENDHT_PUBLIC ShutdownCallback bindShutdownCb(ShutdownCallbackRaw shutdown_cb_raw,
void* user_data);
194OPENDHT_PUBLIC DoneCallback bindDoneCb(DoneCallbackSimple donecb);
195OPENDHT_PUBLIC DoneCallback bindDoneCb(DoneCallbackRaw raw_cb,
void* user_data);
196OPENDHT_PUBLIC DoneCallbackSimple bindDoneCbSimple(DoneCallbackSimpleRaw raw_cb,
void* user_data);
197OPENDHT_PUBLIC Value::Filter bindFilterRaw(FilterRaw raw_filter,
void* user_data);