diff options
author | Shauren <shauren.trinity@gmail.com> | 2023-07-15 00:45:16 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2023-07-15 00:45:16 +0200 |
commit | 6be536a73bc8a6e331ce20e7d19e2ea56b99b4d0 (patch) | |
tree | 2ad2ae6d9f4096c97235063eff60e7d69641a2b9 /src/common/Asio/IpNetwork.h | |
parent | cdfaecda52e165bb04381e1677108ff87b8bdf13 (diff) |
Core/Network: Refactor local/remote ip address selection code and allow using hostnames in LoginREST bnetserver config options
Diffstat (limited to 'src/common/Asio/IpNetwork.h')
-rw-r--r-- | src/common/Asio/IpNetwork.h | 44 |
1 files changed, 13 insertions, 31 deletions
diff --git a/src/common/Asio/IpNetwork.h b/src/common/Asio/IpNetwork.h index 294532c5c78..242c344fc15 100644 --- a/src/common/Asio/IpNetwork.h +++ b/src/common/Asio/IpNetwork.h @@ -18,40 +18,22 @@ #ifndef IpNetwork_h__ #define IpNetwork_h__ +#include "AsioHacksFwd.h" #include "Define.h" -#include "IpAddress.h" -#include <boost/asio/ip/network_v4.hpp> -#include <boost/asio/ip/network_v6.hpp> +#include "Optional.h" +#include <span> -namespace Trinity +namespace Trinity::Net { - namespace Net - { - inline bool IsInNetwork(boost::asio::ip::address_v4 const& networkAddress, boost::asio::ip::address_v4 const& mask, boost::asio::ip::address_v4 const& clientAddress) - { - boost::asio::ip::network_v4 network = boost::asio::ip::make_network_v4(networkAddress, mask); - boost::asio::ip::address_v4_range hosts = network.hosts(); - return hosts.find(clientAddress) != hosts.end(); - } - - inline boost::asio::ip::address_v4 GetDefaultNetmaskV4(boost::asio::ip::address_v4 const& networkAddress) - { - if ((address_to_uint(networkAddress) & 0x80000000) == 0) - return boost::asio::ip::address_v4(0xFF000000); - if ((address_to_uint(networkAddress) & 0xC0000000) == 0x80000000) - return boost::asio::ip::address_v4(0xFFFF0000); - if ((address_to_uint(networkAddress) & 0xE0000000) == 0xC0000000) - return boost::asio::ip::address_v4(0xFFFFFF00); - return boost::asio::ip::address_v4(0xFFFFFFFF); - } - - inline bool IsInNetwork(boost::asio::ip::address_v6 const& networkAddress, uint16 prefixLength, boost::asio::ip::address_v6 const& clientAddress) - { - boost::asio::ip::network_v6 network = boost::asio::ip::make_network_v6(networkAddress, prefixLength); - boost::asio::ip::address_v6_range hosts = network.hosts(); - return hosts.find(clientAddress) != hosts.end(); - } - } +TC_COMMON_API bool IsInLocalNetwork(boost::asio::ip::address const& clientAddress); + +TC_COMMON_API bool IsInNetwork(boost::asio::ip::network_v4 const& network, boost::asio::ip::address_v4 const& clientAddress); + +TC_COMMON_API bool IsInNetwork(boost::asio::ip::network_v6 const& network, boost::asio::ip::address_v6 const& clientAddress); + +TC_COMMON_API Optional<std::size_t> SelectAddressForClient(boost::asio::ip::address const& clientAddress, std::span<boost::asio::ip::address> const& addresses); + +TC_COMMON_API void ScanLocalNetworks(); } #endif // IpNetwork_h__ |