do not gossip client RCs!

pull/2232/head
dr7ana 5 months ago
parent 9b37b5b63e
commit 8e9dce1940

@ -792,14 +792,17 @@ namespace llarp
assert(_router.is_service_node());
log::critical(logcat, "Handling fetch bootstrap fetch request...");
RemoteRC remote;
std::optional<RemoteRC> remote;
size_t quantity;
try
{
oxenc::bt_dict_consumer btdc{m.body()};
btdc.required("local");
remote = RemoteRC{btdc.consume_dict_data()};
if (btdc.skip_until("local"))
remote.emplace(btdc.consume_dict_data());
// btdc.required("local");
// remote = RemoteRC{btdc.consume_dict_data()};
quantity = btdc.require<size_t>("quantity");
}
catch (const std::exception& e)
@ -808,27 +811,30 @@ namespace llarp
m.respond(messages::ERROR_RESPONSE, true);
return;
}
auto is_seed = _router.is_bootstrap_seed();
auto& rid = remote.router_id();
// TODO: if we are not the seed, how do we check the requester
if (is_seed)
if (remote)
{
// we already insert the
auto& registered = node_db->registered_routers();
auto is_snode = _router.is_service_node();
auto& rid = remote->router_id();
if (auto itr = registered.find(rid); itr != registered.end())
if (is_snode)
{
log::critical(
logcat,
"Bootstrap seed confirmed RID:{} is registered; approving fetch request and "
"saving RC!",
rid);
node_db->verify_gossip_bfetch_rc(remote);
// we already insert the
auto& registered = node_db->registered_routers();
if (auto itr = registered.find(rid); itr != registered.end())
{
log::critical(
logcat,
"Bootstrap node confirmed RID:{} is registered; approving fetch request and "
"saving RC!",
rid);
node_db->verify_gossip_bfetch_rc(*remote);
}
}
}
auto& src = node_db->get_known_rcs();
auto count = src.size();

@ -62,12 +62,16 @@ namespace llarp
{
// the LocalRC is converted to a RemoteRC type to send to the bootstrap seed
inline static std::string
serialize(const LocalRC& local_rc, size_t quantity)
serialize(std::optional<LocalRC> local_rc, size_t quantity)
{
oxenc::bt_dict_producer btdp;
btdp.append_encoded("local", oxen::quic::to_sv(local_rc.view()));
log::critical(logcat, "Serializing localRC: {}", oxenc::to_hex(local_rc.view()));
if (local_rc)
btdp.append_encoded("local", oxen::quic::to_sv(local_rc->view()));
log::critical(logcat, "Serializing localRC: {}", oxenc::to_hex(local_rc->view()));
btdp.append("quantity", quantity);
return std::move(btdp).str();
}

@ -653,12 +653,18 @@ namespace llarp
log::critical(logcat, "Dispatching BootstrapRC fetch request to {}", fetch_source);
auto num_needed = _router.is_service_node() ? SERVICE_NODE_BOOTSTRAP_SOURCE_COUNT
auto is_snode = _router.is_service_node();
auto num_needed = is_snode ? SERVICE_NODE_BOOTSTRAP_SOURCE_COUNT
: CLIENT_BOOTSTRAP_SOURCE_COUNT;
_router.link_manager().fetch_bootstrap_rcs(
rc,
BootstrapFetchMessage::serialize(_router.router_contact, num_needed),
BootstrapFetchMessage::serialize(
is_snode ?
std::make_optional(_router.router_contact) :
std::nullopt,
num_needed),
[this, is_snode = _router.is_service_node()](oxen::quic::message m) mutable {
log::critical(logcat, "Received response to BootstrapRC fetch request...");

Loading…
Cancel
Save