refactor: Make IArchNetwork::EAddressFamily enum class IArchNetwork::AddressFamily
confirm AddressFamily items to naming convention
This commit is contained in:
parent
cbbfd495e3
commit
879283f46f
18 changed files with 82 additions and 66 deletions
|
|
@ -53,11 +53,11 @@ class IArchNetwork : public IInterface
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
//! Supported address families
|
//! Supported address families
|
||||||
enum EAddressFamily
|
enum class AddressFamily : uint8_t
|
||||||
{
|
{
|
||||||
kUNKNOWN,
|
Unknown,
|
||||||
kINET,
|
INet,
|
||||||
kINET6,
|
INet6
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Supported socket types
|
//! Supported socket types
|
||||||
|
|
@ -105,7 +105,7 @@ public:
|
||||||
/*!
|
/*!
|
||||||
The socket is an opaque data type.
|
The socket is an opaque data type.
|
||||||
*/
|
*/
|
||||||
virtual ArchSocket newSocket(EAddressFamily, ESocketType) = 0;
|
virtual ArchSocket newSocket(AddressFamily, ESocketType) = 0;
|
||||||
|
|
||||||
//! Copy a socket object
|
//! Copy a socket object
|
||||||
/*!
|
/*!
|
||||||
|
|
@ -236,7 +236,7 @@ public:
|
||||||
virtual std::string getHostName() = 0;
|
virtual std::string getHostName() = 0;
|
||||||
|
|
||||||
//! Create an "any" network address
|
//! Create an "any" network address
|
||||||
virtual ArchNetAddress newAnyAddr(EAddressFamily) = 0;
|
virtual ArchNetAddress newAnyAddr(AddressFamily) = 0;
|
||||||
|
|
||||||
//! Copy a network address
|
//! Copy a network address
|
||||||
virtual ArchNetAddress copyAddr(ArchNetAddress) = 0;
|
virtual ArchNetAddress copyAddr(ArchNetAddress) = 0;
|
||||||
|
|
@ -254,7 +254,7 @@ public:
|
||||||
virtual std::string addrToString(ArchNetAddress) = 0;
|
virtual std::string addrToString(ArchNetAddress) = 0;
|
||||||
|
|
||||||
//! Get an address's family
|
//! Get an address's family
|
||||||
virtual EAddressFamily getAddrFamily(ArchNetAddress) = 0;
|
virtual AddressFamily getAddrFamily(ArchNetAddress) = 0;
|
||||||
|
|
||||||
//! Set the port of an address
|
//! Set the port of an address
|
||||||
virtual void setAddrPort(ArchNetAddress, int port) = 0;
|
virtual void setAddrPort(ArchNetAddress, int port) = 0;
|
||||||
|
|
|
||||||
|
|
@ -95,10 +95,10 @@ void ArchNetworkBSD::init()
|
||||||
// do nothing
|
// do nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
ArchSocket ArchNetworkBSD::newSocket(EAddressFamily family, ESocketType type)
|
ArchSocket ArchNetworkBSD::newSocket(AddressFamily family, ESocketType type)
|
||||||
{
|
{
|
||||||
// create socket
|
// create socket
|
||||||
int fd = socket(s_family[family], s_type[type], 0);
|
int fd = socket(s_family[static_cast<int>(family)], s_type[type], 0);
|
||||||
if (fd == -1) {
|
if (fd == -1) {
|
||||||
throwError(errno);
|
throwError(errno);
|
||||||
}
|
}
|
||||||
|
|
@ -469,14 +469,16 @@ std::string ArchNetworkBSD::getHostName()
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
ArchNetAddress ArchNetworkBSD::newAnyAddr(EAddressFamily family)
|
ArchNetAddress ArchNetworkBSD::newAnyAddr(AddressFamily family)
|
||||||
{
|
{
|
||||||
|
using enum AddressFamily;
|
||||||
|
|
||||||
// allocate address
|
// allocate address
|
||||||
auto *addr = new ArchNetAddressImpl;
|
auto *addr = new ArchNetAddressImpl;
|
||||||
|
|
||||||
// fill it in
|
// fill it in
|
||||||
switch (family) {
|
switch (family) {
|
||||||
case kINET: {
|
case INet: {
|
||||||
auto *ipAddr = TYPED_ADDR(struct sockaddr_in, addr);
|
auto *ipAddr = TYPED_ADDR(struct sockaddr_in, addr);
|
||||||
ipAddr->sin_family = AF_INET;
|
ipAddr->sin_family = AF_INET;
|
||||||
ipAddr->sin_port = 0;
|
ipAddr->sin_port = 0;
|
||||||
|
|
@ -485,7 +487,7 @@ ArchNetAddress ArchNetworkBSD::newAnyAddr(EAddressFamily family)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case kINET6: {
|
case INet6: {
|
||||||
auto *ipAddr = TYPED_ADDR(struct sockaddr_in6, addr);
|
auto *ipAddr = TYPED_ADDR(struct sockaddr_in6, addr);
|
||||||
ipAddr->sin6_family = AF_INET6;
|
ipAddr->sin6_family = AF_INET6;
|
||||||
ipAddr->sin6_port = 0;
|
ipAddr->sin6_port = 0;
|
||||||
|
|
@ -583,17 +585,19 @@ std::string ArchNetworkBSD::addrToName(ArchNetAddress addr)
|
||||||
|
|
||||||
std::string ArchNetworkBSD::addrToString(ArchNetAddress addr)
|
std::string ArchNetworkBSD::addrToString(ArchNetAddress addr)
|
||||||
{
|
{
|
||||||
|
using enum AddressFamily;
|
||||||
|
|
||||||
assert(addr != nullptr);
|
assert(addr != nullptr);
|
||||||
|
|
||||||
switch (getAddrFamily(addr)) {
|
switch (getAddrFamily(addr)) {
|
||||||
case kINET: {
|
case INet: {
|
||||||
const auto *ipAddr = TYPED_ADDR(struct sockaddr_in, addr);
|
const auto *ipAddr = TYPED_ADDR(struct sockaddr_in, addr);
|
||||||
std::scoped_lock lock{m_mutex};
|
std::scoped_lock lock{m_mutex};
|
||||||
std::string s = inet_ntoa(ipAddr->sin_addr);
|
std::string s = inet_ntoa(ipAddr->sin_addr);
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
case kINET6: {
|
case INet6: {
|
||||||
char strAddr[INET6_ADDRSTRLEN];
|
char strAddr[INET6_ADDRSTRLEN];
|
||||||
const auto *ipAddr = TYPED_ADDR(struct sockaddr_in6, addr);
|
const auto *ipAddr = TYPED_ADDR(struct sockaddr_in6, addr);
|
||||||
{
|
{
|
||||||
|
|
@ -609,33 +613,37 @@ std::string ArchNetworkBSD::addrToString(ArchNetAddress addr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
IArchNetwork::EAddressFamily ArchNetworkBSD::getAddrFamily(ArchNetAddress addr)
|
IArchNetwork::AddressFamily ArchNetworkBSD::getAddrFamily(ArchNetAddress addr)
|
||||||
{
|
{
|
||||||
|
using enum AddressFamily;
|
||||||
|
|
||||||
assert(addr != nullptr);
|
assert(addr != nullptr);
|
||||||
|
|
||||||
switch (addr->m_addr.ss_family) {
|
switch (addr->m_addr.ss_family) {
|
||||||
case AF_INET:
|
case AF_INET:
|
||||||
return kINET;
|
return INet;
|
||||||
case AF_INET6:
|
case AF_INET6:
|
||||||
return kINET6;
|
return INet6;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return kUNKNOWN;
|
return Unknown;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ArchNetworkBSD::setAddrPort(ArchNetAddress addr, int port)
|
void ArchNetworkBSD::setAddrPort(ArchNetAddress addr, int port)
|
||||||
{
|
{
|
||||||
|
using enum AddressFamily;
|
||||||
|
|
||||||
assert(addr != nullptr);
|
assert(addr != nullptr);
|
||||||
|
|
||||||
switch (getAddrFamily(addr)) {
|
switch (getAddrFamily(addr)) {
|
||||||
case kINET: {
|
case INet: {
|
||||||
auto *ipAddr = TYPED_ADDR(struct sockaddr_in, addr);
|
auto *ipAddr = TYPED_ADDR(struct sockaddr_in, addr);
|
||||||
ipAddr->sin_port = htons(port);
|
ipAddr->sin_port = htons(port);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case kINET6: {
|
case INet6: {
|
||||||
auto *ipAddr = TYPED_ADDR(struct sockaddr_in6, addr);
|
auto *ipAddr = TYPED_ADDR(struct sockaddr_in6, addr);
|
||||||
ipAddr->sin6_port = htons(port);
|
ipAddr->sin6_port = htons(port);
|
||||||
break;
|
break;
|
||||||
|
|
@ -649,15 +657,17 @@ void ArchNetworkBSD::setAddrPort(ArchNetAddress addr, int port)
|
||||||
|
|
||||||
int ArchNetworkBSD::getAddrPort(ArchNetAddress addr)
|
int ArchNetworkBSD::getAddrPort(ArchNetAddress addr)
|
||||||
{
|
{
|
||||||
|
using enum AddressFamily;
|
||||||
|
|
||||||
assert(addr != nullptr);
|
assert(addr != nullptr);
|
||||||
|
|
||||||
switch (getAddrFamily(addr)) {
|
switch (getAddrFamily(addr)) {
|
||||||
case kINET: {
|
case INet: {
|
||||||
const auto *ipAddr = TYPED_ADDR(struct sockaddr_in, addr);
|
const auto *ipAddr = TYPED_ADDR(struct sockaddr_in, addr);
|
||||||
return ntohs(ipAddr->sin_port);
|
return ntohs(ipAddr->sin_port);
|
||||||
}
|
}
|
||||||
|
|
||||||
case kINET6: {
|
case INet6: {
|
||||||
const auto *ipAddr = TYPED_ADDR(struct sockaddr_in6, addr);
|
const auto *ipAddr = TYPED_ADDR(struct sockaddr_in6, addr);
|
||||||
return ntohs(ipAddr->sin6_port);
|
return ntohs(ipAddr->sin6_port);
|
||||||
}
|
}
|
||||||
|
|
@ -670,15 +680,17 @@ int ArchNetworkBSD::getAddrPort(ArchNetAddress addr)
|
||||||
|
|
||||||
bool ArchNetworkBSD::isAnyAddr(ArchNetAddress addr)
|
bool ArchNetworkBSD::isAnyAddr(ArchNetAddress addr)
|
||||||
{
|
{
|
||||||
|
using enum AddressFamily;
|
||||||
|
|
||||||
assert(addr != nullptr);
|
assert(addr != nullptr);
|
||||||
|
|
||||||
switch (getAddrFamily(addr)) {
|
switch (getAddrFamily(addr)) {
|
||||||
case kINET: {
|
case INet: {
|
||||||
const auto *ipAddr = TYPED_ADDR(struct sockaddr_in, addr);
|
const auto *ipAddr = TYPED_ADDR(struct sockaddr_in, addr);
|
||||||
return (ipAddr->sin_addr.s_addr == INADDR_ANY && addr->m_len == static_cast<socklen_t>(sizeof(struct sockaddr_in)));
|
return (ipAddr->sin_addr.s_addr == INADDR_ANY && addr->m_len == static_cast<socklen_t>(sizeof(struct sockaddr_in)));
|
||||||
}
|
}
|
||||||
|
|
||||||
case kINET6: {
|
case INet6: {
|
||||||
const auto *ipAddr = TYPED_ADDR(struct sockaddr_in6, addr);
|
const auto *ipAddr = TYPED_ADDR(struct sockaddr_in6, addr);
|
||||||
return (
|
return (
|
||||||
addr->m_len == (socklen_t)sizeof(struct sockaddr_in6) &&
|
addr->m_len == (socklen_t)sizeof(struct sockaddr_in6) &&
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,7 @@ public:
|
||||||
void init() override;
|
void init() override;
|
||||||
|
|
||||||
// IArchNetwork overrides
|
// IArchNetwork overrides
|
||||||
ArchSocket newSocket(EAddressFamily, ESocketType) override;
|
ArchSocket newSocket(AddressFamily, ESocketType) override;
|
||||||
ArchSocket copySocket(ArchSocket s) override;
|
ArchSocket copySocket(ArchSocket s) override;
|
||||||
void closeSocket(ArchSocket s) override;
|
void closeSocket(ArchSocket s) override;
|
||||||
void closeSocketForRead(ArchSocket s) override;
|
void closeSocketForRead(ArchSocket s) override;
|
||||||
|
|
@ -88,13 +88,13 @@ public:
|
||||||
bool setNoDelayOnSocket(ArchSocket, bool noDelay) override;
|
bool setNoDelayOnSocket(ArchSocket, bool noDelay) override;
|
||||||
bool setReuseAddrOnSocket(ArchSocket, bool reuse) override;
|
bool setReuseAddrOnSocket(ArchSocket, bool reuse) override;
|
||||||
std::string getHostName() override;
|
std::string getHostName() override;
|
||||||
ArchNetAddress newAnyAddr(EAddressFamily) override;
|
ArchNetAddress newAnyAddr(AddressFamily) override;
|
||||||
ArchNetAddress copyAddr(ArchNetAddress) override;
|
ArchNetAddress copyAddr(ArchNetAddress) override;
|
||||||
std::vector<ArchNetAddress> nameToAddr(const std::string &) override;
|
std::vector<ArchNetAddress> nameToAddr(const std::string &) override;
|
||||||
void closeAddr(ArchNetAddress) override;
|
void closeAddr(ArchNetAddress) override;
|
||||||
std::string addrToName(ArchNetAddress) override;
|
std::string addrToName(ArchNetAddress) override;
|
||||||
std::string addrToString(ArchNetAddress) override;
|
std::string addrToString(ArchNetAddress) override;
|
||||||
EAddressFamily getAddrFamily(ArchNetAddress) override;
|
AddressFamily getAddrFamily(ArchNetAddress) override;
|
||||||
void setAddrPort(ArchNetAddress, int port) override;
|
void setAddrPort(ArchNetAddress, int port) override;
|
||||||
int getAddrPort(ArchNetAddress) override;
|
int getAddrPort(ArchNetAddress) override;
|
||||||
bool isAnyAddr(ArchNetAddress) override;
|
bool isAnyAddr(ArchNetAddress) override;
|
||||||
|
|
|
||||||
|
|
@ -192,10 +192,10 @@ void ArchNetworkWinsock::initModule(HMODULE module)
|
||||||
s_networkModule = module;
|
s_networkModule = module;
|
||||||
}
|
}
|
||||||
|
|
||||||
ArchSocket ArchNetworkWinsock::newSocket(EAddressFamily family, ESocketType type)
|
ArchSocket ArchNetworkWinsock::newSocket(AddressFamily family, ESocketType type)
|
||||||
{
|
{
|
||||||
// create socket
|
// create socket
|
||||||
SOCKET fd = socket_winsock(s_family[family], s_type[type], 0);
|
SOCKET fd = socket_winsock(s_family[static_cast<int>(family)], s_type[type], 0);
|
||||||
if (fd == INVALID_SOCKET) {
|
if (fd == INVALID_SOCKET) {
|
||||||
throwError(getsockerror_winsock());
|
throwError(getsockerror_winsock());
|
||||||
}
|
}
|
||||||
|
|
@ -636,11 +636,11 @@ std::string ArchNetworkWinsock::getHostName()
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
ArchNetAddress ArchNetworkWinsock::newAnyAddr(EAddressFamily family)
|
ArchNetAddress ArchNetworkWinsock::newAnyAddr(AddressFamily family)
|
||||||
{
|
{
|
||||||
ArchNetAddressImpl *addr = nullptr;
|
ArchNetAddressImpl *addr = nullptr;
|
||||||
switch (family) {
|
switch (family) {
|
||||||
case kINET: {
|
case AddressFamily::INet: {
|
||||||
addr = ArchNetAddressImpl::alloc(sizeof(struct sockaddr_in));
|
addr = ArchNetAddressImpl::alloc(sizeof(struct sockaddr_in));
|
||||||
struct sockaddr_in *ipAddr = TYPED_ADDR(struct sockaddr_in, addr);
|
struct sockaddr_in *ipAddr = TYPED_ADDR(struct sockaddr_in, addr);
|
||||||
ipAddr->sin_family = AF_INET;
|
ipAddr->sin_family = AF_INET;
|
||||||
|
|
@ -649,7 +649,7 @@ ArchNetAddress ArchNetworkWinsock::newAnyAddr(EAddressFamily family)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case kINET6: {
|
case AddressFamily::INet6: {
|
||||||
addr = ArchNetAddressImpl::alloc(sizeof(struct sockaddr_in6));
|
addr = ArchNetAddressImpl::alloc(sizeof(struct sockaddr_in6));
|
||||||
struct sockaddr_in6 *ipAddr = TYPED_ADDR(struct sockaddr_in6, addr);
|
struct sockaddr_in6 *ipAddr = TYPED_ADDR(struct sockaddr_in6, addr);
|
||||||
ipAddr->sin6_family = AF_INET6;
|
ipAddr->sin6_family = AF_INET6;
|
||||||
|
|
@ -734,12 +734,12 @@ std::string ArchNetworkWinsock::addrToString(ArchNetAddress addr)
|
||||||
assert(addr != nullptr);
|
assert(addr != nullptr);
|
||||||
|
|
||||||
switch (getAddrFamily(addr)) {
|
switch (getAddrFamily(addr)) {
|
||||||
case kINET: {
|
case AddressFamily::INet: {
|
||||||
struct sockaddr_in *ipAddr = TYPED_ADDR(struct sockaddr_in, addr);
|
struct sockaddr_in *ipAddr = TYPED_ADDR(struct sockaddr_in, addr);
|
||||||
return inet_ntoa_winsock(ipAddr->sin_addr);
|
return inet_ntoa_winsock(ipAddr->sin_addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
case kINET6: {
|
case AddressFamily::INet6: {
|
||||||
char strAddr[INET6_ADDRSTRLEN];
|
char strAddr[INET6_ADDRSTRLEN];
|
||||||
struct sockaddr_in6 *ipAddr = TYPED_ADDR(struct sockaddr_in6, addr);
|
struct sockaddr_in6 *ipAddr = TYPED_ADDR(struct sockaddr_in6, addr);
|
||||||
inet_ntop(AF_INET6, &ipAddr->sin6_addr, strAddr, INET6_ADDRSTRLEN);
|
inet_ntop(AF_INET6, &ipAddr->sin6_addr, strAddr, INET6_ADDRSTRLEN);
|
||||||
|
|
@ -752,19 +752,19 @@ std::string ArchNetworkWinsock::addrToString(ArchNetAddress addr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
IArchNetwork::EAddressFamily ArchNetworkWinsock::getAddrFamily(ArchNetAddress addr)
|
IArchNetwork::AddressFamily ArchNetworkWinsock::getAddrFamily(ArchNetAddress addr)
|
||||||
{
|
{
|
||||||
assert(addr != nullptr);
|
assert(addr != nullptr);
|
||||||
|
|
||||||
switch (addr->m_addr.ss_family) {
|
switch (addr->m_addr.ss_family) {
|
||||||
case AF_INET:
|
case AF_INET:
|
||||||
return kINET;
|
return AddressFamily::INet;
|
||||||
|
|
||||||
case AF_INET6:
|
case AF_INET6:
|
||||||
return kINET6;
|
return AddressFamily::INet6;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return kUNKNOWN;
|
return AddressFamily::Unknown;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -773,13 +773,13 @@ void ArchNetworkWinsock::setAddrPort(ArchNetAddress addr, int port)
|
||||||
assert(addr != nullptr);
|
assert(addr != nullptr);
|
||||||
|
|
||||||
switch (getAddrFamily(addr)) {
|
switch (getAddrFamily(addr)) {
|
||||||
case kINET: {
|
case AddressFamily::INet: {
|
||||||
struct sockaddr_in *ipAddr = TYPED_ADDR(struct sockaddr_in, addr);
|
struct sockaddr_in *ipAddr = TYPED_ADDR(struct sockaddr_in, addr);
|
||||||
ipAddr->sin_port = htons_winsock(static_cast<u_short>(port));
|
ipAddr->sin_port = htons_winsock(static_cast<u_short>(port));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case kINET6: {
|
case AddressFamily::INet6: {
|
||||||
struct sockaddr_in6 *ipAddr = TYPED_ADDR(struct sockaddr_in6, addr);
|
struct sockaddr_in6 *ipAddr = TYPED_ADDR(struct sockaddr_in6, addr);
|
||||||
ipAddr->sin6_port = htons_winsock(static_cast<u_short>(port));
|
ipAddr->sin6_port = htons_winsock(static_cast<u_short>(port));
|
||||||
break;
|
break;
|
||||||
|
|
@ -796,12 +796,12 @@ int ArchNetworkWinsock::getAddrPort(ArchNetAddress addr)
|
||||||
assert(addr != nullptr);
|
assert(addr != nullptr);
|
||||||
|
|
||||||
switch (getAddrFamily(addr)) {
|
switch (getAddrFamily(addr)) {
|
||||||
case kINET: {
|
case AddressFamily::INet: {
|
||||||
struct sockaddr_in *ipAddr = TYPED_ADDR(struct sockaddr_in, addr);
|
struct sockaddr_in *ipAddr = TYPED_ADDR(struct sockaddr_in, addr);
|
||||||
return ntohs_winsock(ipAddr->sin_port);
|
return ntohs_winsock(ipAddr->sin_port);
|
||||||
}
|
}
|
||||||
|
|
||||||
case kINET6: {
|
case AddressFamily::INet6: {
|
||||||
struct sockaddr_in6 *ipAddr = TYPED_ADDR(struct sockaddr_in6, addr);
|
struct sockaddr_in6 *ipAddr = TYPED_ADDR(struct sockaddr_in6, addr);
|
||||||
return ntohs_winsock(ipAddr->sin6_port);
|
return ntohs_winsock(ipAddr->sin6_port);
|
||||||
}
|
}
|
||||||
|
|
@ -817,12 +817,12 @@ bool ArchNetworkWinsock::isAnyAddr(ArchNetAddress addr)
|
||||||
assert(addr != nullptr);
|
assert(addr != nullptr);
|
||||||
|
|
||||||
switch (getAddrFamily(addr)) {
|
switch (getAddrFamily(addr)) {
|
||||||
case kINET: {
|
case AddressFamily::INet: {
|
||||||
struct sockaddr_in *ipAddr = TYPED_ADDR(struct sockaddr_in, addr);
|
struct sockaddr_in *ipAddr = TYPED_ADDR(struct sockaddr_in, addr);
|
||||||
return (addr->m_len == sizeof(struct sockaddr_in) && ipAddr->sin_addr.s_addr == INADDR_ANY);
|
return (addr->m_len == sizeof(struct sockaddr_in) && ipAddr->sin_addr.s_addr == INADDR_ANY);
|
||||||
}
|
}
|
||||||
|
|
||||||
case kINET6: {
|
case AddressFamily::INet6: {
|
||||||
struct sockaddr_in6 *ipAddr = TYPED_ADDR(struct sockaddr_in6, addr);
|
struct sockaddr_in6 *ipAddr = TYPED_ADDR(struct sockaddr_in6, addr);
|
||||||
return (
|
return (
|
||||||
addr->m_len == sizeof(struct sockaddr_in) && memcmp(&ipAddr->sin6_addr, &in6addr_any, sizeof(in6addr_any)) == 0
|
addr->m_len == sizeof(struct sockaddr_in) && memcmp(&ipAddr->sin6_addr, &in6addr_any, sizeof(in6addr_any)) == 0
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,7 @@ public:
|
||||||
void init() override;
|
void init() override;
|
||||||
|
|
||||||
// IArchNetwork overrides
|
// IArchNetwork overrides
|
||||||
ArchSocket newSocket(EAddressFamily, ESocketType) override;
|
ArchSocket newSocket(AddressFamily, ESocketType) override;
|
||||||
ArchSocket copySocket(ArchSocket s) override;
|
ArchSocket copySocket(ArchSocket s) override;
|
||||||
void closeSocket(ArchSocket s) override;
|
void closeSocket(ArchSocket s) override;
|
||||||
void closeSocketForRead(ArchSocket s) override;
|
void closeSocketForRead(ArchSocket s) override;
|
||||||
|
|
@ -75,13 +75,13 @@ public:
|
||||||
bool setNoDelayOnSocket(ArchSocket, bool noDelay) override;
|
bool setNoDelayOnSocket(ArchSocket, bool noDelay) override;
|
||||||
bool setReuseAddrOnSocket(ArchSocket, bool reuse) override;
|
bool setReuseAddrOnSocket(ArchSocket, bool reuse) override;
|
||||||
std::string getHostName() override;
|
std::string getHostName() override;
|
||||||
ArchNetAddress newAnyAddr(EAddressFamily) override;
|
ArchNetAddress newAnyAddr(AddressFamily) override;
|
||||||
ArchNetAddress copyAddr(ArchNetAddress) override;
|
ArchNetAddress copyAddr(ArchNetAddress) override;
|
||||||
std::vector<ArchNetAddress> nameToAddr(const std::string &) override;
|
std::vector<ArchNetAddress> nameToAddr(const std::string &) override;
|
||||||
void closeAddr(ArchNetAddress) override;
|
void closeAddr(ArchNetAddress) override;
|
||||||
std::string addrToName(ArchNetAddress) override;
|
std::string addrToName(ArchNetAddress) override;
|
||||||
std::string addrToString(ArchNetAddress) override;
|
std::string addrToString(ArchNetAddress) override;
|
||||||
EAddressFamily getAddrFamily(ArchNetAddress) override;
|
AddressFamily getAddrFamily(ArchNetAddress) override;
|
||||||
void setAddrPort(ArchNetAddress, int port) override;
|
void setAddrPort(ArchNetAddress, int port) override;
|
||||||
int getAddrPort(ArchNetAddress) override;
|
int getAddrPort(ArchNetAddress) override;
|
||||||
bool isAnyAddr(ArchNetAddress) override;
|
bool isAnyAddr(ArchNetAddress) override;
|
||||||
|
|
|
||||||
|
|
@ -28,12 +28,14 @@ public:
|
||||||
|
|
||||||
//! Create data socket
|
//! Create data socket
|
||||||
virtual IDataSocket *create(
|
virtual IDataSocket *create(
|
||||||
IArchNetwork::EAddressFamily family = IArchNetwork::kINET, SecurityLevel securityLevel = SecurityLevel::PlainText
|
IArchNetwork::AddressFamily family = IArchNetwork::AddressFamily::INet,
|
||||||
|
SecurityLevel securityLevel = SecurityLevel::PlainText
|
||||||
) const = 0;
|
) const = 0;
|
||||||
|
|
||||||
//! Create listen socket
|
//! Create listen socket
|
||||||
virtual IListenSocket *createListen(
|
virtual IListenSocket *createListen(
|
||||||
IArchNetwork::EAddressFamily family = IArchNetwork::kINET, SecurityLevel securityLevel = SecurityLevel::PlainText
|
IArchNetwork::AddressFamily family = IArchNetwork::AddressFamily::INet,
|
||||||
|
SecurityLevel securityLevel = SecurityLevel::PlainText
|
||||||
) const = 0;
|
) const = 0;
|
||||||
|
|
||||||
//@}
|
//@}
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@
|
||||||
NetworkAddress::NetworkAddress(int port) : m_port(port)
|
NetworkAddress::NetworkAddress(int port) : m_port(port)
|
||||||
{
|
{
|
||||||
checkPort();
|
checkPort();
|
||||||
m_address = ARCH->newAnyAddr(IArchNetwork::kINET);
|
m_address = ARCH->newAnyAddr(IArchNetwork::AddressFamily::INet);
|
||||||
ARCH->setAddrPort(m_address, m_port);
|
ARCH->setAddrPort(m_address, m_port);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -125,7 +125,7 @@ size_t NetworkAddress::resolve(size_t index)
|
||||||
// if hostname is empty then use wildcard address otherwise look
|
// if hostname is empty then use wildcard address otherwise look
|
||||||
// up the name.
|
// up the name.
|
||||||
if (m_hostname.empty()) {
|
if (m_hostname.empty()) {
|
||||||
m_address = ARCH->newAnyAddr(IArchNetwork::kINET);
|
m_address = ARCH->newAnyAddr(IArchNetwork::AddressFamily::INet);
|
||||||
resolvedAddressesCount = 1;
|
resolvedAddressesCount = 1;
|
||||||
} else {
|
} else {
|
||||||
// Logic for temporary filtring only ipv4 addresses
|
// Logic for temporary filtring only ipv4 addresses
|
||||||
|
|
@ -133,7 +133,7 @@ size_t NetworkAddress::resolve(size_t index)
|
||||||
{
|
{
|
||||||
auto addresses = ARCH->nameToAddr(m_hostname);
|
auto addresses = ARCH->nameToAddr(m_hostname);
|
||||||
for (auto address : addresses) {
|
for (auto address : addresses) {
|
||||||
if (ARCH->getAddrFamily(address) == IArchNetwork::kINET) {
|
if (ARCH->getAddrFamily(address) == IArchNetwork::AddressFamily::INet) {
|
||||||
ipv4OnlyAddresses.emplace_back(address);
|
ipv4OnlyAddresses.emplace_back(address);
|
||||||
} else {
|
} else {
|
||||||
ARCH->closeAddr(address);
|
ARCH->closeAddr(address);
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
SecureListenSocket::SecureListenSocket(
|
SecureListenSocket::SecureListenSocket(
|
||||||
IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::EAddressFamily family,
|
IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::AddressFamily family,
|
||||||
SecurityLevel securityLevel
|
SecurityLevel securityLevel
|
||||||
)
|
)
|
||||||
: TCPListenSocket(events, socketMultiplexer, family),
|
: TCPListenSocket(events, socketMultiplexer, family),
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ class SecureListenSocket : public TCPListenSocket
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SecureListenSocket(
|
SecureListenSocket(
|
||||||
IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::EAddressFamily family,
|
IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::AddressFamily family,
|
||||||
SecurityLevel securityLevel = SecurityLevel::PlainText
|
SecurityLevel securityLevel = SecurityLevel::PlainText
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ static int verifyIgnoreCertCallback(X509_STORE_CTX *, void *)
|
||||||
}
|
}
|
||||||
|
|
||||||
SecureSocket::SecureSocket(
|
SecureSocket::SecureSocket(
|
||||||
IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::EAddressFamily family,
|
IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::AddressFamily family,
|
||||||
SecurityLevel securityLevel
|
SecurityLevel securityLevel
|
||||||
)
|
)
|
||||||
: TCPSocket(events, socketMultiplexer, family),
|
: TCPSocket(events, socketMultiplexer, family),
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ class SecureSocket : public TCPSocket
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SecureSocket(
|
SecureSocket(
|
||||||
IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::EAddressFamily family,
|
IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::AddressFamily family,
|
||||||
SecurityLevel securityLevel = SecurityLevel::Encrypted
|
SecurityLevel securityLevel = SecurityLevel::Encrypted
|
||||||
);
|
);
|
||||||
SecureSocket(
|
SecureSocket(
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
TCPListenSocket::TCPListenSocket(
|
TCPListenSocket::TCPListenSocket(
|
||||||
IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::EAddressFamily family
|
IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::AddressFamily family
|
||||||
)
|
)
|
||||||
: m_events(events),
|
: m_events(events),
|
||||||
m_socketMultiplexer(socketMultiplexer)
|
m_socketMultiplexer(socketMultiplexer)
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ A listen socket using TCP.
|
||||||
class TCPListenSocket : public IListenSocket
|
class TCPListenSocket : public IListenSocket
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TCPListenSocket(IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::EAddressFamily family);
|
TCPListenSocket(IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::AddressFamily family);
|
||||||
TCPListenSocket(TCPListenSocket const &) = delete;
|
TCPListenSocket(TCPListenSocket const &) = delete;
|
||||||
TCPListenSocket(TCPListenSocket &&) = delete;
|
TCPListenSocket(TCPListenSocket &&) = delete;
|
||||||
~TCPListenSocket() override;
|
~TCPListenSocket() override;
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ static const std::size_t MAX_INPUT_BUFFER_SIZE = 1024 * 1024;
|
||||||
// TCPSocket
|
// TCPSocket
|
||||||
//
|
//
|
||||||
|
|
||||||
TCPSocket::TCPSocket(IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::EAddressFamily family)
|
TCPSocket::TCPSocket(IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::AddressFamily family)
|
||||||
: IDataSocket(events),
|
: IDataSocket(events),
|
||||||
m_events(events),
|
m_events(events),
|
||||||
m_flushed(&m_mutex, true),
|
m_flushed(&m_mutex, true),
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ class TCPSocket : public IDataSocket
|
||||||
public:
|
public:
|
||||||
TCPSocket(
|
TCPSocket(
|
||||||
IEventQueue *events, SocketMultiplexer *socketMultiplexer,
|
IEventQueue *events, SocketMultiplexer *socketMultiplexer,
|
||||||
IArchNetwork::EAddressFamily family = IArchNetwork::kINET
|
IArchNetwork::AddressFamily family = IArchNetwork::AddressFamily::INet
|
||||||
);
|
);
|
||||||
TCPSocket(IEventQueue *events, SocketMultiplexer *socketMultiplexer, ArchSocket socket);
|
TCPSocket(IEventQueue *events, SocketMultiplexer *socketMultiplexer, ArchSocket socket);
|
||||||
TCPSocket(TCPSocket const &) = delete;
|
TCPSocket(TCPSocket const &) = delete;
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ TCPSocketFactory::TCPSocketFactory(IEventQueue *events, SocketMultiplexer *socke
|
||||||
// do nothing
|
// do nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
IDataSocket *TCPSocketFactory::create(IArchNetwork::EAddressFamily family, SecurityLevel securityLevel) const
|
IDataSocket *TCPSocketFactory::create(IArchNetwork::AddressFamily family, SecurityLevel securityLevel) const
|
||||||
{
|
{
|
||||||
if (securityLevel != SecurityLevel::PlainText) {
|
if (securityLevel != SecurityLevel::PlainText) {
|
||||||
auto *secureSocket = new SecureSocket(m_events, m_socketMultiplexer, family, securityLevel);
|
auto *secureSocket = new SecureSocket(m_events, m_socketMultiplexer, family, securityLevel);
|
||||||
|
|
@ -36,7 +36,7 @@ IDataSocket *TCPSocketFactory::create(IArchNetwork::EAddressFamily family, Secur
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
IListenSocket *TCPSocketFactory::createListen(IArchNetwork::EAddressFamily family, SecurityLevel securityLevel) const
|
IListenSocket *TCPSocketFactory::createListen(IArchNetwork::AddressFamily family, SecurityLevel securityLevel) const
|
||||||
{
|
{
|
||||||
IListenSocket *socket = nullptr;
|
IListenSocket *socket = nullptr;
|
||||||
if (securityLevel != SecurityLevel::PlainText) {
|
if (securityLevel != SecurityLevel::PlainText) {
|
||||||
|
|
|
||||||
|
|
@ -23,10 +23,12 @@ public:
|
||||||
|
|
||||||
// ISocketFactory overrides
|
// ISocketFactory overrides
|
||||||
IDataSocket *create(
|
IDataSocket *create(
|
||||||
IArchNetwork::EAddressFamily family = IArchNetwork::kINET, SecurityLevel securityLevel = SecurityLevel::PlainText
|
IArchNetwork::AddressFamily family = IArchNetwork::AddressFamily::INet,
|
||||||
|
SecurityLevel securityLevel = SecurityLevel::PlainText
|
||||||
) const override;
|
) const override;
|
||||||
IListenSocket *createListen(
|
IListenSocket *createListen(
|
||||||
IArchNetwork::EAddressFamily family = IArchNetwork::kINET, SecurityLevel securityLevel = SecurityLevel::PlainText
|
IArchNetwork::AddressFamily family = IArchNetwork::AddressFamily::INet,
|
||||||
|
SecurityLevel securityLevel = SecurityLevel::PlainText
|
||||||
) const override;
|
) const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
||||||
|
|
@ -186,7 +186,7 @@ TEST(ArchNetworkBSDTests, isAnyAddr_goodAddress_returnsTrue)
|
||||||
auto deps = MockDeps::makeNice();
|
auto deps = MockDeps::makeNice();
|
||||||
ArchNetworkBSD networkBSD(deps);
|
ArchNetworkBSD networkBSD(deps);
|
||||||
std::unique_ptr<ArchNetAddressImpl> addr;
|
std::unique_ptr<ArchNetAddressImpl> addr;
|
||||||
addr.reset(networkBSD.newAnyAddr(IArchNetwork::kINET6));
|
addr.reset(networkBSD.newAnyAddr(IArchNetwork::AddressFamily::INet6));
|
||||||
|
|
||||||
auto result = networkBSD.isAnyAddr(addr.get());
|
auto result = networkBSD.isAnyAddr(addr.get());
|
||||||
|
|
||||||
|
|
@ -198,7 +198,7 @@ TEST(ArchNetworkBSDTests, isAnyAddr_badAddress_returnsFalse)
|
||||||
auto deps = MockDeps::makeNice();
|
auto deps = MockDeps::makeNice();
|
||||||
ArchNetworkBSD networkBSD(deps);
|
ArchNetworkBSD networkBSD(deps);
|
||||||
std::unique_ptr<ArchNetAddressImpl> addr;
|
std::unique_ptr<ArchNetAddressImpl> addr;
|
||||||
addr.reset(networkBSD.newAnyAddr(IArchNetwork::kINET6));
|
addr.reset(networkBSD.newAnyAddr(IArchNetwork::AddressFamily::INet6));
|
||||||
auto scratch = (char *)&addr->m_addr;
|
auto scratch = (char *)&addr->m_addr;
|
||||||
std::string badAddr = "badaddr";
|
std::string badAddr = "badaddr";
|
||||||
std::ranges::copy(badAddr, scratch + 2);
|
std::ranges::copy(badAddr, scratch + 2);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue