/* vim: set expandtab ts=4 sw=4: */ /* * You may redistribute this program and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation, * either version 3 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef Janitor_H #define Janitor_H #ifdef SUBNODE #error "this file should not be included in subnode" #endif #include "crypto/random/Random.h" #include "dht/Address.h" #include "dht/dhtcore/RouterModule.h" #include "dht/dhtcore/SearchRunner.h" #include "dht/dhtcore/NodeStore.h" #include "dht/dhtcore/RumorMill.h" #include "memory/Allocator.h" #include "util/events/EventBase.h" #include "util/log/Log.h" #include "util/Linker.h" Linker_require("dht/dhtcore/Janitor.c") #include struct Janitor { /** * Externally accessible RumorMill. * Used for direct peers and search results that are closer than the responder. */ struct RumorMill* externalMill; /** * High priority RumorMill. * Used to discover new links to nodes we already know about. */ struct RumorMill* linkMill; /** * Low priority RumorMill. * Used to discover new nodes. */ struct RumorMill* nodeMill; /** Just used to keep track of nodes that we need to check on for DHT health. */ struct RumorMill* dhtMill; /** Used for splitting links which are longer than 1 hop. */ struct RumorMill* splitMill; /** * The number of milliseconds after a path has been (successfully) pinged which it will * not be pinged again. */ #define Janitor_BLACKLIST_PATH_FOR_MILLISECONDS_DEFAULT 30000 int64_t blacklistPathForMilliseconds; /** The number of milliseconds between attempting local maintenance searches. */ #define Janitor_LOCAL_MAINTENANCE_MILLISECONDS_DEFAULT 1000 uint64_t localMaintainenceMilliseconds; /** * The number of milliseconds to pass between global maintainence searches. * These are searches for random targets which are used to discover new nodes. */ #define Janitor_GLOBAL_MAINTENANCE_MILLISECONDS_DEFAULT 30000 uint64_t globalMaintainenceMilliseconds; }; struct Janitor* Janitor_new(struct RouterModule* routerModule, struct NodeStore* nodeStore, struct SearchRunner* searchRunner, struct RumorMill* rumorMill, struct Log* logger, struct Allocator* alloc, EventBase_t* eventBase, struct Random* rand); #endif