mirror of
https://github.com/oxen-io/lokinet.git
synced 2024-10-31 09:20:21 +00:00
259114b51d
certain files needed to include either fstream and our shim for std::filesystem. this includes fstream into our shim and includes this shim in places that require fstream. this is done because some toolchains (cough cough broke af arch linux amalgums) can have weird subsets of the requirements of C++17 that overlap, except when they dont, denoted by unknowable undisclosed circumstances. this issue was reported by a user in the wild, and this fixes it.
72 lines
1.5 KiB
C++
72 lines
1.5 KiB
C++
#include "bootstrap.hpp"
|
|
#include "util/bencode.hpp"
|
|
#include "util/logging.hpp"
|
|
#include "util/logging/buffer.hpp"
|
|
#include "util/fs.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
|