aboutsummaryrefslogtreecommitdiff
path: root/src/server/shared/Realm/Realm.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2016-03-26 13:39:46 +0100
committerShauren <shauren.trinity@gmail.com>2016-04-09 12:30:00 +0200
commit778f1725f8b085161d28a48806b1d2ec56a53e6b (patch)
tree41219161647fee7bb7c63089a3b91c7e3fc688fe /src/server/shared/Realm/Realm.cpp
parent3f7e6af49ede1a352b20bc02f59db1ac42a393ad (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.cpp35
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;
+}