My Project 3.2.0
C++ Distributed Hash Table
Loading...
Searching...
No Matches
Namespaces | Classes | Typedefs | Enumerations | Functions | Variables
dht Namespace Reference

Namespaces

namespace  crypto
 
namespace  log
 

Classes

struct  Bucket
 
struct  Config
 
class  Dht
 
class  DhtException
 
class  DhtInterface
 
class  DhtMessage
 
class  DhtProxyClient
 
class  DhtProxyServer
 
class  DhtRunner
 
class  EncryptedValue
 
class  ExecutionContext
 
class  Executor
 
class  FieldValue
 Describes a value filter. More...
 
class  FieldValueIndex
 An index for field values. More...
 
class  Hash
 
struct  HexMap
 
class  IceCandidates
 
class  ImMessage
 
class  IpServiceAnnouncement
 
struct  Node
 
struct  NodeCache
 
struct  NodeExport
 
struct  NodeInfo
 
struct  NodeStats
 
class  PeerDiscovery
 
struct  ProxyServerConfig
 
class  Query
 Describes a query destined to another peer. More...
 
class  RateLimiter
 
class  RoutingTable
 
class  Scheduler
 Job scheduler. More...
 
class  SecureDht
 
struct  SecureDhtConfig
 
class  Select
 Serializable Value field selection. More...
 
class  SignedValue
 
class  SockAddr
 
struct  Socket
 
class  SocketException
 
class  ThreadPool
 
class  TrustRequest
 
class  TypeStore
 
class  uniform_duration_distribution
 
struct  Value
 
struct  ValueType
 
class  Where
 Serializable dht::Value filter. More...
 

Typedefs

using ValuesExport = std::pair<InfoHash, Blob>
 
using QueryCallback = std::function<bool(const std::vector<std::shared_ptr<FieldValueIndex>>& fields)>
 
using GetCallback = std::function<bool(const std::vector<std::shared_ptr<Value>>& values)>
 
using ValueCallback = std::function<bool(const std::vector<std::shared_ptr<Value>>& values, bool expired)>
 
using GetCallbackSimple = std::function<bool(std::shared_ptr<Value> value)>
 
using ShutdownCallback = std::function<void()>
 
using IdentityAnnouncedCb = std::function<void(bool)>
 
using PublicAddressChangedCb = std::function<void(std::vector<SockAddr>)>
 
using CertificateStoreQuery = std::function<std::vector<std::shared_ptr<crypto::Certificate>>(const InfoHash& pk_id)>
 
using DoneCallback = std::function<void(bool success, const std::vector<std::shared_ptr<Node>>& nodes)>
 
using DoneCallbackSimple = std::function<void(bool success)>
 
typedef bool(* GetCallbackRaw) (std::shared_ptr< Value >, void *user_data)
 
typedef bool(* ValueCallbackRaw) (std::shared_ptr< Value >, bool expired, void *user_data)
 
typedef void(* DoneCallbackRaw) (bool, std::vector< std::shared_ptr< Node > > *, void *user_data)
 
typedef void(* ShutdownCallbackRaw) (void *user_data)
 
typedef void(* DoneCallbackSimpleRaw) (bool, void *user_data)
 
typedef bool(* FilterRaw) (const Value &, void *user_data)
 
using RestRouter = restinio::router::express_router_t<>
 
using RequestStatus = restinio::request_handling_status_t
 
using byte = uint8_t
 
using InfoHash = Hash<HASH_LEN>
 
using h256 = Hash<32>
 
using PkId = h256
 
using Logger = log::Logger
 
using Tid = uint32_t
 
using SocketCb = std::function<void(const Sp<Node>&, net::RequestAnswer&&)>
 
using NetId = uint32_t
 
using want_t = int_fast8_t
 
template<class T >
using Sp = std::shared_ptr<T>
 
using clock = std::chrono::steady_clock
 
using system_clock = std::chrono::system_clock
 
using time_point = clock::time_point
 
using duration = clock::duration
 
using Blob = std::vector<uint8_t>
 
using StorePolicy = std::function<bool(InfoHash key, std::shared_ptr<Value>& value, const InfoHash& from, const SockAddr& addr)>
 
