use more variants

pull/1576/head
Jeff Becker 3 years ago
parent 9d483a12db
commit fe32475cad
No known key found for this signature in database
GPG Key ID: F357B3B42F6F9B05

@ -53,7 +53,7 @@ namespace llarp
return false;
if (!BEncodeMaybeReadDictList("X", X, read, key, buf))
return false;
return read;
return bencode_discard(buf);
}
bool

@ -70,4 +70,17 @@ namespace llarp::service
CryptoManager::instance()->derive_subkey(k, PubKey(data()), 1);
return dht::Key_t{k.as_array()};
}
std::optional<std::variant<Address, RouterID>>
ParseAddress(std::string_view lokinet_addr)
{
RouterID router{};
service::Address addr{};
if (router.FromString(lokinet_addr))
return router;
if (addr.FromString(lokinet_addr))
return addr;
return std::nullopt;
}
} // namespace llarp::service

@ -8,6 +8,7 @@
#include <numeric>
#include <string>
#include <string_view>
#include <variant>
#include <set>
namespace llarp
@ -91,6 +92,9 @@ namespace llarp
}
};
std::optional<std::variant<Address, RouterID>>
ParseAddress(std::string_view lokinet_addr);
} // namespace service
} // namespace llarp

@ -1444,20 +1444,32 @@ namespace llarp
}
std::optional<ConvoTag>
Endpoint::GetBestConvoTagForService(Address remote) const
Endpoint::GetBestConvoTagFor(std::variant<Address, RouterID> remote) const
{
llarp_time_t time = 0s;
std::optional<ConvoTag> ret = std::nullopt;
// get convotag with higest timestamp
for (const auto& [tag, session] : Sessions())
if (auto ptr = std::get_if<Address>(&remote))
{
if (session.remote.Addr() == remote and session.lastUsed > time)
llarp_time_t time = 0s;
std::optional<ConvoTag> ret = std::nullopt;
for (const auto& [tag, session] : Sessions())
{
time = session.lastUsed;
ret = tag;
if (session.remote.Addr() == *ptr and session.lastUsed > time)
{
time = session.lastUsed;
ret = tag;
}
}
return ret;
}
return ret;
if (auto ptr = std::get_if<RouterID>(&remote))
{
for (const auto& item : m_state->m_SNodeSessions)
{
if (item.first == *ptr)
return item.second.second;
}
}
return std::nullopt;
}
bool
@ -1475,7 +1487,7 @@ namespace llarp
ProtocolFrame& f = transfer->T;
f.R = 0;
std::shared_ptr<path::Path> p;
if (const auto maybe = GetBestConvoTagForService(remote))
if (const auto maybe = GetBestConvoTagFor(remote))
{
// the remote guy's intro
Introduction remoteIntro;

@ -20,6 +20,7 @@
#include <llarp/util/compare_ptr.hpp>
#include <optional>
#include <unordered_map>
#include <variant>
#include "endpoint_types.hpp"
#include "auth.hpp"
@ -93,7 +94,7 @@ namespace llarp
GetIfName() const = 0;
std::optional<ConvoTag>
GetBestConvoTagForService(Address addr) const;
GetBestConvoTagFor(std::variant<Address, RouterID> addr) const;
/// get our ifaddr if it is set
virtual huint128_t

Loading…
Cancel
Save