aboutsummaryrefslogtreecommitdiff
path: root/src/server/shared/Realm/Realm.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/shared/Realm/Realm.cpp')
-rw-r--r--src/server/shared/Realm/Realm.cpp33
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