aboutsummaryrefslogtreecommitdiff
path: root/src/server/shared/Realm
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2017-05-13 11:49:09 +0200
committerShauren <shauren.trinity@gmail.com>2017-05-13 11:49:09 +0200
commitbeb3316089b350a43e917d896e682298df8dcfc0 (patch)
tree8006c52594009f226d834991d101c97057699594 /src/server/shared/Realm
parentc00316d3d4b57826cc8e38feed24faf84832c04b (diff)
Core/Shared: Include cleanup
Diffstat (limited to 'src/server/shared/Realm')
-rw-r--r--src/server/shared/Realm/Realm.cpp21
-rw-r--r--src/server/shared/Realm/Realm.h17
-rw-r--r--src/server/shared/Realm/RealmList.cpp40
-rw-r--r--src/server/shared/Realm/RealmList.h35
4 files changed, 61 insertions, 52 deletions
diff --git a/src/server/shared/Realm/Realm.cpp b/src/server/shared/Realm/Realm.cpp
index 85438bcf151..45e5b445297 100644
--- a/src/server/shared/Realm/Realm.cpp
+++ b/src/server/shared/Realm/Realm.cpp
@@ -17,40 +17,39 @@
#include "Realm.h"
#include "StringFormat.h"
+#include <boost/asio/ip/address.hpp>
-ip::tcp::endpoint Realm::GetAddressForClient(ip::address const& clientAddr) const
+boost::asio::ip::address Realm::GetAddressForClient(boost::asio::ip::address const& clientAddr) const
{
- ip::address realmIp;
+ boost::asio::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())
+ 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;
+ 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()))
+ (clientAddr.to_v4().to_ulong() & LocalSubnetMask->to_v4().to_ulong()) ==
+ (LocalAddress->to_v4().to_ulong() & LocalSubnetMask->to_v4().to_ulong()))
{
- realmIp = LocalAddress;
+ realmIp = *LocalAddress;
}
else
- realmIp = ExternalAddress;
+ realmIp = *ExternalAddress;
}
- ip::tcp::endpoint endpoint(realmIp, Port);
-
// Return external IP
- return endpoint;
+ return realmIp;
}
uint32 Realm::GetConfigId() const
diff --git a/src/server/shared/Realm/Realm.h b/src/server/shared/Realm/Realm.h
index 94a752357b2..21675fe149b 100644
--- a/src/server/shared/Realm/Realm.h
+++ b/src/server/shared/Realm/Realm.h
@@ -19,10 +19,7 @@
#define Realm_h__
#include "Common.h"
-#include <boost/asio/ip/address.hpp>
-#include <boost/asio/ip/tcp.hpp>
-
-using namespace boost::asio;
+#include "AsioHacksFwd.h"
enum RealmFlags
{
@@ -37,8 +34,6 @@ enum RealmFlags
REALM_FLAG_FULL = 0x80
};
-#pragma pack(push, 1)
-
namespace Battlenet
{
struct TC_SHARED_API RealmHandle
@@ -63,8 +58,6 @@ namespace Battlenet
};
}
-#pragma pack(pop)
-
/// Type of server, this is values from second column of Cfg_Configs.dbc
enum RealmType
{
@@ -85,9 +78,9 @@ struct TC_SHARED_API Realm
{
Battlenet::RealmHandle Id;
uint32 Build;
- ip::address ExternalAddress;
- ip::address LocalAddress;
- ip::address LocalSubnetMask;
+ std::unique_ptr<boost::asio::ip::address> ExternalAddress;
+ std::unique_ptr<boost::asio::ip::address> LocalAddress;
+ std::unique_ptr<boost::asio::ip::address> LocalSubnetMask;
uint16 Port;
std::string Name;
uint8 Type;
@@ -96,7 +89,7 @@ struct TC_SHARED_API Realm
AccountTypes AllowedSecurityLevel;
float PopulationLevel;
- ip::tcp::endpoint GetAddressForClient(ip::address const& clientAddr) const;
+ boost::asio::ip::address GetAddressForClient(boost::asio::ip::address const& clientAddr) const;
uint32 GetConfigId() const;
static uint32 const ConfigIdByType[MAX_CLIENT_REALM_TYPE];
diff --git a/src/server/shared/Realm/RealmList.cpp b/src/server/shared/Realm/RealmList.cpp
index c949490c63f..93bb4fc98ff 100644
--- a/src/server/shared/Realm/RealmList.cpp
+++ b/src/server/shared/Realm/RealmList.cpp
@@ -18,23 +18,25 @@
#include "RealmList.h"
#include "BattlenetRpcErrorCodes.h"
+#include "BigNumber.h"
#include "DatabaseEnv.h"
+#include "Errors.h"
#include "Log.h"
#include "ProtobufJSON.h"
#include "SHA256.h"
-#include "BigNumber.h"
#include "Util.h"
#include "game_utilities_service.pb.h"
#include "RealmList.pb.h"
+#include <boost/asio/deadline_timer.hpp>
+#include <boost/asio/ip/tcp.hpp>
#include <zlib.h>
-RealmList::RealmList() : _updateInterval(0), _updateTimer(nullptr), _resolver(nullptr)
+RealmList::RealmList() : _updateInterval(0)
{
}
RealmList::~RealmList()
{
- delete _updateTimer;
}
RealmList* RealmList::Instance()
@@ -47,8 +49,8 @@ RealmList* RealmList::Instance()
void RealmList::Initialize(boost::asio::io_service& ioService, uint32 updateInterval)
{
_updateInterval = updateInterval;
- _updateTimer = new boost::asio::deadline_timer(ioService);
- _resolver = new boost::asio::ip::tcp::resolver(ioService);
+ _updateTimer = Trinity::make_unique<boost::asio::deadline_timer>(ioService);
+ _resolver = Trinity::make_unique<boost::asio::ip::tcp::resolver>(ioService);
// Get the content of the realmlist table in the database
UpdateRealms(boost::system::error_code());
@@ -59,8 +61,9 @@ void RealmList::Close()
_updateTimer->cancel();
}
-void RealmList::UpdateRealm(Battlenet::RealmHandle const& id, uint32 build, const std::string& name, ip::address const& address, ip::address const& localAddr,
- ip::address const& localSubmask, uint16 port, uint8 icon, RealmFlags flag, uint8 timezone, AccountTypes allowedSecurityLevel,
+void RealmList::UpdateRealm(Battlenet::RealmHandle const& id, uint32 build, std::string const& name,
+ boost::asio::ip::address const& address, boost::asio::ip::address const& localAddr, boost::asio::ip::address const& localSubmask,
+ uint16 port, uint8 icon, RealmFlags flag, uint8 timezone, AccountTypes allowedSecurityLevel,
float population)
{
// Create new if not exist or update existed
@@ -74,9 +77,12 @@ void RealmList::UpdateRealm(Battlenet::RealmHandle const& id, uint32 build, cons
realm.Timezone = timezone;
realm.AllowedSecurityLevel = allowedSecurityLevel;
realm.PopulationLevel = population;
- realm.ExternalAddress = address;
- realm.LocalAddress = localAddr;
- realm.LocalSubnetMask = localSubmask;
+ if (!realm.ExternalAddress || *realm.ExternalAddress != address)
+ realm.ExternalAddress = Trinity::make_unique<boost::asio::ip::address>(address);
+ if (!realm.LocalAddress || *realm.LocalAddress != localAddr)
+ realm.LocalAddress = Trinity::make_unique<boost::asio::ip::address>(localAddr);
+ if (!realm.LocalSubnetMask || *realm.LocalSubnetMask != localSubmask)
+ realm.LocalSubnetMask = Trinity::make_unique<boost::asio::ip::address>(localSubmask);
realm.Port = port;
}
@@ -108,7 +114,7 @@ void RealmList::UpdateRealms(boost::system::error_code const& error)
Field* fields = result->Fetch();
uint32 realmId = fields[0].GetUInt32();
std::string name = fields[1].GetString();
- boost::asio::ip::tcp::resolver::query externalAddressQuery(ip::tcp::v4(), fields[2].GetString(), "");
+ boost::asio::ip::tcp::resolver::query externalAddressQuery(boost::asio::ip::tcp::v4(), fields[2].GetString(), "");
boost::system::error_code ec;
boost::asio::ip::tcp::resolver::iterator endPoint = _resolver->resolve(externalAddressQuery, ec);
@@ -118,9 +124,9 @@ void RealmList::UpdateRealms(boost::system::error_code const& error)
continue;
}
- ip::address externalAddress = (*endPoint).endpoint().address();
+ boost::asio::ip::address externalAddress = endPoint->endpoint().address();
- boost::asio::ip::tcp::resolver::query localAddressQuery(ip::tcp::v4(), fields[3].GetString(), "");
+ boost::asio::ip::tcp::resolver::query localAddressQuery(boost::asio::ip::tcp::v4(), fields[3].GetString(), "");
endPoint = _resolver->resolve(localAddressQuery, ec);
if (endPoint == end || ec)
{
@@ -128,9 +134,9 @@ void RealmList::UpdateRealms(boost::system::error_code const& error)
continue;
}
- ip::address localAddress = (*endPoint).endpoint().address();
+ boost::asio::ip::address localAddress = endPoint->endpoint().address();
- boost::asio::ip::tcp::resolver::query localSubmaskQuery(ip::tcp::v4(), fields[4].GetString(), "");
+ boost::asio::ip::tcp::resolver::query localSubmaskQuery(boost::asio::ip::tcp::v4(), fields[4].GetString(), "");
endPoint = _resolver->resolve(localSubmaskQuery, ec);
if (endPoint == end || ec)
{
@@ -138,7 +144,7 @@ void RealmList::UpdateRealms(boost::system::error_code const& error)
continue;
}
- ip::address localSubmask = (*endPoint).endpoint().address();
+ boost::asio::ip::address localSubmask = endPoint->endpoint().address();
uint16 port = fields[5].GetUInt16();
uint8 icon = fields[6].GetUInt8();
@@ -355,7 +361,7 @@ uint32 RealmList::JoinRealm(uint32 realmAddress, uint32 build, boost::asio::ip::
addressFamily->set_family(1);
JSON::RealmList::IPAddress* address = addressFamily->add_addresses();
- address->set_ip(realm->GetAddressForClient(clientAddress).address().to_string());
+ address->set_ip(realm->GetAddressForClient(clientAddress).to_string());
address->set_port(realm->Port);
std::string json = "JSONRealmListServerIPAddresses:" + JSON::Serialize(serverAddresses);
diff --git a/src/server/shared/Realm/RealmList.h b/src/server/shared/Realm/RealmList.h
index 594ca2bf1f6..de16bfdceff 100644
--- a/src/server/shared/Realm/RealmList.h
+++ b/src/server/shared/Realm/RealmList.h
@@ -19,15 +19,12 @@
#ifndef _REALMLIST_H
#define _REALMLIST_H
-#include "Common.h"
-#include "Realm/Realm.h"
-#include <boost/asio/ip/address.hpp>
-#include <boost/asio/ip/tcp.hpp>
-#include <boost/asio/io_service.hpp>
-#include <boost/asio/deadline_timer.hpp>
+#include "Define.h"
+#include "Realm.h"
+#include <map>
+#include <vector>
+#include <unordered_set>
#include <unordered_set>
-
-using namespace boost::asio;
struct RealmBuildInfo
{
@@ -38,6 +35,19 @@ struct RealmBuildInfo
uint32 HotfixVersion;
};
+namespace boost
+{
+ namespace asio
+ {
+ class io_service;
+ }
+
+ namespace system
+ {
+ class error_code;
+ }
+}
+
namespace bgs
{
namespace protocol
@@ -89,14 +99,15 @@ private:
RealmList();
void UpdateRealms(boost::system::error_code const& error);
- void UpdateRealm(Battlenet::RealmHandle const& id, uint32 build, const std::string& name, ip::address const& address, ip::address const& localAddr,
- ip::address const& localSubmask, uint16 port, uint8 icon, RealmFlags flag, uint8 timezone, AccountTypes allowedSecurityLevel, float population);
+ void UpdateRealm(Battlenet::RealmHandle const& id, uint32 build, std::string const& name,
+ boost::asio::ip::address const& address, boost::asio::ip::address const& localAddr, boost::asio::ip::address const& localSubmask,
+ uint16 port, uint8 icon, RealmFlags flag, uint8 timezone, AccountTypes allowedSecurityLevel, float population);
RealmMap _realms;
std::unordered_set<std::string> _subRegions;
uint32 _updateInterval;
- boost::asio::deadline_timer* _updateTimer;
- boost::asio::ip::tcp::resolver* _resolver;
+ std::unique_ptr<boost::asio::deadline_timer> _updateTimer;
+ std::unique_ptr<boost::asio::ip::tcp_resolver> _resolver;
};
#define sRealmList RealmList::Instance()