r5sdk/r5dev/tier1/NetAdr.h
Amos c187bed4c5 RCON implementation (see description)
* Fully rewritten protocol agnostic CNetAdr class
* Fully rebuilded legacy CNetAdr class
* Fully rebuilded dual-stack CSocketCreator class
* New project "netconsole" added (lightweight netconsole for RCON)

RCON is still work in progress
2022-02-06 16:48:52 +01:00

70 lines
2.2 KiB
C++

#pragma once
enum class netadrtype_t
{
NA_NULL = 0,
NA_LOOPBACK,
NA_BROADCAST,
NA_IP,
};
typedef struct netadr_s netadr_t;
typedef struct netadr_s
{
public:
netadr_s(void);
netadr_s(std::uint32_t unIP, std::uint16_t usPort);
netadr_s(const char* pch);
void Clear(void);
void SetType(netadrtype_t type);
void SetPort(std::uint16_t port);
bool SetFromSockadr(const struct sockaddr* s);
void SetIP(std::uint8_t b1, std::uint8_t b2, std::uint8_t b3, std::uint8_t b4);
void SetIP(std::uint32_t unIP);
void SetIPAndPort(std::uint32_t unIP, std::uint16_t usPort) { SetIP(unIP); SetPort(usPort); }
bool SetFromString(const char* pch, bool bUseDNS = false);
void SetFromSocket(int hSocket);
bool CompareAdr(const netadr_s& a, bool onlyBase = false) const;
bool CompareClassBAdr(const netadr_s& a) const;
bool CompareClassCAdr(const netadr_s& a) const;
netadrtype_t GetType(void) const;
std::uint16_t GetPort(void) const;
const char* ToString(bool onlyBase = false) const;
void ToString(char* pchBuffer, std::uint32_t unBufferSize, bool onlyBase = false) const;
template< size_t maxLenInChars >
void ToString_safe(char(&pDest)[maxLenInChars], bool onlyBase = false) const
{
ToString(&pDest[0], maxLenInChars, onlyBase);
}
//[xxxx::xxxx:xxxx:xxxx:xxxx]:00000
void ToSockadr(struct sockaddr* s) const;
// Returns 0xAABBCCDD for AA.BB.CC.DD on all platforms, which is the same format used by SetIP().
std::uint32_t GetIPHostByteOrder(void) const;
// Returns a number that depends on the platform. In most cases, this probably should not be used.
std::uint32_t GetIPNetworkByteOrder(void) const;
bool IsValid(void) const; // ip & port != 0
bool IsBaseAdrValid(void) const; // ip != 0
bool IsLocalhost(void) const; // true, if this is the localhost IP
bool IsLoopback(void) const; // true if engine loopback buffers are used
bool IsReservedAdr(void) const; // true, if this is a private LAN IP
bool operator==(const netadr_s& netadr) const { return (CompareAdr(netadr)); }
bool operator!=(const netadr_s& netadr) const { return !(CompareAdr(netadr)); }
bool operator<(const netadr_s& netadr) const;
public: // members are public to avoid to much changes
netadrtype_t type;
std::uint8_t ip[4];
std::uint16_t port;
} netadr_t;