refactor: Make IArchNetwork::EAddressFamily enum class IArchNetwork::AddressFamily

confirm AddressFamily items to naming convention
This commit is contained in:
sithlord48
2025-06-30 17:36:38 -04:00
committed by Chris Rizzitello
parent cbbfd495e3
commit 879283f46f
18 changed files with 82 additions and 66 deletions

View File

@ -53,11 +53,11 @@ class IArchNetwork : public IInterface
{
public:
//! Supported address families
enum EAddressFamily
enum class AddressFamily : uint8_t
{
kUNKNOWN,
kINET,
kINET6,
Unknown,
INet,
INet6
};
//! Supported socket types
@ -105,7 +105,7 @@ public:
/*!
The socket is an opaque data type.
*/
virtual ArchSocket newSocket(EAddressFamily, ESocketType) = 0;
virtual ArchSocket newSocket(AddressFamily, ESocketType) = 0;
//! Copy a socket object
/*!
@ -236,7 +236,7 @@ public:
virtual std::string getHostName() = 0;
//! Create an "any" network address
virtual ArchNetAddress newAnyAddr(EAddressFamily) = 0;
virtual ArchNetAddress newAnyAddr(AddressFamily) = 0;
//! Copy a network address
virtual ArchNetAddress copyAddr(ArchNetAddress) = 0;
@ -254,7 +254,7 @@ public:
virtual std::string addrToString(ArchNetAddress) = 0;
//! Get an address's family
virtual EAddressFamily getAddrFamily(ArchNetAddress) = 0;
virtual AddressFamily getAddrFamily(ArchNetAddress) = 0;
//! Set the port of an address
virtual void setAddrPort(ArchNetAddress, int port) = 0;

View File

@ -95,10 +95,10 @@ void ArchNetworkBSD::init()
// do nothing
}
ArchSocket ArchNetworkBSD::newSocket(EAddressFamily family, ESocketType type)
ArchSocket ArchNetworkBSD::newSocket(AddressFamily family, ESocketType type)
{
// 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) {
throwError(errno);
}
@ -469,14 +469,16 @@ std::string ArchNetworkBSD::getHostName()
return name;
}
ArchNetAddress ArchNetworkBSD::newAnyAddr(EAddressFamily family)
ArchNetAddress ArchNetworkBSD::newAnyAddr(AddressFamily family)
{
using enum AddressFamily;
// allocate address
auto *addr = new ArchNetAddressImpl;
// fill it in
switch (family) {
case kINET: {
case INet: {
auto *ipAddr = TYPED_ADDR(struct sockaddr_in, addr);
ipAddr->sin_family = AF_INET;
ipAddr->sin_port = 0;
@ -485,7 +487,7 @@ ArchNetAddress ArchNetworkBSD::newAnyAddr(EAddressFamily family)
break;
}
case kINET6: {
case INet6: {
auto *ipAddr = TYPED_ADDR(struct sockaddr_in6, addr);
ipAddr->sin6_family = AF_INET6;
ipAddr->sin6_port = 0;
@ -583,17 +585,19 @@ std::string ArchNetworkBSD::addrToName(ArchNetAddress addr)
std::string ArchNetworkBSD::addrToString(ArchNetAddress addr)
{
using enum AddressFamily;
assert(addr != nullptr);
switch (getAddrFamily(addr)) {
case kINET: {
case INet: {
const auto *ipAddr = TYPED_ADDR(struct sockaddr_in, addr);
std::scoped_lock lock{m_mutex};
std::string s = inet_ntoa(ipAddr->sin_addr);
return s;
}
case kINET6: {
case INet6: {
char strAddr[INET6_ADDRSTRLEN];
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);
switch (addr->m_addr.ss_family) {
case AF_INET:
return kINET;
return INet;
case AF_INET6:
return kINET6;
return INet6;
default:
return kUNKNOWN;
return Unknown;
}
}
void ArchNetworkBSD::setAddrPort(ArchNetAddress addr, int port)
{
using enum AddressFamily;
assert(addr != nullptr);
switch (getAddrFamily(addr)) {
case kINET: {
case INet: {
auto *ipAddr = TYPED_ADDR(struct sockaddr_in, addr);
ipAddr->sin_port = htons(port);
break;
}
case kINET6: {
case INet6: {
auto *ipAddr = TYPED_ADDR(struct sockaddr_in6, addr);
ipAddr->sin6_port = htons(port);
break;
@ -649,15 +657,17 @@ void ArchNetworkBSD::setAddrPort(ArchNetAddress addr, int port)
int ArchNetworkBSD::getAddrPort(ArchNetAddress addr)
{
using enum AddressFamily;
assert(addr != nullptr);
switch (getAddrFamily(addr)) {
case kINET: {
case INet: {
const auto *ipAddr = TYPED_ADDR(struct sockaddr_in, addr);
return ntohs(ipAddr->sin_port);
}
case kINET6: {
case INet6: {
const auto *ipAddr = TYPED_ADDR(struct sockaddr_in6, addr);
return ntohs(ipAddr->sin6_port);
}
@ -670,15 +680,17 @@ int ArchNetworkBSD::getAddrPort(ArchNetAddress addr)
bool ArchNetworkBSD::isAnyAddr(ArchNetAddress addr)
{
using enum AddressFamily;
assert(addr != nullptr);
switch (getAddrFamily(addr)) {
case kINET: {
case INet: {
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)));
}
case kINET6: {
case INet6: {
const auto *ipAddr = TYPED_ADDR(struct sockaddr_in6, addr);
return (
addr->m_len == (socklen_t)sizeof(struct sockaddr_in6) &&

View File

@ -71,7 +71,7 @@ public:
void init() override;
// IArchNetwork overrides
ArchSocket newSocket(EAddressFamily, ESocketType) override;
ArchSocket newSocket(AddressFamily, ESocketType) override;
ArchSocket copySocket(ArchSocket s) override;
void closeSocket(ArchSocket s) override;
void closeSocketForRead(ArchSocket s) override;
@ -88,13 +88,13 @@ public:
bool setNoDelayOnSocket(ArchSocket, bool noDelay) override;
bool setReuseAddrOnSocket(ArchSocket, bool reuse) override;
std::string getHostName() override;
ArchNetAddress newAnyAddr(EAddressFamily) override;
ArchNetAddress newAnyAddr(AddressFamily) override;
ArchNetAddress copyAddr(ArchNetAddress) override;
std::vector<ArchNetAddress> nameToAddr(const std::string &) override;
void closeAddr(ArchNetAddress) override;
std::string addrToName(ArchNetAddress) override;
std::string addrToString(ArchNetAddress) override;
EAddressFamily getAddrFamily(ArchNetAddress) override;
AddressFamily getAddrFamily(ArchNetAddress) override;
void setAddrPort(ArchNetAddress, int port) override;
int getAddrPort(ArchNetAddress) override;
bool isAnyAddr(ArchNetAddress) override;

View File

@ -192,10 +192,10 @@ void ArchNetworkWinsock::initModule(HMODULE module)
s_networkModule = module;
}
ArchSocket ArchNetworkWinsock::newSocket(EAddressFamily family, ESocketType type)
ArchSocket ArchNetworkWinsock::newSocket(AddressFamily family, ESocketType type)
{
// 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) {
throwError(getsockerror_winsock());
}
@ -636,11 +636,11 @@ std::string ArchNetworkWinsock::getHostName()
return name;
}
ArchNetAddress ArchNetworkWinsock::newAnyAddr(EAddressFamily family)
ArchNetAddress ArchNetworkWinsock::newAnyAddr(AddressFamily family)
{
ArchNetAddressImpl *addr = nullptr;
switch (family) {
case kINET: {
case AddressFamily::INet: {
addr = ArchNetAddressImpl::alloc(sizeof(struct sockaddr_in));
struct sockaddr_in *ipAddr = TYPED_ADDR(struct sockaddr_in, addr);
ipAddr->sin_family = AF_INET;
@ -649,7 +649,7 @@ ArchNetAddress ArchNetworkWinsock::newAnyAddr(EAddressFamily family)
break;
}
case kINET6: {
case AddressFamily::INet6: {
addr = ArchNetAddressImpl::alloc(sizeof(struct sockaddr_in6));
struct sockaddr_in6 *ipAddr = TYPED_ADDR(struct sockaddr_in6, addr);
ipAddr->sin6_family = AF_INET6;
@ -734,12 +734,12 @@ std::string ArchNetworkWinsock::addrToString(ArchNetAddress addr)
assert(addr != nullptr);
switch (getAddrFamily(addr)) {
case kINET: {
case AddressFamily::INet: {
struct sockaddr_in *ipAddr = TYPED_ADDR(struct sockaddr_in, addr);
return inet_ntoa_winsock(ipAddr->sin_addr);
}
case kINET6: {
case AddressFamily::INet6: {
char strAddr[INET6_ADDRSTRLEN];
struct sockaddr_in6 *ipAddr = TYPED_ADDR(struct sockaddr_in6, addr);
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);
switch (addr->m_addr.ss_family) {
case AF_INET:
return kINET;
return AddressFamily::INet;
case AF_INET6:
return kINET6;
return AddressFamily::INet6;
default:
return kUNKNOWN;
return AddressFamily::Unknown;
}
}
@ -773,13 +773,13 @@ void ArchNetworkWinsock::setAddrPort(ArchNetAddress addr, int port)
assert(addr != nullptr);
switch (getAddrFamily(addr)) {
case kINET: {
case AddressFamily::INet: {
struct sockaddr_in *ipAddr = TYPED_ADDR(struct sockaddr_in, addr);
ipAddr->sin_port = htons_winsock(static_cast<u_short>(port));
break;
}
case kINET6: {
case AddressFamily::INet6: {
struct sockaddr_in6 *ipAddr = TYPED_ADDR(struct sockaddr_in6, addr);
ipAddr->sin6_port = htons_winsock(static_cast<u_short>(port));
break;
@ -796,12 +796,12 @@ int ArchNetworkWinsock::getAddrPort(ArchNetAddress addr)
assert(addr != nullptr);
switch (getAddrFamily(addr)) {
case kINET: {
case AddressFamily::INet: {
struct sockaddr_in *ipAddr = TYPED_ADDR(struct sockaddr_in, addr);
return ntohs_winsock(ipAddr->sin_port);
}
case kINET6: {
case AddressFamily::INet6: {
struct sockaddr_in6 *ipAddr = TYPED_ADDR(struct sockaddr_in6, addr);
return ntohs_winsock(ipAddr->sin6_port);
}
@ -817,12 +817,12 @@ bool ArchNetworkWinsock::isAnyAddr(ArchNetAddress addr)
assert(addr != nullptr);
switch (getAddrFamily(addr)) {
case kINET: {
case AddressFamily::INet: {
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);
}
case kINET6: {
case AddressFamily::INet6: {
struct sockaddr_in6 *ipAddr = TYPED_ADDR(struct sockaddr_in6, addr);
return (
addr->m_len == sizeof(struct sockaddr_in) && memcmp(&ipAddr->sin6_addr, &in6addr_any, sizeof(in6addr_any)) == 0

View File

@ -58,7 +58,7 @@ public:
void init() override;
// IArchNetwork overrides
ArchSocket newSocket(EAddressFamily, ESocketType) override;
ArchSocket newSocket(AddressFamily, ESocketType) override;
ArchSocket copySocket(ArchSocket s) override;
void closeSocket(ArchSocket s) override;
void closeSocketForRead(ArchSocket s) override;
@ -75,13 +75,13 @@ public:
bool setNoDelayOnSocket(ArchSocket, bool noDelay) override;
bool setReuseAddrOnSocket(ArchSocket, bool reuse) override;
std::string getHostName() override;
ArchNetAddress newAnyAddr(EAddressFamily) override;
ArchNetAddress newAnyAddr(AddressFamily) override;
ArchNetAddress copyAddr(ArchNetAddress) override;
std::vector<ArchNetAddress> nameToAddr(const std::string &) override;
void closeAddr(ArchNetAddress) override;
std::string addrToName(ArchNetAddress) override;
std::string addrToString(ArchNetAddress) override;
EAddressFamily getAddrFamily(ArchNetAddress) override;
AddressFamily getAddrFamily(ArchNetAddress) override;
void setAddrPort(ArchNetAddress, int port) override;
int getAddrPort(ArchNetAddress) override;
bool isAnyAddr(ArchNetAddress) override;

View File

@ -28,12 +28,14 @@ public:
//! Create data socket
virtual IDataSocket *create(
IArchNetwork::EAddressFamily family = IArchNetwork::kINET, SecurityLevel securityLevel = SecurityLevel::PlainText
IArchNetwork::AddressFamily family = IArchNetwork::AddressFamily::INet,
SecurityLevel securityLevel = SecurityLevel::PlainText
) const = 0;
//! Create listen socket
virtual IListenSocket *createListen(
IArchNetwork::EAddressFamily family = IArchNetwork::kINET, SecurityLevel securityLevel = SecurityLevel::PlainText
IArchNetwork::AddressFamily family = IArchNetwork::AddressFamily::INet,
SecurityLevel securityLevel = SecurityLevel::PlainText
) const = 0;
//@}

View File

@ -23,7 +23,7 @@
NetworkAddress::NetworkAddress(int port) : m_port(port)
{
checkPort();
m_address = ARCH->newAnyAddr(IArchNetwork::kINET);
m_address = ARCH->newAnyAddr(IArchNetwork::AddressFamily::INet);
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
// up the name.
if (m_hostname.empty()) {
m_address = ARCH->newAnyAddr(IArchNetwork::kINET);
m_address = ARCH->newAnyAddr(IArchNetwork::AddressFamily::INet);
resolvedAddressesCount = 1;
} else {
// Logic for temporary filtring only ipv4 addresses
@ -133,7 +133,7 @@ size_t NetworkAddress::resolve(size_t index)
{
auto addresses = ARCH->nameToAddr(m_hostname);
for (auto address : addresses) {
if (ARCH->getAddrFamily(address) == IArchNetwork::kINET) {
if (ARCH->getAddrFamily(address) == IArchNetwork::AddressFamily::INet) {
ipv4OnlyAddresses.emplace_back(address);
} else {
ARCH->closeAddr(address);

View File

@ -22,7 +22,7 @@
//
SecureListenSocket::SecureListenSocket(
IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::EAddressFamily family,
IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::AddressFamily family,
SecurityLevel securityLevel
)
: TCPListenSocket(events, socketMultiplexer, family),

View File

@ -20,7 +20,7 @@ class SecureListenSocket : public TCPListenSocket
{
public:
SecureListenSocket(
IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::EAddressFamily family,
IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::AddressFamily family,
SecurityLevel securityLevel = SecurityLevel::PlainText
);

View File

@ -55,7 +55,7 @@ static int verifyIgnoreCertCallback(X509_STORE_CTX *, void *)
}
SecureSocket::SecureSocket(
IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::EAddressFamily family,
IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::AddressFamily family,
SecurityLevel securityLevel
)
: TCPSocket(events, socketMultiplexer, family),

View File

@ -30,7 +30,7 @@ class SecureSocket : public TCPSocket
{
public:
SecureSocket(
IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::EAddressFamily family,
IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::AddressFamily family,
SecurityLevel securityLevel = SecurityLevel::Encrypted
);
SecureSocket(

View File

@ -23,7 +23,7 @@
//
TCPListenSocket::TCPListenSocket(
IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::EAddressFamily family
IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::AddressFamily family
)
: m_events(events),
m_socketMultiplexer(socketMultiplexer)

View File

@ -23,7 +23,7 @@ A listen socket using TCP.
class TCPListenSocket : public IListenSocket
{
public:
TCPListenSocket(IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::EAddressFamily family);
TCPListenSocket(IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::AddressFamily family);
TCPListenSocket(TCPListenSocket const &) = delete;
TCPListenSocket(TCPListenSocket &&) = delete;
~TCPListenSocket() override;

View File

@ -27,7 +27,7 @@ static const std::size_t MAX_INPUT_BUFFER_SIZE = 1024 * 1024;
// TCPSocket
//
TCPSocket::TCPSocket(IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::EAddressFamily family)
TCPSocket::TCPSocket(IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::AddressFamily family)
: IDataSocket(events),
m_events(events),
m_flushed(&m_mutex, true),

View File

@ -28,7 +28,7 @@ class TCPSocket : public IDataSocket
public:
TCPSocket(
IEventQueue *events, SocketMultiplexer *socketMultiplexer,
IArchNetwork::EAddressFamily family = IArchNetwork::kINET
IArchNetwork::AddressFamily family = IArchNetwork::AddressFamily::INet
);
TCPSocket(IEventQueue *events, SocketMultiplexer *socketMultiplexer, ArchSocket socket);
TCPSocket(TCPSocket const &) = delete;

View File

@ -25,7 +25,7 @@ TCPSocketFactory::TCPSocketFactory(IEventQueue *events, SocketMultiplexer *socke
// do nothing
}
IDataSocket *TCPSocketFactory::create(IArchNetwork::EAddressFamily family, SecurityLevel securityLevel) const
IDataSocket *TCPSocketFactory::create(IArchNetwork::AddressFamily family, SecurityLevel securityLevel) const
{
if (securityLevel != SecurityLevel::PlainText) {
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;
if (securityLevel != SecurityLevel::PlainText) {

View File

@ -23,10 +23,12 @@ public:
// ISocketFactory overrides
IDataSocket *create(
IArchNetwork::EAddressFamily family = IArchNetwork::kINET, SecurityLevel securityLevel = SecurityLevel::PlainText
IArchNetwork::AddressFamily family = IArchNetwork::AddressFamily::INet,
SecurityLevel securityLevel = SecurityLevel::PlainText
) const override;
IListenSocket *createListen(
IArchNetwork::EAddressFamily family = IArchNetwork::kINET, SecurityLevel securityLevel = SecurityLevel::PlainText
IArchNetwork::AddressFamily family = IArchNetwork::AddressFamily::INet,
SecurityLevel securityLevel = SecurityLevel::PlainText
) const override;
private:

View File

@ -186,7 +186,7 @@ TEST(ArchNetworkBSDTests, isAnyAddr_goodAddress_returnsTrue)
auto deps = MockDeps::makeNice();
ArchNetworkBSD networkBSD(deps);
std::unique_ptr<ArchNetAddressImpl> addr;
addr.reset(networkBSD.newAnyAddr(IArchNetwork::kINET6));
addr.reset(networkBSD.newAnyAddr(IArchNetwork::AddressFamily::INet6));
auto result = networkBSD.isAnyAddr(addr.get());
@ -198,7 +198,7 @@ TEST(ArchNetworkBSDTests, isAnyAddr_badAddress_returnsFalse)
auto deps = MockDeps::makeNice();
ArchNetworkBSD networkBSD(deps);
std::unique_ptr<ArchNetAddressImpl> addr;
addr.reset(networkBSD.newAnyAddr(IArchNetwork::kINET6));
addr.reset(networkBSD.newAnyAddr(IArchNetwork::AddressFamily::INet6));
auto scratch = (char *)&addr->m_addr;
std::string badAddr = "badaddr";
std::ranges::copy(badAddr, scratch + 2);