Skip to content

Commit

Permalink
more code re-use
Browse files Browse the repository at this point in the history
  • Loading branch information
Aidan63 committed Jan 15, 2023
1 parent 79bc76f commit 74f0acc
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 33 deletions.
14 changes: 2 additions & 12 deletions src/hx/libs/asys/libuv/net/LibuvDns.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -60,22 +60,12 @@ void hx::asys::net::dns::resolve(Context ctx, String host, Dynamic cbSuccess, Dy
switch (info->ai_addr->sa_family)
{
case AF_INET: {
auto data = reinterpret_cast<sockaddr_in*>(info->ai_addr);
auto ip = 0;

std::memcpy(&ip, &data->sin_addr, sizeof(IN_ADDR));

ips->Add(hx::asys::libuv::create(HX_CSTRING("INET"), 0, 1)->_hx_init(0, ip));
ips->Add(hx::asys::libuv::net::ip_from_sockaddr(reinterpret_cast<sockaddr_in*>(info->ai_addr)));
break;
}

case AF_INET6: {
auto data = reinterpret_cast<sockaddr_in6*>(info->ai_addr);
auto bytes = new Array_obj<uint8_t>(0, 0);

bytes->memcpy(0, reinterpret_cast<uint8_t*>(&data->sin6_addr), sizeof(IN6_ADDR));

ips->Add(hx::asys::libuv::create(HX_CSTRING("INET6"), 1, 1)->_hx_init(0, bytes));
ips->Add(hx::asys::libuv::net::ip_from_sockaddr(reinterpret_cast<sockaddr_in6*>(info->ai_addr)));
break;
}

Expand Down
35 changes: 29 additions & 6 deletions src/hx/libs/asys/libuv/net/LibuvIp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,26 +8,49 @@ String hx::asys::net::ip::name(const int ip)
{
auto addr = hx::asys::libuv::net::sockaddr_from_int(ip);
auto buffer = std::array<char, UV_IF_NAMESIZE>();
if (0 > uv_ip4_name(&addr, buffer.data(), buffer.size()))
if (uv_ip4_name(&addr, buffer.data(), buffer.size()) >= 0)
{
return null();
return String::create(buffer.data());
}
else
{
return String::create(buffer.data());
return null();
}
}

String hx::asys::net::ip::name(const Array<uint8_t> ip)
{
auto addr = hx::asys::libuv::net::sockaddr_from_data(ip);
auto buffer = std::array<char, UV_IF_NAMESIZE>();
if (0 > uv_ip6_name(&addr, buffer.data(), buffer.size()))
if (uv_ip6_name(&addr, buffer.data(), buffer.size()) >= 0)
{
return null();
return String::create(buffer.data());
}
else
{
return String::create(buffer.data());
return null();
}
}

hx::EnumBase hx::asys::net::ip::parse(const String ip)
{
auto str = ip.utf8_str();

{
auto addr = sockaddr_in();
if (uv_ip4_addr(str, 0, &addr) >= 0)
{
return hx::asys::libuv::net::ip_from_sockaddr(&addr);
}
}

{
auto addr = sockaddr_in6();
if (uv_ip6_addr(str, 0, &addr) >= 0)
{
return hx::asys::libuv::net::ip_from_sockaddr(&addr);
}
}

return null();
}
46 changes: 31 additions & 15 deletions src/hx/libs/asys/libuv/net/NetUtils.cpp
Original file line number Diff line number Diff line change
@@ -1,26 +1,42 @@
#include <hxcpp.h>
#include "NetUtils.h"
#include "../LibuvUtils.h"
#include <memory>

namespace hx::asys::libuv::net
sockaddr_in hx::asys::libuv::net::sockaddr_from_int(const int ip)
{
sockaddr_in sockaddr_from_int(const int ip)
{
auto addr = sockaddr_in();
addr.sin_family = AF_INET;
auto addr = sockaddr_in();
addr.sin_family = AF_INET;

std::memcpy(&addr.sin_addr, &ip, sizeof(int));
std::memcpy(&addr.sin_addr, &ip, sizeof(int));

return addr;
}
return addr;
}

sockaddr_in6 hx::asys::libuv::net::sockaddr_from_data(const Array<uint8_t> ip)
{
auto addr = sockaddr_in6();
addr.sin6_family = AF_INET6;

std::memcpy(&addr.sin6_addr, ip->getBase(), ip->size());

return addr;
}

sockaddr_in6 sockaddr_from_data(const Array<uint8_t> ip)
{
auto addr = sockaddr_in6();
addr.sin6_family = AF_INET6;
hx::EnumBase hx::asys::libuv::net::ip_from_sockaddr(sockaddr_in* addr)
{
auto ip = 0;

std::memcpy(&ip, &addr->sin_addr, sizeof(IN_ADDR));

return hx::asys::libuv::create(HX_CSTRING("INET"), 0, 1)->_hx_init(0, ip);
}

hx::EnumBase hx::asys::libuv::net::ip_from_sockaddr(sockaddr_in6* addr)
{
auto bytes = new Array_obj<uint8_t>(0, 0);

std::memcpy(&addr.sin6_addr, ip->getBase(), ip->size());
bytes->memcpy(0, reinterpret_cast<uint8_t*>(&addr->sin6_addr), sizeof(IN6_ADDR));

return addr;
}
return hx::asys::libuv::create(HX_CSTRING("INET6"), 1, 1)->_hx_init(0, bytes);
}
4 changes: 4 additions & 0 deletions src/hx/libs/asys/libuv/net/NetUtils.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,8 @@ namespace hx::asys::libuv::net
sockaddr_in sockaddr_from_int(int ip);

sockaddr_in6 sockaddr_from_data(const Array<uint8_t> ip);

hx::EnumBase ip_from_sockaddr(sockaddr_in* addr);

hx::EnumBase ip_from_sockaddr(sockaddr_in6* addr);
}

0 comments on commit 74f0acc

Please sign in to comment.