22 #include "log_enable.h" 36 DhtInterface(
const std::shared_ptr<Logger>& l) : logger_(l) {};
48 virtual NodeStatus getStatus(sa_family_t af)
const = 0;
51 void addOnConnectedCallback(std::function<
void()> cb) {
52 onConnectCallbacks_.emplace(std::move(cb));
55 virtual net::DatagramSocket* getSocket()
const {
return {}; };
60 virtual const InfoHash& getNodeId()
const = 0;
67 virtual void shutdown(ShutdownCallback cb,
bool stop =
false) = 0;
75 virtual bool isRunning(sa_family_t af = 0)
const = 0;
77 virtual void registerType(
const ValueType& type) = 0;
79 virtual const ValueType& getType(ValueType::Id type_id)
const = 0;
81 virtual void addBootstrap(
const std::string& ,
const std::string& ) {};
82 virtual void clearBootstrap() {};
89 virtual void insertNode(
const InfoHash&
id,
const SockAddr&) = 0;
90 virtual void insertNode(
const NodeExport& n) = 0;
92 virtual void pingNode(SockAddr, DoneCallbackSimple&& cb={}) = 0;
94 virtual time_point periodic(
const uint8_t *buf,
size_t buflen, SockAddr,
const time_point& now) = 0;
95 virtual time_point periodic(
const uint8_t *buf,
size_t buflen,
const sockaddr* from, socklen_t fromlen,
const time_point& now) = 0;
107 virtual void get(
const InfoHash& key, GetCallback cb, DoneCallback donecb={}, Value::Filter&& f={}, Where&& w = {}) = 0;
108 virtual void get(
const InfoHash& key, GetCallback cb, DoneCallbackSimple donecb={}, Value::Filter&& f={}, Where&& w = {}) = 0;
109 virtual void get(
const InfoHash& key, GetCallbackSimple cb, DoneCallback donecb={}, Value::Filter&& f={}, Where&& w = {}) = 0;
110 virtual void get(
const InfoHash& key, GetCallbackSimple cb, DoneCallbackSimple donecb, Value::Filter&& f={}, Where&& w = {}) = 0;
122 virtual void query(
const InfoHash& key, QueryCallback cb, DoneCallback done_cb = {}, Query&& q = {}) = 0;
123 virtual void query(
const InfoHash& key, QueryCallback cb, DoneCallbackSimple done_cb = {}, Query&& q = {}) = 0;
128 virtual std::vector<Sp<Value>> getLocal(
const InfoHash& key,
const Value::Filter& f = {})
const = 0;
133 virtual Sp<Value> getLocalById(
const InfoHash& key, Value::Id vid)
const = 0;
141 virtual void put(
const InfoHash& key,
143 DoneCallback cb=
nullptr,
144 time_point created=time_point::max(),
145 bool permanent =
false) = 0;
146 virtual void put(
const InfoHash& key,
148 DoneCallbackSimple cb,
149 time_point created=time_point::max(),
150 bool permanent =
false) = 0;
151 virtual void put(
const InfoHash& key,
153 DoneCallback cb=
nullptr,
154 time_point created=time_point::max(),
155 bool permanent =
false) = 0;
156 virtual void put(
const InfoHash& key,
158 DoneCallbackSimple cb,
159 time_point created=time_point::max(),
160 bool permanent =
false) = 0;
165 virtual std::vector<Sp<Value>> getPut(
const InfoHash&)
const = 0;
170 virtual Sp<Value> getPut(
const InfoHash&,
const Value::Id&)
const = 0;
176 virtual bool cancelPut(
const InfoHash&,
const Value::Id&) = 0;
185 virtual size_t listen(
const InfoHash&, GetCallback, Value::Filter={}, Where w = {}) = 0;
186 virtual size_t listen(
const InfoHash& key, GetCallbackSimple cb, Value::Filter f={}, Where w = {}) = 0;
187 virtual size_t listen(
const InfoHash&, ValueCallback, Value::Filter={}, Where w = {}) = 0;
189 virtual bool cancelListen(
const InfoHash&,
size_t token) = 0;
196 virtual void connectivityChanged(sa_family_t) = 0;
197 virtual void connectivityChanged() = 0;
203 virtual std::vector<NodeExport> exportNodes()
const = 0;
205 virtual std::vector<ValuesExport> exportValues()
const = 0;
206 virtual void importValues(
const std::vector<ValuesExport>&) = 0;
208 virtual NodeStats getNodesStats(sa_family_t af)
const = 0;
210 virtual std::string getStorageLog()
const = 0;
211 virtual std::string getStorageLog(
const InfoHash&)
const = 0;
213 virtual std::string getRoutingTablesLog(sa_family_t)
const = 0;
214 virtual std::string getSearchesLog(sa_family_t)
const = 0;
215 virtual std::string getSearchLog(
const InfoHash&, sa_family_t af = AF_UNSPEC)
const = 0;
217 virtual void dumpTables()
const = 0;
218 virtual std::vector<unsigned> getNodeMessageStats(
bool in =
false) = 0;
223 virtual void setStorageLimit(
size_t limit = DEFAULT_STORAGE_LIMIT) = 0;
224 virtual size_t getStorageLimit()
const = 0;
230 virtual std::pair<size_t, size_t> getStoreSize()
const = 0;
232 virtual std::vector<SockAddr> getPublicAddress(sa_family_t family = 0) = 0;
239 logger_->DBG = std::move(debug);
240 logger_->WARN = std::move(warn);
241 logger_->ERR = std::move(error);
243 logger_= std::make_shared<Logger>(std::move(error), std::move(warn), std::move(debug));
246 virtual void setLogger(
const Logger& l) {
250 logger_= std::make_shared<Logger>(l);
253 virtual void setLogger(
const std::shared_ptr<Logger>& l) {
263 logger_->setFilter(f);
266 virtual void setPushNotificationToken(
const std::string&) {};
272 virtual void pushNotificationReceived(
const std::map<std::string, std::string>& data) = 0;
275 std::shared_ptr<Logger> logger_ {};
276 std::queue<std::function<void()>> onConnectCallbacks_ {};
virtual void setLoggers(LogMethod error={}, LogMethod warn={}, LogMethod debug={})
virtual void setLogFilter(const InfoHash &f)
virtual NodeStatus updateStatus(sa_family_t af)