My Project 3.2.0
C++ Distributed Hash Table
Loading...
Searching...
No Matches
dht_interface.h
1/*
2 * Copyright (C) 2014-2023 Savoir-faire Linux Inc.
3 * Author: Sébastien Blin <sebastien.blin@savoirfairelinux.com>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <https://www.gnu.org/licenses/>.
17 */
18
19#pragma once
20
21#include "infohash.h"
22#include "logger.h"
23#include "node_export.h"
24
25#include <queue>
26
27namespace dht {
28
29namespace net {
30 class DatagramSocket;
31}
32
33class OPENDHT_PUBLIC DhtInterface {
34public:
35 DhtInterface() = default;
36 DhtInterface(const Logger& l) : logger_(std::make_shared<Logger>(l)) {}
37 DhtInterface(const std::shared_ptr<Logger>& l) : logger_(l) {}
38 virtual ~DhtInterface() = default;
39
40 // [[deprecated]]
41 using Status = NodeStatus;
42 // [[deprecated]]
44
48 virtual NodeStatus updateStatus(sa_family_t af) { return getStatus(af); }
49 virtual NodeStatus getStatus(sa_family_t af) const = 0;
50 virtual NodeStatus getStatus() const = 0;
51
52 void addOnConnectedCallback(std::function<void()> cb) {
53 onConnectCallbacks_.emplace(std::move(cb));
54 }
55 virtual void setOnPublicAddressChanged(PublicAddressChangedCb) {}
56
57 virtual net::DatagramSocket* getSocket() const { return {}; }
58
62 virtual const InfoHash& getNodeId() const = 0;
63
69 virtual void shutdown(ShutdownCallback cb, bool stop = false) = 0;
70
77 virtual bool isRunning(sa_family_t af = 0) const = 0;
78
79 virtual void registerType(const ValueType& type) = 0;
80
81 virtual const ValueType& getType(ValueType::Id type_id) const = 0;
82
83 virtual void addBootstrap(const std::string& /*host*/, const std::string& /*service*/) {};
84 virtual void clearBootstrap() {};
85
91 virtual void insertNode(const InfoHash& id, const SockAddr&) = 0;
92 virtual void insertNode(const NodeExport& n) = 0;
93
94 virtual void pingNode(SockAddr, DoneCallbackSimple&& cb={}) = 0;
95
96 virtual time_point periodic(const uint8_t *buf, size_t buflen, SockAddr, const time_point& now) = 0;
97 virtual time_point periodic(const uint8_t *buf, size_t buflen, const sockaddr* from, socklen_t fromlen, const time_point& now) = 0;
98
109 virtual void get(const InfoHash& key, GetCallback cb, DoneCallback donecb={}, Value::Filter&& f={}, Where&& w = {}) = 0;
110 virtual void get(const InfoHash& key, GetCallback cb, DoneCallbackSimple donecb={}, Value::Filter&& f={}, Where&& w = {}) = 0;
111 virtual void get(const InfoHash& key, GetCallbackSimple cb, DoneCallback donecb={}, Value::Filter&& f={}, Where&& w = {}) = 0;
112 virtual void get(const InfoHash& key, GetCallbackSimple cb, DoneCallbackSimple donecb, Value::Filter&& f={}, Where&& w = {}) = 0;
113
124 virtual void query(const InfoHash& key, QueryCallback cb, DoneCallback done_cb = {}, Query&& q = {}) = 0;
125 virtual void query(const InfoHash& key, QueryCallback cb, DoneCallbackSimple done_cb = {}, Query&& q = {}) = 0;
126
130 virtual std::vector<Sp<Value>> getLocal(const InfoHash& key, const Value::Filter& f = {}) const = 0;
131
135 virtual Sp<Value> getLocalById(const InfoHash& key, Value::Id vid) const = 0;
136
143 virtual void put(const InfoHash& key,
144 Sp<Value>,
145 DoneCallback cb=nullptr,
146 time_point created=time_point::max(),
147 bool permanent = false) = 0;
148 virtual void put(const InfoHash& key,
149 const Sp<Value>& v,
150 DoneCallbackSimple cb,
151 time_point created=time_point::max(),
152 bool permanent = false) = 0;
153 virtual void put(const InfoHash& key,
154 Value&& v,
155 DoneCallback cb=nullptr,
156 time_point created=time_point::max(),
157 bool permanent = false) = 0;
158 virtual void put(const InfoHash& key,
159 Value&& v,
160 DoneCallbackSimple cb,
161 time_point created=time_point::max(),
162 bool permanent = false) = 0;
163
167 virtual std::vector<Sp<Value>> getPut(const InfoHash&) const = 0;
168
172 virtual Sp<Value> getPut(const InfoHash&, const Value::Id&) const = 0;
173
178 virtual bool cancelPut(const InfoHash&, const Value::Id&) = 0;
179
187 virtual size_t listen(const InfoHash&, GetCallback, Value::Filter={}, Where w = {}) = 0;
188 virtual size_t listen(const InfoHash& key, GetCallbackSimple cb, Value::Filter f={}, Where w = {}) = 0;
189 virtual size_t listen(const InfoHash&, ValueCallback, Value::Filter={}, Where w = {}) = 0;
190
191 virtual bool cancelListen(const InfoHash&, size_t token) = 0;
192
198 virtual void connectivityChanged(sa_family_t) = 0;
199 virtual void connectivityChanged() = 0;
200
205 virtual std::vector<NodeExport> exportNodes() const = 0;
206
207 virtual std::vector<ValuesExport> exportValues() const = 0;
208 virtual void importValues(const std::vector<ValuesExport>&) = 0;
209
210 virtual NodeStats getNodesStats(sa_family_t af) const = 0;
211
212 virtual std::string getStorageLog() const = 0;
213 virtual std::string getStorageLog(const InfoHash&) const = 0;
214
215 virtual std::string getRoutingTablesLog(sa_family_t) const = 0;
216 virtual std::string getSearchesLog(sa_family_t) const = 0;
217 virtual std::string getSearchLog(const InfoHash&, sa_family_t af = AF_UNSPEC) const = 0;
218
219 virtual void dumpTables() const = 0;
220 virtual std::vector<unsigned> getNodeMessageStats(bool in = false) = 0;
221
225 virtual void setStorageLimit(size_t limit = DEFAULT_STORAGE_LIMIT) = 0;
226 virtual size_t getStorageLimit() const = 0;
227
232 virtual std::pair<size_t, size_t> getStoreSize() const = 0;
233
234 virtual std::vector<SockAddr> getPublicAddress(sa_family_t family = 0) = 0;
235
236 virtual void setLogger(const Logger& l) {
237 if (logger_)
238 *logger_ = l;
239 else
240 logger_= std::make_shared<Logger>(l);
241 }
242
243 virtual void setLogger(const std::shared_ptr<Logger>& l) {
244 logger_ = l;
245 }
246
250 virtual void setLogFilter(const InfoHash& f)
251 {
252 if (logger_)
253 logger_->setFilter(f);
254 }
255
256 virtual void setPushNotificationToken(const std::string&) {};
257
258 virtual void setPushNotificationTopic(const std::string&) {};
259 virtual void setPushNotificationPlatform(const std::string&) {};
260
265 virtual void pushNotificationReceived(const std::map<std::string, std::string>& data) = 0;
266
267protected:
268 std::shared_ptr<Logger> logger_ {};
269 std::queue<std::function<void()>> onConnectCallbacks_ {};
270};
271
272} // namespace dht
virtual void insertNode(const InfoHash &id, const SockAddr &)=0
virtual Sp< Value > getPut(const InfoHash &, const Value::Id &) const =0
virtual std::vector< Sp< Value > > getLocal(const InfoHash &key, const Value::Filter &f={}) const =0
virtual void get(const InfoHash &key, GetCallback cb, DoneCallback donecb={}, Value::Filter &&f={}, Where &&w={})=0
virtual std::vector< Sp< Value > > getPut(const InfoHash &) const =0
virtual void setLogFilter(const InfoHash &f)
virtual void put(const InfoHash &key, Sp< Value >, DoneCallback cb=nullptr, time_point created=time_point::max(), bool permanent=false)=0
virtual void connectivityChanged(sa_family_t)=0
virtual void query(const InfoHash &key, QueryCallback cb, DoneCallback done_cb={}, Query &&q={})=0
virtual void setStorageLimit(size_t limit=DEFAULT_STORAGE_LIMIT)=0
virtual bool isRunning(sa_family_t af=0) const =0
virtual void shutdown(ShutdownCallback cb, bool stop=false)=0
virtual Sp< Value > getLocalById(const InfoHash &key, Value::Id vid) const =0
virtual size_t listen(const InfoHash &, GetCallback, Value::Filter={}, Where w={})=0
virtual const InfoHash & getNodeId() const =0
virtual std::pair< size_t, size_t > getStoreSize() const =0
virtual NodeStatus updateStatus(sa_family_t af)
virtual void pushNotificationReceived(const std::map< std::string, std::string > &data)=0
virtual std::vector< NodeExport > exportNodes() const =0
virtual bool cancelPut(const InfoHash &, const Value::Id &)=0
NodeStatus
Definition callbacks.h:42
Describes a query destined to another peer.
Definition value.h:924
Serializable dht::Value filter.
Definition value.h:797