using EditPolicy = std::function<bool(InfoHash key, const std::shared_ptr<Value>& old_val, std::shared_ptr<Value>& new_val, const InfoHash& from, const SockAddr& addr)>
 

Enumerations

enum class  NodeStatus { Disconnected , Connecting , Connected }
 
enum class  ImStatus : uint8_t { NONE = 0 , TYPING , RECEIVED , READ }
 
enum class  PushType { None = 0 , Android , iOS , UnifiedPush }
 

Functions

constexpr const char * statusToStr (NodeStatus status)
 
OPENDHT_PUBLIC GetCallbackSimple bindGetCb (GetCallbackRaw raw_cb, void *user_data)
 
OPENDHT_PUBLIC GetCallback bindGetCb (GetCallbackSimple cb)
 
OPENDHT_PUBLIC ValueCallback bindValueCb (ValueCallbackRaw raw_cb, void *user_data)
 
OPENDHT_PUBLIC ShutdownCallback bindShutdownCb (ShutdownCallbackRaw shutdown_cb_raw, void *user_data)
 
OPENDHT_PUBLIC DoneCallback bindDoneCb (DoneCallbackSimple donecb)
 
OPENDHT_PUBLIC DoneCallback bindDoneCb (DoneCallbackRaw raw_cb, void *user_data)
 
OPENDHT_PUBLIC DoneCallbackSimple bindDoneCbSimple (DoneCallbackSimpleRaw raw_cb, void *user_data)
 
OPENDHT_PUBLIC Value::Filter bindFilterRaw (FilterRaw raw_filter, void *user_data)
 
template<size_t N>
std::ostream & operator<< (std::ostream &s, const Hash< N > &h)
 
template<size_t N>
std::istream & operator>> (std::istream &s, Hash< N > &h)
 
std::string toHex (const uint8_t *data, size_t size)
 
std::string toHex (const std::vector< uint8_t > &data)
 
OPENDHT_PUBLIC void print_addr (std::ostream &os, const sockaddr *sa, socklen_t slen)
 
OPENDHT_PUBLIC std::string print_addr (const sockaddr *sa, socklen_t slen)
 
OPENDHT_PUBLIC std::string print_addr (const sockaddr_storage &ss, socklen_t sslen)
 
OPENDHT_PUBLIC bool operator== (const SockAddr &a, const SockAddr &b)
 
OPENDHT_PUBLIC const char * version ()
 
template<typename Key , typename Item , typename Condition >
void erase_if (std::map< Key, Item > &map, const Condition &condition)
 
OPENDHT_PUBLIC std::pair< std::string, std::string > splitPort (const std::string &s)
 
time_point from_time_t (std::time_t t)
 
std::time_t to_time_t (time_point t)
 
std::string to_str (double d)
 
template<class DT >
static double print_dt (DT d)
 
template<class DT >
static std::string print_duration (DT d)
 
template<class TimePoint >
static std::string print_time_relative (TimePoint now, TimePoint d)
 
OPENDHT_PUBLIC Blob unpackBlob (const msgpack::object &o)
 
template<typename Type >
Blob packMsg (const Type &t)
 
template<typename Type >
Type unpackMsg (Blob b)
 
msgpack::unpacked unpackMsg (Blob b)
 
msgpack::object * findMapValue (const msgpack::object &map, const char *key, size_t length)
 
msgpack::object * findMapValue (const msgpack::object &map, const char *key)
 
msgpack::object * findMapValue (const msgpack::object &map, std::string_view key)
 
static constexpr auto VALUE_KEY_ID ("id")
 
static const std::string VALUE_KEY_DAT ("dat")
 
static const std::string VALUE_KEY_PRIO ("p")
 
static const std::string VALUE_KEY_SIGNATURE ("sig")
 
static const std::string VALUE_KEY_SEQ ("seq")
 
static const std::string VALUE_KEY_DATA ("data")
 
static const std::string VALUE_KEY_OWNER ("owner")
 
static const std::string VALUE_KEY_TYPE ("type")
 
static const std::string VALUE_KEY_TO ("to")
 
static const std::string VALUE_KEY_BODY ("body")
 
static const std::string VALUE_KEY_USERTYPE ("utype")
 
