Skip to content
Snippets Groups Projects

First unit tests

Merged Leon Dietrich requested to merge first_unit_tests into master
Compare and Show latest version
2 files
+ 48
1
Compare changes
  • Side-by-side
  • Inline
Files
2
@@ -13,6 +13,8 @@
#include <netinet/in.h>
#include <netdb.h>
#include <net/address.hpp>
namespace rmrf::net {
std::string format_network_error(int error) {
@@ -67,9 +69,44 @@ namespace rmrf::net {
}
return true;
}
bool is_plain_ip_address(const std::string& interface_description) {
if(interface_description.starts_with("[") && interface_description.ends_with("]") && is_valid_ip6addr(interface_description.substr(1, interface_description.length() - 2).c_str())) {
return true;
}
return is_valid_ip4addr(interface_description.c_str()) || is_valid_ip6addr(interface_description.c_str());
}
socketaddr parse_plain_ip_address(const std::string& interface_description, const uint16_t port, const socket_t socket_type) {
if(interface_description.find(':') != std::string::npos) {
// Assume IPv6
struct in6_addr addr;
if (interface_description.starts_with("[") && interface_description.ends_with("]")) {
details::inet6_aton(interface_description.substr(1, interface_description.length() - 2).c_str(), addr);
}
details::inet6_aton(interface_description.c_str(), addr);
sockaddr_in6 addr_ip6;
addr_ip6.sin6_family = AF_INET6;
addr_ip6.sin6_addr = addr;
addr_ip6.sin6_port = htons(port);
socketaddr sa{addr_ip6};
return sa;
} else {
sockaddr_in addr_ip4;
addr_ip4.sin_family = AF_INET;
addr_ip4.sin_addr.s_addr = inet_aton(interface_description.c_str());
addr_ip4.sin_port = htons(80);
socketaddr sa{addr_ip4};
return sa;
}
}
std::list<socketaddr> get_socketaddr_list(const std::string& interface_description, const uint16_t port, const socket_t socket_type) {
// TODO handle lookup of multiple addresses
if(is_plain_ip_address(interface_description)) {
std::list<socketaddr> l = {parse_plain_ip_address(interface_description, port, socket_type)};
return l;
}
struct addrinfo hints = {};
struct addrinfo* addrs;
hints.ai_family = AF_INET6;
Loading