From dfe71309f179838145c948ff8e75d2f14f591828 Mon Sep 17 00:00:00 2001 From: Stephen Shelton Date: Mon, 11 May 2020 10:14:07 -0600 Subject: [PATCH] Add to/from in6_addr to SockAddr --- llarp/net/address_info.cpp | 14 ++++++++++++-- llarp/net/sock_addr.cpp | 17 +++++++++++++++++ llarp/net/sock_addr.hpp | 4 ++++ 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/llarp/net/address_info.cpp b/llarp/net/address_info.cpp index a5830aba4..d49ae31d9 100644 --- a/llarp/net/address_info.cpp +++ b/llarp/net/address_info.cpp @@ -152,13 +152,23 @@ namespace llarp IpAddress AddressInfo::toIpAddress() const { - throw std::runtime_error("FIXME - AddressInfo::toIpAddress()"); + SockAddr addr(ip); + addr.setPort(port); + return IpAddress(addr); } void AddressInfo::fromIpAddress(const IpAddress& address) { - throw std::runtime_error("FIXME - AddressInfo::fromIpAddress()"); + SockAddr addr = address.createSockAddr(); + const sockaddr_in6* addr6 = addr; + memcpy(ip.s6_addr, addr6->sin6_addr.s6_addr, sizeof(ip.s6_addr)); + + auto maybePort = address.getPort(); + if (maybePort) + port = maybePort.value(); + else + port = 0; } std::ostream& diff --git a/llarp/net/sock_addr.cpp b/llarp/net/sock_addr.cpp index 3426acad6..190aaaab5 100644 --- a/llarp/net/sock_addr.cpp +++ b/llarp/net/sock_addr.cpp @@ -120,6 +120,23 @@ namespace llarp return *this; } + SockAddr::SockAddr(const in6_addr& addr) + { + *this = addr; + } + + SockAddr& + SockAddr::operator=(const in6_addr& other) + { + init(); + + memcpy(&m_addr.sin6_addr.s6_addr, &other.s6_addr, sizeof(m_addr.sin6_addr.s6_addr)); + + m_empty = false; + + return *this; + } + SockAddr::operator const sockaddr*() const { return (sockaddr*)&m_addr; diff --git a/llarp/net/sock_addr.hpp b/llarp/net/sock_addr.hpp index cbcd42d8d..f379f5402 100644 --- a/llarp/net/sock_addr.hpp +++ b/llarp/net/sock_addr.hpp @@ -32,6 +32,10 @@ namespace llarp SockAddr& operator=(const sockaddr_in6& addr); + SockAddr(const in6_addr& addr); + SockAddr& + operator=(const in6_addr& addr); + operator const sockaddr*() const; operator const sockaddr_in6*() const;