template<typename T , typename std::enable_if< std::is_base_of< Value::SerializableBase, T >::value, T >::type * = nullptr>
Value::Filter getFilterSet (Value::Filter f)
 
template<typename T , typename std::enable_if< std::is_base_of< Value::SerializableBase, T >::value, T >::type * = nullptr>
Value::Filter getFilterSet ()
 
template<class T >
std::vector< T > unpackVector (const std::vector< std::shared_ptr< Value > > &vals)
 

Variables

static constexpr size_t DEFAULT_STORAGE_LIMIT {1024 * 1024 * 64}
 
OPENDHT_PUBLIC const std::array< std::reference_wrapper< const ValueType >, 5 > DEFAULT_TYPES
 
OPENDHT_PUBLIC const std::array< std::reference_wrapper< const ValueType >, 1 > DEFAULT_INSECURE_TYPES
 
OPENDHT_PUBLIC const HexMap hex_map
 
static constexpr unsigned TARGET_NODES {8}
 
const ValueType CERTIFICATE_TYPE
 
static constexpr const size_t MAX_VALUE_SIZE {1024 * 64}
 

Detailed Description

OpenDHT C++ namespace

Typedef Documentation

◆ Blob

using dht::Blob = std::vector<uint8_t>

Arbitrary binary data.

Definition at line 151 of file utils.h.

◆ byte

using dht::byte = uint8_t

Definition at line 54 of file infohash.h.

◆ CertificateStoreQuery

using dht::CertificateStoreQuery = std::function<std::vector<std::shared_ptr<crypto::Certificate>>(const InfoHash& pk_id)>

Definition at line 178 of file callbacks.h.

◆ clock

using dht::clock = std::chrono::steady_clock

Definition at line 79 of file utils.h.

◆ DoneCallback

using dht::DoneCallback = std::function<void(bool success, const std::vector<std::shared_ptr<Node>>& nodes)>

Definition at line 179 of file callbacks.h.

◆ DoneCallbackRaw

typedef void(* dht::DoneCallbackRaw) (bool, std::vector< std::shared_ptr< Node > > *, void *user_data)

Definition at line 184 of file callbacks.h.

◆ DoneCallbackSimple

using dht::DoneCallbackSimple = std::function<void(bool success)>

Definition at line 180 of file callbacks.h.

◆ DoneCallbackSimpleRaw

typedef void(* dht::DoneCallbackSimpleRaw) (bool, void *user_data)

Definition at line 186 of file callbacks.h.

◆ duration

using dht::duration = clock::duration

Definition at line 82 of file utils.h.

◆ EditPolicy

using dht::EditPolicy = std::function<bool(InfoHash key, const std::shared_ptr<Value>& old_val, std::shared_ptr<Value>& new_val, const InfoHash& from, const SockAddr& addr)>

An edition policy is applied once to every incoming value storage requests, if a value already exists for this key and value id. If the policy returns false, the edition request is ignored. The default behavior is to deny edition (see {ValueType::DEFAULT_EDIT_POLICY}). Some {ValueType}s may override this behavior (e.g. SignedValue).

Parameters
keythe key where the value is stored.
old_valthe previously stored value.
new_valthe new value to be stored. The value can be edited by the edit policy.
fromid of the requesting node.
form_addrnetwork address of the incoming request.
from_lennetwork address lendth of the incoming request.

Definition at line 90 of file value.h.

◆ FilterRaw

typedef bool(* dht::FilterRaw) (const Value &, void *user_data)

Definition at line 187 of file callbacks.h.

◆ GetCallback

using dht::GetCallback = std::function<bool(const std::vector<std::shared_ptr<Value>>& values)>

Definition at line 171 of file callbacks.h.

◆ GetCallbackRaw

typedef bool(* dht::GetCallbackRaw) (std::shared_ptr< Value >, void *user_data)

Definition at line 182 of file callbacks.h.

◆ GetCallbackSimple

using dht::GetCallbackSimple = std::function<bool(std::shared_ptr<Value> value)>

Definition at line 173 of file callbacks.h.

◆ h256

using dht::h256 = Hash<32>

Definition at line 284 of file infohash.h.

