mirror of
https://github.com/oxen-io/lokinet.git
synced 2024-11-17 15:25:35 +00:00
7caa87862e
All #ifndef guards on headers have been removed, I think, in favor of #pragma once Headers are now included as `#include "filename"` if the included file resides in the same directory as the file including it, or any subdirectory therein. Otherwise they are included as `#include <project/top/dir/relative/path/filename>` The above does not include system/os headers.
115 lines
1.9 KiB
C++
115 lines
1.9 KiB
C++
#include "net_int.hpp"
|
|
#include "ip.hpp"
|
|
#include <string>
|
|
|
|
namespace llarp
|
|
{
|
|
template <>
|
|
huint32_t
|
|
ToHost(nuint32_t n)
|
|
{
|
|
return xntohl(n);
|
|
}
|
|
|
|
template <>
|
|
nuint16_t
|
|
ToNet(huint16_t h)
|
|
{
|
|
return xhtons(h);
|
|
}
|
|
|
|
template <>
|
|
nuint32_t
|
|
ToNet(huint32_t h)
|
|
{
|
|
return xhtonl(h);
|
|
}
|
|
|
|
template <>
|
|
void
|
|
huint32_t::ToV6(V6Container& c)
|
|
{
|
|
c.resize(16);
|
|
std::fill(c.begin(), c.end(), 0);
|
|
htobe32buf(c.data() + 12, h);
|
|
c[11] = 0xff;
|
|
c[10] = 0xff;
|
|
}
|
|
|
|
template <>
|
|
void
|
|
huint128_t::ToV6(V6Container& c)
|
|
{
|
|
c.resize(16);
|
|
const in6_addr addr = net::HUIntToIn6(*this);
|
|
std::copy_n(addr.s6_addr, 16, c.begin());
|
|
}
|
|
|
|
template <>
|
|
std::string
|
|
huint32_t::ToString() const
|
|
{
|
|
uint32_t n = htonl(h);
|
|
char tmp[INET_ADDRSTRLEN] = {0};
|
|
if (!inet_ntop(AF_INET, (void*)&n, tmp, sizeof(tmp)))
|
|
return "";
|
|
return tmp;
|
|
}
|
|
|
|
template <>
|
|
std::string
|
|
huint128_t::ToString() const
|
|
{
|
|
auto addr = ntoh128(h);
|
|
char tmp[INET6_ADDRSTRLEN] = {0};
|
|
if (!inet_ntop(AF_INET6, (void*)&addr, tmp, sizeof(tmp)))
|
|
return "";
|
|
return tmp;
|
|
}
|
|
|
|
template <>
|
|
bool
|
|
huint32_t::FromString(const std::string& str)
|
|
{
|
|
uint32_t n;
|
|
if (!inet_pton(AF_INET, str.c_str(), &n))
|
|
return false;
|
|
h = ntohl(n);
|
|
return true;
|
|
}
|
|
|
|
template <>
|
|
bool
|
|
huint128_t::FromString(const std::string& str)
|
|
{
|
|
llarp::uint128_t i;
|
|
if (!inet_pton(AF_INET6, str.c_str(), &i))
|
|
return false;
|
|
h = ntoh128(i);
|
|
return true;
|
|
}
|
|
|
|
template <>
|
|
std::string
|
|
nuint32_t::ToString() const
|
|
{
|
|
char tmp[INET_ADDRSTRLEN] = {0};
|
|
if (!inet_ntop(AF_INET, (void*)&n, tmp, sizeof(tmp)))
|
|
return "";
|
|
return tmp;
|
|
}
|
|
template <>
|
|
std::string
|
|
huint16_t::ToString() const
|
|
{
|
|
return std::to_string(h);
|
|
}
|
|
|
|
template <>
|
|
std::string
|
|
nuint16_t::ToString() const
|
|
{
|
|
return std::to_string(ntohs(n));
|
|
}
|
|
} // namespace llarp
|