mirror of
https://github.com/oxen-io/lokinet.git
synced 2024-11-17 15:25:35 +00:00
cc1bcf86fa
Adds a fallback bootstrap file path parameter to CMake, specify -DBOOTSTRAP_SYSTEM_PATH="/path/to/file" to use. Adds a list of (currently 1) obsolete bootstrap RouterIDs to check bootstrap RCs against. Will not use bootstrap RCs if they're on that list. Log an error periodically if we appear to be an active service node but have fewer than a set number (5) known peers. Bumps oxen-logging version for literal _format.
71 lines
1.5 KiB
C++
71 lines
1.5 KiB
C++
#include "bootstrap.hpp"
|
|
#include "util/bencode.hpp"
|
|
#include "util/logging.hpp"
|
|
#include "util/logging/buffer.hpp"
|
|
|
|
namespace llarp
|
|
{
|
|
void
|
|
BootstrapList::Clear()
|
|
{
|
|
clear();
|
|
}
|
|
|
|
bool
|
|
BootstrapList::BDecode(llarp_buffer_t* buf)
|
|
{
|
|
return bencode_read_list(
|
|
[&](llarp_buffer_t* b, bool more) -> bool {
|
|
if (more)
|
|
{
|
|
RouterContact rc{};
|
|
if (not rc.BDecode(b))
|
|
{
|
|
LogError("invalid rc in bootstrap list: ", llarp::buffer_printer{*b});
|
|
return false;
|
|
}
|
|
emplace(std::move(rc));
|
|
}
|
|
return true;
|
|
},
|
|
buf);
|
|
}
|
|
|
|
bool
|
|
BootstrapList::BEncode(llarp_buffer_t* buf) const
|
|
{
|
|
return BEncodeWriteList(begin(), end(), buf);
|
|
}
|
|
|
|
void
|
|
BootstrapList::AddFromFile(fs::path fpath)
|
|
{
|
|
bool isListFile = false;
|
|
{
|
|
std::ifstream inf(fpath.c_str(), std::ios::binary);
|
|
if (inf.is_open())
|
|
{
|
|
const char ch = inf.get();
|
|
isListFile = ch == 'l';
|
|
}
|
|
}
|
|
if (isListFile)
|
|
{
|
|
if (not BDecodeReadFile(fpath, *this))
|
|
{
|
|
throw std::runtime_error{fmt::format("failed to read bootstrap list file '{}'", fpath)};
|
|
}
|
|
}
|
|
else
|
|
{
|
|
RouterContact rc;
|
|
if (not rc.Read(fpath))
|
|
{
|
|
throw std::runtime_error{
|
|
fmt::format("failed to decode bootstrap RC, file='{}', rc={}", fpath, rc)};
|
|
}
|
|
this->insert(rc);
|
|
}
|
|
}
|
|
} // namespace llarp
|