My Project 3.2.0
C++ Distributed Hash Table
|
#include <dht.h>
Public Member Functions | |
Dht (std::unique_ptr< net::DatagramSocket > &&sock, const Config &config, const Sp< Logger > &l={}, std::unique_ptr< std::mt19937_64 > &&rd={}) | |
const InfoHash & | getNodeId () const override |
void | setOnPublicAddressChanged (PublicAddressChangedCb cb) override |
NodeStatus | updateStatus (sa_family_t af) override |
NodeStatus | getStatus (sa_family_t af) const override |
NodeStatus | getStatus () const override |
net::DatagramSocket * | getSocket () const override |
void | shutdown (ShutdownCallback cb, bool stop=false) override |
bool | isRunning (sa_family_t af=0) const override |
virtual void | registerType (const ValueType &type) override |
const ValueType & | getType (ValueType::Id type_id) const override |
void | addBootstrap (const std::string &host, const std::string &service) override |
void | clearBootstrap () override |
void | insertNode (const InfoHash &id, const SockAddr &) override |
void | insertNode (const NodeExport &n) override |
void | pingNode (SockAddr, DoneCallbackSimple &&cb={}) override |
time_point | periodic (const uint8_t *buf, size_t buflen, SockAddr, const time_point &now) override |
time_point | periodic (const uint8_t *buf, size_t buflen, const sockaddr *from, socklen_t fromlen, const time_point &now) override |
virtual void | get (const InfoHash &key, GetCallback cb, DoneCallback donecb={}, Value::Filter &&f={}, Where &&w={}) override |
virtual void | get (const InfoHash &key, GetCallback cb, DoneCallbackSimple donecb={}, Value::Filter &&f={}, Where &&w={}) override |
virtual void | get (const InfoHash &key, GetCallbackSimple cb, DoneCallback donecb={}, Value::Filter &&f={}, Where &&w={}) override |
virtual void | get (const InfoHash &key, GetCallbackSimple cb, DoneCallbackSimple donecb, Value::Filter &&f={}, Where &&w={}) override |
virtual void | query (const InfoHash &key, QueryCallback cb, DoneCallback done_cb={}, Query &&q={}) override |
virtual void | query (const InfoHash &key, QueryCallback cb, DoneCallbackSimple done_cb={}, Query &&q={}) override |
std::vector< Sp< Value > > | getLocal (const InfoHash &key, const Value::Filter &f={}) const override |
Sp< Value > | getLocalById (const InfoHash &key, Value::Id vid) const override |
void | put (const InfoHash &key, Sp< Value >, DoneCallback cb=nullptr, time_point created=time_point::max(), bool permanent=false) override |
void | put (const InfoHash &key, const Sp< Value > &v, DoneCallbackSimple cb, time_point created=time_point::max(), bool permanent=false) override |
void | put (const InfoHash &key, Value &&v, DoneCallback cb=nullptr, time_point created=time_point::max(), bool permanent=false) override |
void | put (const InfoHash &key, Value &&v, DoneCallbackSimple cb, time_point created=time_point::max(), bool permanent=false) override |
std::vector< Sp< Value > > | getPut (const InfoHash &) const override |
Sp< Value > | getPut (const InfoHash &, const Value::Id &) const override |
bool | cancelPut (const InfoHash &, const Value::Id &) override |
size_t | listen (const InfoHash &, ValueCallback, Value::Filter={}, Where={}) override |
size_t | listen (const InfoHash &key, GetCallback cb, Value::Filter f={}, Where w={}) override |
size_t | listen (const InfoHash &key, GetCallbackSimple cb, Value::Filter f={}, Where w={}) override |
bool | cancelListen (const InfoHash &, size_t token) override |
void | connectivityChanged (sa_family_t) override |
void | connectivityChanged () override |
std::vector< NodeExport > | exportNodes () const override |
std::vector< ValuesExport > | exportValues () const override |
void | importValues (const std::vector< ValuesExport > &) override |
void | saveState (const std::string &path) const |
void | loadState (const std::string &path) |
NodeStats | getNodesStats (sa_family_t af) const override |
std::string | getStorageLog () const override |
std::string | getStorageLog (const InfoHash &) const override |
std::string | getRoutingTablesLog (sa_family_t) const override |
std::string | getSearchesLog (sa_family_t) const override |
std::string | getSearchLog (const InfoHash &, sa_family_t af=AF_UNSPEC) const override |
void | dumpTables () const override |
std::vector< unsigned > | getNodeMessageStats (bool in=false) override |
void | setStorageLimit (size_t limit=DEFAULT_STORAGE_LIMIT) override |
size_t | getStorageLimit () const override |
std::pair< size_t, size_t > | getStoreSize () const override |
std::vector< SockAddr > | getPublicAddress (sa_family_t family=0) override |
void | pushNotificationReceived (const std::map< std::string, std::string > &) override |
void | resubscribe (unsigned) |
![]() | |
DhtInterface (const Logger &l) | |
DhtInterface (const std::shared_ptr< Logger > &l) | |
void | addOnConnectedCallback (std::function< void()> cb) |
virtual void | setLogger (const Logger &l) |
virtual void | setLogger (const std::shared_ptr< Logger > &l) |
virtual void | setLogFilter (const InfoHash &f) |
virtual void | setPushNotificationToken (const std::string &) |
virtual void | setPushNotificationTopic (const std::string &) |
virtual void | setPushNotificationPlatform (const std::string &) |
Additional Inherited Members | |
![]() | |
using | Status = NodeStatus |
using | NodeExport = dht::NodeExport |
![]() | |
std::shared_ptr< Logger > | logger_ {} |
std::queue< std::function< void()> > | onConnectCallbacks_ {} |
Main Dht class. Provides a Distributed Hash Table node.
Must be given open UDP sockets and periodic must be called regularly.
dht::Dht::Dht | ( | std::unique_ptr< net::DatagramSocket > && | sock, |
const Config & | config, | ||
const Sp< Logger > & | l = {}, | ||
std::unique_ptr< std::mt19937_64 > && | rd = {} ) |
Initialise the Dht with two open sockets (for IPv4 and IP6) and an ID for the node.
|
inlineoverridevirtual |
Reimplemented from dht::DhtInterface.
|
overridevirtual |
Implements dht::DhtInterface.
|
overridevirtual |
Stop any put/announce operation at the given location, for the value with the given id.
Implements dht::DhtInterface.
|
inlineoverridevirtual |
Reimplemented from dht::DhtInterface.
|
inlineoverridevirtual |
Implements dht::DhtInterface.
|
overridevirtual |
Inform the DHT of lower-layer connectivity changes. This will cause the DHT to assume a public IP address change. The DHT will recontact neighbor nodes, re-register for listen ops etc.
Implements dht::DhtInterface.
|
overridevirtual |
Implements dht::DhtInterface.
|
overridevirtual |
Get the list of good nodes for local storage saving purposes The list is ordered to minimize the back-to-work delay.
Implements dht::DhtInterface.
|
overridevirtual |
Implements dht::DhtInterface.
|
overridevirtual |
Get a value by searching on all available protocols (IPv4, IPv6), and call the provided get callback when values are found at key. The operation will start as soon as the node is connected to the network.
cb | a function called when new values are found on the network. It should return false to stop the operation. |
donecb | a function called when the operation is complete. cb and donecb won't be called again afterward. |
f | a filter function used to prefilter values. |
Implements dht::DhtInterface.
|
inlineoverridevirtual |
Implements dht::DhtInterface.
|
inlineoverridevirtual |
Implements dht::DhtInterface.
|
inlineoverridevirtual |
Implements dht::DhtInterface.
|
overridevirtual |
Get locally stored data for the given hash.
Implements dht::DhtInterface.
Get locally stored data for the given key and value id.
Implements dht::DhtInterface.
|
inlineoverridevirtual |
|
inlineoverridevirtual |
Implements dht::DhtInterface.
|
overridevirtual |
Implements dht::DhtInterface.
|
overridevirtual |
Implements dht::DhtInterface.
Get data currently being put at the given hash.
Implements dht::DhtInterface.
Get data currently being put at the given hash with the given id.
Implements dht::DhtInterface.
|
overridevirtual |
Implements dht::DhtInterface.
|
overridevirtual |
Implements dht::DhtInterface.
|
overridevirtual |
Implements dht::DhtInterface.
|
inlineoverridevirtual |
Reimplemented from dht::DhtInterface.
|
inlineoverridevirtual |
Implements dht::DhtInterface.
|
inlineoverridevirtual |
Get the current status of the node for the given family.
Implements dht::DhtInterface.
|
inlineoverridevirtual |
Implements dht::DhtInterface.
|
overridevirtual |
Implements dht::DhtInterface.
|
overridevirtual |
Implements dht::DhtInterface.
|
inlineoverridevirtual |
Returns the total memory usage of stored values and the number of stored values.
Implements dht::DhtInterface.
|
inlineoverridevirtual |
Implements dht::DhtInterface.
|
overridevirtual |
Implements dht::DhtInterface.
Insert a node in the main routing table. The node is not pinged, so this should be used to bootstrap efficiently from previously known nodes.
Implements dht::DhtInterface.
|
inlineoverridevirtual |
Implements dht::DhtInterface.
|
overridevirtual |
Returns true if the node is running (have access to an open socket).
af: address family. If non-zero, will return true if the node is running for the provided family.
Implements dht::DhtInterface.
|
overridevirtual |
Listen on the network for any changes involving a specified hash. The node will register to receive updates from relevent nodes when new values are added or removed.
Implements dht::DhtInterface.
|
inlineoverridevirtual |
Listen on the network for any changes involving a specified hash. The node will register to receive updates from relevent nodes when new values are added or removed.
Implements dht::DhtInterface.
|
inlineoverridevirtual |
Implements dht::DhtInterface.
|
inlineoverridevirtual |
Implements dht::DhtInterface.
|
overridevirtual |
Implements dht::DhtInterface.
|
overridevirtual |
Implements dht::DhtInterface.
|
inlineoverridevirtual |
Call linked callback with a push notification
notification | to process |
Implements dht::DhtInterface.
|
inlineoverridevirtual |
Implements dht::DhtInterface.
|
overridevirtual |
Announce a value on all available protocols (IPv4, IPv6).
The operation will start as soon as the node is connected to the network. The done callback will be called once, when the first announce succeeds, or fails.
Implements dht::DhtInterface.
|
inlineoverridevirtual |
Implements dht::DhtInterface.
|
inlineoverridevirtual |
Implements dht::DhtInterface.
|
overridevirtual |
Similar to Dht::get, but sends a Query to filter data remotely.
key | the key for which to query data for. |
cb | a function called when new values are found on the network. It should return false to stop the operation. |
done_cb | a function called when the operation is complete. cb and done_cb won't be called again afterward. |
q | a query used to filter values on the remotes before they send a response. |
Implements dht::DhtInterface.
|
inlineoverridevirtual |
Implements dht::DhtInterface.
|
inlineoverridevirtual |
Implements dht::DhtInterface.
|
inlineoverridevirtual |
Reimplemented from dht::DhtInterface.
|
inlineoverridevirtual |
Set the in-memory storage limit in bytes
Implements dht::DhtInterface.
|
overridevirtual |
Performs final operations before quitting.
Implements dht::DhtInterface.
|
overridevirtual |
Get the current status of the node for the given family.
Reimplemented from dht::DhtInterface.