do dht lookup for unknown routers

This commit is contained in:
Jeff Becker 2018-06-14 11:10:31 -04:00
parent 1288148999
commit 6e5ebd62bf
No known key found for this signature in database
GPG Key ID: F357B3B42F6F9B05
3 changed files with 26 additions and 7 deletions

View File

@ -630,8 +630,8 @@ llarp_dht_context_start(struct llarp_dht_context *ctx, const byte_t *key)
}
void
llarp_dh_lookup_router(struct llarp_dht_context *ctx,
struct llarp_router_lookup_job *job)
llarp_dht_lookup_router(struct llarp_dht_context *ctx,
struct llarp_router_lookup_job *job)
{
job->dht = ctx;
llarp_logic_queue_job(ctx->parent->logic,

View File

@ -104,14 +104,30 @@ llarp_router::HandleAsyncLoadRCForSendTo(llarp_async_load_rc *job)
}
else
{
// we don't have the RC locally
// TODO: dht lookup
// discard pending messages
router->DiscardOutboundFor(job->pubkey);
// we don't have the RC locally so do a dht lookup
llarp_router_lookup_job *lookup = new llarp_router_lookup_job;
lookup->user = router;
memcpy(lookup->target, job->rc.pubkey, PUBKEYSIZE);
lookup->hook = &HandleDHTLookupForSendTo;
llarp_dht_lookup_router(router->dht, lookup);
}
}
void
llarp_router::HandleDHTLookupForSendTo(llarp_router_lookup_job *job)
{
llarp_router *self = static_cast< llarp_router * >(job->user);
if(job->found)
{
llarp_router_try_connect(self, &job->result, 10);
}
else
{
self->DiscardOutboundFor(job->target);
}
delete job;
}
void
llarp_router::try_connect(fs::path rcfile)
{

View File

@ -193,6 +193,9 @@ struct llarp_router
static void
HandleAsyncLoadRCForSendTo(llarp_async_load_rc *async);
static void
HandleDHTLookupForSendTo(llarp_router_lookup_job *job);
};
#endif