◆ IdentityAnnouncedCb

using dht::IdentityAnnouncedCb = std::function<void(bool)>

Definition at line 175 of file callbacks.h.

◆ InfoHash

using dht::InfoHash = Hash<HASH_LEN>

Definition at line 283 of file infohash.h.

◆ Logger

Definition at line 117 of file logger.h.

◆ NetId

using dht::NetId = uint32_t

Definition at line 40 of file utils.h.

◆ PkId

using dht::PkId = h256

Definition at line 285 of file infohash.h.

◆ PublicAddressChangedCb

using dht::PublicAddressChangedCb = std::function<void(std::vector<SockAddr>)>

Definition at line 176 of file callbacks.h.

◆ QueryCallback

using dht::QueryCallback = std::function<bool(const std::vector<std::shared_ptr<FieldValueIndex>>& fields)>

Definition at line 170 of file callbacks.h.

◆ RequestStatus

using dht::RequestStatus = restinio::request_handling_status_t

Definition at line 63 of file dht_proxy_server.h.

◆ RestRouter

using dht::RestRouter = restinio::router::express_router_t<>

Definition at line 62 of file dht_proxy_server.h.

◆ ShutdownCallback

using dht::ShutdownCallback = std::function<void()>

Definition at line 174 of file callbacks.h.

◆ ShutdownCallbackRaw

typedef void(* dht::ShutdownCallbackRaw) (void *user_data)

Definition at line 185 of file callbacks.h.

◆ SocketCb

using dht::SocketCb = std::function<void(const Sp<Node>&, net::RequestAnswer&&)>

Definition at line 40 of file node.h.

◆ Sp

template<class T >
using dht::Sp = std::shared_ptr<T>

Definition at line 47 of file utils.h.

◆ StorePolicy

using dht::StorePolicy = std::function<bool(InfoHash key, std::shared_ptr<Value>& value, const InfoHash& from, const SockAddr& addr)>

A storage policy is applied once to every incoming value storage requests. If the policy returns false, the value is dropped.

Parameters
keythe key where the storage is requested.
valuethe value to be stored. The value can be edited by the storage policy.
fromid of the requesting node.
form_addrnetwork address of the incoming request.
from_lennetwork address lendth of the incoming request.

Definition at line 74 of file value.h.

◆ system_clock

using dht::system_clock = std::chrono::system_clock

Definition at line 80 of file utils.h.

◆ Tid

using dht::Tid = uint32_t

Definition at line 39 of file node.h.

◆ time_point

using dht::time_point = clock::time_point

Definition at line 81 of file utils.h.

◆ ValueCallback

using dht::ValueCallback = std::function<bool(const std::vector<std::shared_ptr<Value>>& values, bool expired)>

Definition at line 172 of file callbacks.h.

◆ ValueCallbackRaw

typedef bool(* dht::ValueCallbackRaw) (std::shared_ptr< Value >, bool expired, void *user_data)

Definition at line 183 of file callbacks.h.

◆ ValuesExport

typedef std::pair< InfoHash, Blob > dht::ValuesExport = std::pair<InfoHash, Blob>

Definition at line 168 of file callbacks.h.

◆ want_t

using dht::want_t = int_fast8_t

Definition at line 41 of file utils.h.

Enumeration Type Documentation

◆ ImStatus

enum class dht::ImStatus : uint8_t
strong

Definition at line 25 of file default_types.h.

◆ NodeStatus

enum class dht::NodeStatus
strong

Current status of a DHT node.

Definition at line 42 of file callbacks.h.

◆ PushType

enum class dht::PushType
strong

Definition at line 40 of file dht_proxy_server.h.

Function Documentation

◆ erase_if()

template<typename Key , typename Item , typename Condition >
void dht::erase_if ( std::map< Key, Item > & map,
const Condition & condition )

Definition at line 50 of file utils.h.

◆ findMapValue() [1/2]

msgpack::object * dht::findMapValue ( const msgpack::object & map,
const char * key )
inline

Definition at line 178 of file utils.h.

◆ findMapValue() [2/2]

msgpack::object * dht::findMapValue ( const msgpack::object & map,
std::string_view key )
inline

Definition at line 181 of file utils.h.

