2021-03-09 22:24:35 +00:00
|
|
|
#include "bootstrap.hpp"
|
|
|
|
#include "util/bencode.hpp"
|
2022-07-16 00:41:14 +00:00
|
|
|
#include "util/logging.hpp"
|
2021-09-20 22:40:29 +00:00
|
|
|
#include "util/logging/buffer.hpp"
|
2022-11-08 16:01:38 +00:00
|
|
|
#include "util/fs.hpp"
|
2019-12-06 17:32:46 +00:00
|
|
|
|
|
|
|
namespace llarp
|
|
|
|
{
|
|
|
|
void
|
|
|
|
BootstrapList::Clear()
|
|
|
|
{
|
|
|
|
clear();
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
BootstrapList::BDecode(llarp_buffer_t* buf)
|
|
|
|
{
|
|
|
|
return bencode_read_list(
|
|
|
|
[&](llarp_buffer_t* b, bool more) -> bool {
|
2020-04-07 18:38:56 +00:00
|
|
|
if (more)
|
2019-12-06 17:32:46 +00:00
|
|
|
{
|
2021-09-20 22:40:29 +00:00
|
|
|
RouterContact rc{};
|
2020-04-07 18:38:56 +00:00
|
|
|
if (not rc.BDecode(b))
|
2021-09-20 22:40:29 +00:00
|
|
|
{
|
|
|
|
LogError("invalid rc in bootstrap list: ", llarp::buffer_printer{*b});
|
2019-12-06 17:32:46 +00:00
|
|
|
return false;
|
2021-09-20 22:40:29 +00:00
|
|
|
}
|
2019-12-06 17:32:46 +00:00
|
|
|
emplace(std::move(rc));
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
},
|
|
|
|
buf);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
BootstrapList::BEncode(llarp_buffer_t* buf) const
|
|
|
|
{
|
|
|
|
return BEncodeWriteList(begin(), end(), buf);
|
|
|
|
}
|
2022-09-27 17:00:27 +00:00
|
|
|
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
}
|
2019-12-06 17:32:46 +00:00
|
|
|
} // namespace llarp
|