diff --git a/include/llarp.h b/include/llarp.h index 1a0c77ee3..11d271ac2 100644 --- a/include/llarp.h +++ b/include/llarp.h @@ -7,7 +7,7 @@ #include #ifdef __cplusplus -#include "router.hpp" // for service::address +#include "router.hpp" // for service::address #include extern "C" @@ -47,7 +47,8 @@ extern "C" /// put RC into nodeDB bool - llarp_main_putDatabase(struct llarp_main *ptr, struct llarp::RouterContact *rc); + llarp_main_putDatabase(struct llarp_main *ptr, + struct llarp::RouterContact *rc); /// get RC from nodeDB llarp::RouterContact * @@ -78,12 +79,16 @@ extern "C" llarp_main_queryDHT_RC(struct llarp_main *ptr, struct llarp_router_lookup_job *job); - /// set up DNS libs with a context bool llarp_main_init_dnsd(struct llarp_main *ptr, struct dnsd_context *dnsd, - uint16_t server_port, const char *upstream_host, - uint16_t upstream_port); + struct llarp_logic *logic, uint16_t server_port, + const char *upstream_host, uint16_t upstream_port); + + /// set up dotLokiLookup with logic for setting timers + bool + llarp_main_init_dotLokiLookup(struct llarp_main *ptr, + struct dotLokiLookup *dll); llarp::RouterContact * llarp_main_getLocalRC(struct llarp_main *ptr); @@ -96,17 +101,21 @@ extern "C" #ifdef __cplusplus + llarp::handlers::TunEndpoint * + main_router_getFirstTunEndpoint(struct llarp_main *ptr); + llarp_tun_io * main_router_getRange(struct llarp_main *ptr); /// map an ip to a hidden service address bool - main_router_mapAddress(struct llarp_main *ptr, const llarp::service::Address &addr, uint32_t ip); + main_router_mapAddress(struct llarp_main *ptr, + const llarp::service::Address &addr, uint32_t ip); /// info of possible path usage bool - main_router_prefetch(struct llarp_main *ptr, const llarp::service::Address &addr); - + main_router_prefetch(struct llarp_main *ptr, + const llarp::service::Address &addr); } #endif #endif diff --git a/include/llarp/service/context.hpp b/include/llarp/service/context.hpp index 7319627b3..8221423ed 100644 --- a/include/llarp/service/context.hpp +++ b/include/llarp/service/context.hpp @@ -19,6 +19,10 @@ namespace llarp void Tick(); + /// DRY refactor + llarp::service::Endpoint * + getFirstEndpoint(); + /// DRY refactor llarp::handlers::TunEndpoint * getFirstTun(); diff --git a/llarp/context.cpp b/llarp/context.cpp index 8bed81fcb..33739cf56 100644 --- a/llarp/context.cpp +++ b/llarp/context.cpp @@ -11,6 +11,7 @@ #include "router.hpp" #include "dnsd.hpp" +#include "dns_dotlokilookup.hpp" #if(__FreeBSD__) || (__OpenBSD__) || (__NetBSD__) #include @@ -124,7 +125,7 @@ namespace llarp Context::PutDatabase(struct llarp::RouterContact *rc) { // FIXME - //return llarp_nodedb_put_rc(nodedb, rc); + // return llarp_nodedb_put_rc(nodedb, rc); return false; } @@ -132,7 +133,7 @@ namespace llarp Context::GetDatabase(const byte_t *pk) { // FIXME - //return llarp_nodedb_get_rc(nodedb, pk); + // return llarp_nodedb_get_rc(nodedb, pk); return nullptr; } @@ -337,42 +338,50 @@ extern "C" bool llarp_main_init_dnsd(struct llarp_main *ptr, struct dnsd_context *dnsd, - uint16_t server_port, const char *upstream_host, - uint16_t upstream_port) + struct llarp_logic *logic, uint16_t server_port, + const char *upstream_host, uint16_t upstream_port) { - return llarp_dnsd_init(dnsd, ptr->ctx->mainloop, ptr->ctx->logic, "*", + return llarp_dnsd_init(dnsd, ptr->ctx->logic, ptr->ctx->mainloop, "*", server_port, upstream_host, upstream_port); } + bool + llarp_main_init_dotLokiLookup(struct llarp_main *ptr, + struct dotLokiLookup *dll) + { + dll->logic = ptr->ctx->logic; + return true; + } + void llarp_main_free(struct llarp_main *ptr) { delete ptr; } -int -llarp_main_loadDatabase(struct llarp_main *ptr) -{ - return ptr->ctx->LoadDatabase(); -} + int + llarp_main_loadDatabase(struct llarp_main *ptr) + { + return ptr->ctx->LoadDatabase(); + } -int -llarp_main_iterateDatabase(struct llarp_main *ptr, struct llarp_nodedb_iter i) -{ - return ptr->ctx->IterateDatabase(i); -} + int + llarp_main_iterateDatabase(struct llarp_main *ptr, struct llarp_nodedb_iter i) + { + return ptr->ctx->IterateDatabase(i); + } -bool -llarp_main_putDatabase(struct llarp_main *ptr, llarp::RouterContact *rc) -{ - return ptr->ctx->PutDatabase(rc); -} + bool + llarp_main_putDatabase(struct llarp_main *ptr, llarp::RouterContact *rc) + { + return ptr->ctx->PutDatabase(rc); + } -llarp::RouterContact * -llarp_main_getDatabase(struct llarp_main *ptr, byte_t *pk) -{ - return ptr->ctx->GetDatabase(pk); -} + llarp::RouterContact * + llarp_main_getDatabase(struct llarp_main *ptr, byte_t *pk) + { + return ptr->ctx->GetDatabase(pk); + } llarp::RouterContact * llarp_main_getLocalRC(struct llarp_main *ptr) @@ -384,86 +393,95 @@ llarp_main_getDatabase(struct llarp_main *ptr, byte_t *pk) iter.visit = &iter_config; llarp_config_iter(ctx->config, &iter); */ - //llarp_rc *rc = new llarp_rc; + // llarp_rc *rc = new llarp_rc; llarp::RouterContact *rc = new llarp::RouterContact; - //llarp_rc_new(rc); - //llarp::LogInfo("FIXME: Loading ", ptr->ctx->conatctFile); + // llarp_rc_new(rc); + // llarp::LogInfo("FIXME: Loading ", ptr->ctx->conatctFile); // FIXME /* if(llarp_rc_read(ptr->ctx->conatctFile, rc)) return rc; else */ - return nullptr; + return nullptr; } -void -llarp_main_checkOnline(void *u, uint64_t orig, uint64_t left) -{ - // llarp::Info("checkOnline - check ", left); - if(left) - return; - struct check_online_request *request = - static_cast< struct check_online_request * >(u); - // llarp::Debug("checkOnline - running"); - // llarp::Info("checkOnline - DHT nodes ", - // request->ptr->ctx->router->dht->impl.nodes->nodes.size()); - request->online = false; - request->nodes = request->ptr->ctx->router->dht->impl.nodes->nodes.size(); - if(request->ptr->ctx->router->dht->impl.nodes->nodes.size()) - { - // llarp::Info("checkOnline - Going to say we're online"); - request->online = true; - } - request->hook(request); - // reschedue our self - llarp_main_queryDHT(request); -} + void + llarp_main_checkOnline(void *u, uint64_t orig, uint64_t left) + { + // llarp::Info("checkOnline - check ", left); + if(left) + return; + struct check_online_request *request = + static_cast< struct check_online_request * >(u); + // llarp::Debug("checkOnline - running"); + // llarp::Info("checkOnline - DHT nodes ", + // request->ptr->ctx->router->dht->impl.nodes->nodes.size()); + request->online = false; + request->nodes = request->ptr->ctx->router->dht->impl.nodes->nodes.size(); + if(request->ptr->ctx->router->dht->impl.nodes->nodes.size()) + { + // llarp::Info("checkOnline - Going to say we're online"); + request->online = true; + } + request->hook(request); + // reschedue our self + llarp_main_queryDHT(request); + } -void -llarp_main_queryDHT_online(struct check_online_request *request) -{ - // Info("llarp_main_queryDHT_online: ", request->online ? "online" : - // "offline"); - if(request->online && !request->first) + void + llarp_main_queryDHT_online(struct check_online_request *request) { - request->first = true; - llarp::LogInfo("llarp_main_queryDHT_online - We're online"); - llarp::LogInfo("llarp_main_queryDHT_online - Querying DHT"); - llarp_dht_lookup_router(request->ptr->ctx->router->dht, request->job); + // Info("llarp_main_queryDHT_online: ", request->online ? "online" : + // "offline"); + if(request->online && !request->first) + { + request->first = true; + llarp::LogInfo("llarp_main_queryDHT_online - We're online"); + llarp::LogInfo("llarp_main_queryDHT_online - Querying DHT"); + llarp_dht_lookup_router(request->ptr->ctx->router->dht, request->job); + } } -} -void -llarp_main_queryDHT(struct check_online_request *request) -{ - // llarp::Info("llarp_main_queryDHT - setting up timer"); - request->hook = &llarp_main_queryDHT_online; - llarp_logic_call_later(request->ptr->ctx->router->logic, - {1000, request, &llarp_main_checkOnline}); - // llarp_dht_lookup_router(ptr->ctx->router->dht, job); -} + void + llarp_main_queryDHT(struct check_online_request *request) + { + // llarp::Info("llarp_main_queryDHT - setting up timer"); + request->hook = &llarp_main_queryDHT_online; + llarp_logic_call_later(request->ptr->ctx->router->logic, + {1000, request, &llarp_main_checkOnline}); + // llarp_dht_lookup_router(ptr->ctx->router->dht, job); + } -bool -main_router_mapAddress(struct llarp_main *ptr, const llarp::service::Address &addr, uint32_t ip) -{ - auto *endpoint = &ptr->ctx->router->hiddenServiceContext; - return endpoint->MapAddress(addr, ip); -} + bool + main_router_mapAddress(struct llarp_main *ptr, + const llarp::service::Address &addr, uint32_t ip) + { + auto *endpoint = &ptr->ctx->router->hiddenServiceContext; + return endpoint->MapAddress(addr, ip); + } -bool -main_router_prefetch(struct llarp_main *ptr, const llarp::service::Address &addr) -{ - auto *endpoint = &ptr->ctx->router->hiddenServiceContext; - return endpoint->Prefetch(addr); -} + bool + main_router_prefetch(struct llarp_main *ptr, + const llarp::service::Address &addr) + { + auto *endpoint = &ptr->ctx->router->hiddenServiceContext; + return endpoint->Prefetch(addr); + } -llarp_tun_io * -main_router_getRange(struct llarp_main *ptr) -{ - auto *endpoint = &ptr->ctx->router->hiddenServiceContext; - return endpoint->getRange(); -} + llarp::handlers::TunEndpoint * + main_router_getFirstTunEndpoint(struct llarp_main *ptr) + { + auto *endpoint = &ptr->ctx->router->hiddenServiceContext; + return endpoint->getFirstTun(); + } + + llarp_tun_io * + main_router_getRange(struct llarp_main *ptr) + { + auto *endpoint = &ptr->ctx->router->hiddenServiceContext; + return endpoint->getRange(); + } const char * handleBaseCmdLineArgs(int argc, char *argv[]) diff --git a/llarp/service/context.cpp b/llarp/service/context.cpp index 1c597b9a9..13d5b248c 100644 --- a/llarp/service/context.cpp +++ b/llarp/service/context.cpp @@ -31,18 +31,29 @@ namespace llarp } } - llarp::handlers::TunEndpoint * - Context::getFirstTun() + llarp::service::Endpoint * + Context::getFirstEndpoint() { - if (!m_Endpoints.size()) + if(!m_Endpoints.size()) { llarp::LogError("No endpoints found"); return nullptr; } - auto firstEndpoint = m_Endpoints.begin(); + auto firstEndpoint = m_Endpoints.begin(); auto *uniqueEndpoint = &firstEndpoint->second; - llarp::service::Endpoint *endpointer = uniqueEndpoint->get(); - llarp::handlers::TunEndpoint *tunEndpoint = dynamic_cast(endpointer); + return uniqueEndpoint->get(); + } + + llarp::handlers::TunEndpoint * + Context::getFirstTun() + { + llarp::service::Endpoint *endpointer = this->getFirstEndpoint(); + if(!endpointer) + { + return nullptr; + } + llarp::handlers::TunEndpoint *tunEndpoint = + dynamic_cast< llarp::handlers::TunEndpoint * >(endpointer); return tunEndpoint; } @@ -50,7 +61,7 @@ namespace llarp Context::getRange() { llarp::handlers::TunEndpoint *tunEndpoint = this->getFirstTun(); - if (!tunEndpoint) + if(!tunEndpoint) { llarp::LogError("No tunnel endpoint found"); return nullptr; @@ -62,28 +73,32 @@ namespace llarp Context::Prefetch(const llarp::service::Address &addr) { llarp::handlers::TunEndpoint *tunEndpoint = this->getFirstTun(); - if (!tunEndpoint) + if(!tunEndpoint) { llarp::LogError("No tunnel endpoint found"); return false; } - //HiddenServiceAddresslookup *lookup = new HiddenServiceEndpoint(tunEndpoint, callback, addr, tunEndpoint->GenTXID()); - return tunEndpoint->EnsurePathToService(addr, [](Address addr, void* ctx) {}, 10000); + // HiddenServiceAddresslookup *lookup = new + // HiddenServiceEndpoint(tunEndpoint, callback, addr, + // tunEndpoint->GenTXID()); + return tunEndpoint->EnsurePathToService( + addr, [](Address addr, void *ctx) {}, 10000); } bool Context::MapAddress(const llarp::service::Address &addr, uint32_t ip) { - if (!m_Endpoints.size()) + if(!m_Endpoints.size()) { llarp::LogError("No endpoints found"); return false; } - auto firstEndpoint = m_Endpoints.begin(); - auto *uniqueEndpoint = &firstEndpoint->second; + auto firstEndpoint = m_Endpoints.begin(); + auto *uniqueEndpoint = &firstEndpoint->second; llarp::service::Endpoint *endpointer = uniqueEndpoint->get(); - llarp::handlers::TunEndpoint *tunEndpoint = dynamic_cast(endpointer); - if (!tunEndpoint) + llarp::handlers::TunEndpoint *tunEndpoint = + dynamic_cast< llarp::handlers::TunEndpoint * >(endpointer); + if(!tunEndpoint) { llarp::LogError("No tunnel endpoint found"); return false;