◆ getFilterSet() [1/2]

template<typename T , typename std::enable_if< std::is_base_of< Value::SerializableBase, T >::value, T >::type * = nullptr>
Value::Filter dht::getFilterSet ( )

Definition at line 1030 of file value.h.

◆ getFilterSet() [2/2]

template<typename T , typename std::enable_if< std::is_base_of< Value::SerializableBase, T >::value, T >::type * = nullptr>
Value::Filter dht::getFilterSet ( Value::Filter f)

Definition at line 1010 of file value.h.

◆ operator<<()

template<size_t N>
std::ostream & dht::operator<< ( std::ostream & s,
const Hash< N > & h )

Definition at line 288 of file infohash.h.

◆ operator>>()

template<size_t N>
std::istream & dht::operator>> ( std::istream & s,
Hash< N > & h )

Definition at line 295 of file infohash.h.

◆ packMsg()

template<typename Type >
Blob dht::packMsg ( const Type & t)

Definition at line 160 of file utils.h.

◆ print_dt()

template<class DT >
static double dht::print_dt ( DT d)
static

Converts std::chrono::duration to floating-point seconds.

Definition at line 99 of file utils.h.

◆ print_duration()

template<class DT >
static std::string dht::print_duration ( DT d)
static

Definition at line 105 of file utils.h.

◆ print_time_relative()

template<class TimePoint >
static std::string dht::print_time_relative ( TimePoint now,
TimePoint d )
static

Definition at line 123 of file utils.h.

◆ splitPort()

OPENDHT_PUBLIC std::pair< std::string, std::string > dht::splitPort ( const std::string & s)

Split "[host]:port" or "host:port" to pair<"host", "port">.

◆ statusToStr()

constexpr const char * dht::statusToStr ( NodeStatus status)
inlineconstexpr

Definition at line 49 of file callbacks.h.

◆ to_str()

std::string dht::to_str ( double d)
inline

Definition at line 88 of file utils.h.

◆ toHex() [1/2]

std::string dht::toHex ( const std::vector< uint8_t > & data)
inline

Definition at line 373 of file infohash.h.

◆ toHex() [2/2]

std::string dht::toHex ( const uint8_t * data,
size_t size )
inline

Definition at line 362 of file infohash.h.

◆ unpackBlob()

OPENDHT_PUBLIC Blob dht::unpackBlob ( const msgpack::object & o)

Provides backward compatibility with msgpack 1.0

◆ unpackMsg()

template<typename Type >
Type dht::unpackMsg ( Blob b)

Definition at line 169 of file utils.h.

◆ unpackVector()

template<class T >
std::vector< T > dht::unpackVector ( const std::vector< std::shared_ptr< Value > > & vals)

Definition at line 1048 of file value.h.

Variable Documentation

◆ CERTIFICATE_TYPE

const ValueType dht::CERTIFICATE_TYPE
Initial value:
= {
8, "Certificate", std::chrono::hours(24 * 7),
[](InfoHash id, Sp<Value>& v, const InfoHash&, const SockAddr&) {
try {
crypto::Certificate crt(v->data);
return crt.getPublicKey().getId() == id || InfoHash::get(crt.getPublicKey().getLongId()) == id;
} catch (const std::exception& e) {}
return false;
},
[](InfoHash, const Sp<Value>& o, Sp<Value>& n, const InfoHash&, const SockAddr&) {
try {
return crypto::Certificate(o->data).getPublicKey().getId() == crypto::Certificate(n->data).getPublicKey().getId();
} catch (const std::exception& e) {}
return false;
}
}

Definition at line 377 of file securedht.h.

◆ DEFAULT_STORAGE_LIMIT

constexpr size_t dht::DEFAULT_STORAGE_LIMIT {1024 * 1024 * 64}
staticconstexpr

Definition at line 166 of file callbacks.h.

◆ MAX_VALUE_SIZE

constexpr const size_t dht::MAX_VALUE_SIZE {1024 * 64}
staticconstexpr

Definition at line 92 of file value.h.

◆ TARGET_NODES

constexpr unsigned dht::TARGET_NODES {8}
staticconstexpr

Definition at line 26 of file routing_table.h.