aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Addons/AddonMgr.cpp
diff options
context:
space:
mode:
authorSpp <spp@jorge.gr>2013-05-21 09:41:13 +0200
committerSpp <spp@jorge.gr>2013-05-21 09:41:13 +0200
commit1b6fb2b6959f504d9e33d2326691cf43a04690d2 (patch)
tree31671ddd62612c27e1e821408956b9a8ff52a0ab /src/server/game/Addons/AddonMgr.cpp
parent82dc639882d2d51a8bde9bcd47b773be435a5a12 (diff)
parent243c325ca4323feb4f7f80c0ecd3873c78cbf887 (diff)
Merge branch 'master' into 4.3.4 [NOTE: There are parts of code marked as "REVIEW - MERGE" That needs some review)
Conflicts: src/server/game/DataStores/DBCStores.cpp src/server/game/DataStores/DBCStores.h src/server/game/DataStores/DBCfmt.h src/server/game/Entities/Unit/Unit.cpp src/server/game/Entities/Unit/Unit.h src/server/game/Handlers/AuctionHouseHandler.cpp src/server/game/Handlers/GroupHandler.cpp src/server/game/Movement/Spline/MovementTypedefs.h src/server/game/Spells/Auras/SpellAuraEffects.cpp src/server/game/Spells/SpellInfo.cpp src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp src/server/scripts/Spells/spell_generic.cpp
Diffstat (limited to 'src/server/game/Addons/AddonMgr.cpp')
-rw-r--r--src/server/game/Addons/AddonMgr.cpp68
1 files changed, 52 insertions, 16 deletions
diff --git a/src/server/game/Addons/AddonMgr.cpp b/src/server/game/Addons/AddonMgr.cpp
index 86a90d4d78a..3e1180727d0 100644
--- a/src/server/game/Addons/AddonMgr.cpp
+++ b/src/server/game/Addons/AddonMgr.cpp
@@ -18,10 +18,10 @@
#include "AddonMgr.h"
#include "DatabaseEnv.h"
+#include "DBCStores.h"
#include "Log.h"
#include "Timer.h"
-
-#include <list>
+#include <openssl/md5.h>
namespace AddonMgr
{
@@ -34,6 +34,8 @@ namespace
typedef std::list<SavedAddon> SavedAddonsList;
SavedAddonsList m_knownAddons;
+
+ BannedAddonList m_bannedAddons;
}
void LoadFromDB()
@@ -41,28 +43,57 @@ void LoadFromDB()
uint32 oldMSTime = getMSTime();
QueryResult result = CharacterDatabase.Query("SELECT name, crc FROM addons");
- if (!result)
+ if (result)
{
- sLog->outInfo(LOG_FILTER_SERVER_LOADING, ">> Loaded 0 known addons. DB table `addons` is empty!");
- return;
- }
+ uint32 count = 0;
- uint32 count = 0;
+ do
+ {
+ Field* fields = result->Fetch();
- do
- {
- Field* fields = result->Fetch();
+ std::string name = fields[0].GetString();
+ uint32 crc = fields[1].GetUInt32();
- std::string name = fields[0].GetString();
- uint32 crc = fields[1].GetUInt32();
+ m_knownAddons.push_back(SavedAddon(name, crc));
- m_knownAddons.push_back(SavedAddon(name, crc));
+ ++count;
+ }
+ while (result->NextRow());
- ++count;
+ sLog->outInfo(LOG_FILTER_SERVER_LOADING, ">> Loaded %u known addons in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
}
- while (result->NextRow());
+ else
+ sLog->outInfo(LOG_FILTER_SERVER_LOADING, ">> Loaded 0 known addons. DB table `addons` is empty!");
+
+ oldMSTime = getMSTime();
+ result = CharacterDatabase.Query("SELECT id, name, version, UNIX_TIMESTAMP(timestamp) FROM banned_addons");
+ if (result)
+ {
+ uint32 count = 0;
+ uint32 dbcMaxBannedAddon = sBannedAddOnsStore.GetNumRows();
+
+ do
+ {
+ Field* fields = result->Fetch();
- sLog->outInfo(LOG_FILTER_SERVER_LOADING, ">> Loaded %u known addons in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
+ BannedAddon addon;
+ addon.Id = fields[0].GetUInt32() + dbcMaxBannedAddon;
+ addon.Timestamp = uint32(fields[3].GetUInt64());
+
+ std::string name = fields[1].GetString();
+ std::string version = fields[2].GetString();
+
+ MD5(reinterpret_cast<uint8 const*>(name.c_str()), name.length(), addon.NameMD5);
+ MD5(reinterpret_cast<uint8 const*>(version.c_str()), version.length(), addon.VersionMD5);
+
+ m_bannedAddons.push_back(addon);
+
+ ++count;
+ }
+ while (result->NextRow());
+
+ sLog->outInfo(LOG_FILTER_SERVER_LOADING, ">> Loaded %u banned addons in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
+ }
}
void SaveAddon(AddonInfo const& addon)
@@ -91,4 +122,9 @@ SavedAddon const* GetAddonInfo(const std::string& name)
return NULL;
}
+BannedAddonList const* GetBannedAddons()
+{
+ return &m_bannedAddons;
+}
+
} // Namespace