diff options
author | Shauren <shauren.trinity@gmail.com> | 2016-03-26 13:39:46 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2016-04-09 12:30:00 +0200 |
commit | 778f1725f8b085161d28a48806b1d2ec56a53e6b (patch) | |
tree | 41219161647fee7bb7c63089a3b91c7e3fc688fe /src/server/shared/Realm/Realm.cpp | |
parent | 3f7e6af49ede1a352b20bc02f59db1ac42a393ad (diff) |
Core/Misc: Moved RealmList to shared
(cherry picked from commit cfe8a6a58b37280e4ed922e4d70878579dbc8bee)
Diffstat (limited to 'src/server/shared/Realm/Realm.cpp')
-rw-r--r-- | src/server/shared/Realm/Realm.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/server/shared/Realm/Realm.cpp b/src/server/shared/Realm/Realm.cpp index 0c8f4d1d492..11c52f281a9 100644 --- a/src/server/shared/Realm/Realm.cpp +++ b/src/server/shared/Realm/Realm.cpp @@ -16,3 +16,38 @@ */ #include "Realm.h" + +ip::tcp::endpoint Realm::GetAddressForClient(ip::address const& clientAddr) const +{ + ip::address realmIp; + + // Attempt to send best address for client + if (clientAddr.is_loopback()) + { + // Try guessing if realm is also connected locally + if (LocalAddress.is_loopback() || ExternalAddress.is_loopback()) + realmIp = clientAddr; + else + { + // Assume that user connecting from the machine that bnetserver is located on + // has all realms available in his local network + realmIp = LocalAddress; + } + } + else + { + if (clientAddr.is_v4() && + (clientAddr.to_v4().to_ulong() & LocalSubnetMask.to_v4().to_ulong()) == + (LocalAddress.to_v4().to_ulong() & LocalSubnetMask.to_v4().to_ulong())) + { + realmIp = LocalAddress; + } + else + realmIp = ExternalAddress; + } + + ip::tcp::endpoint endpoint(realmIp, Port); + + // Return external IP + return endpoint; +} |