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/server/shared/Realm/Realm.cpp | |
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/server/shared/Realm/Realm.cpp')
-rw-r--r-- | src/server/shared/Realm/Realm.cpp | 33 |
1 files changed, 13 insertions, 20 deletions
diff --git a/src/server/shared/Realm/Realm.cpp b/src/server/shared/Realm/Realm.cpp index 0648de535a3..87b7114111d 100644 --- a/src/server/shared/Realm/Realm.cpp +++ b/src/server/shared/Realm/Realm.cpp @@ -31,31 +31,24 @@ void Realm::SetName(std::string name) boost::asio::ip::address Realm::GetAddressForClient(boost::asio::ip::address const& clientAddr) const { - boost::asio::ip::address realmIp; - - // Attempt to send best address for client - if (clientAddr.is_loopback()) + std::array<boost::asio::ip::address, 2> addresses = std::array{ *ExternalAddress, * LocalAddress }; + if (auto addressIndex = Trinity::Net::SelectAddressForClient(clientAddr, addresses)) { - // Try guessing if realm is also connected locally - if (LocalAddress->is_loopback() || ExternalAddress->is_loopback()) - realmIp = clientAddr; - else + switch (*addressIndex) { - // Assume that user connecting from the machine that bnetserver is located on - // has all realms available in his local network - realmIp = *LocalAddress; + case 0: + return *ExternalAddress; + case 1: + return *LocalAddress; + default: + break; } } - else - { - if (clientAddr.is_v4() && Trinity::Net::IsInNetwork(LocalAddress->to_v4(), LocalSubnetMask->to_v4(), clientAddr.to_v4())) - realmIp = *LocalAddress; - else - realmIp = *ExternalAddress; - } - // Return external IP - return realmIp; + if (clientAddr.is_loopback()) + return *LocalAddress; + + return *ExternalAddress; } uint32 Realm::GetConfigId() const |