mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
70 lines
2.2 KiB
C
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;
|