Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
AddonMgr.cpp
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#include "AddonMgr.h"
7#include "DatabaseEnv.h"
8#include "DBCStores.h"
9#include "Log.h"
10#include "Timer.h"
11#include <openssl/md5.h>
12
13namespace AddonMgr
14{
15
16 // Anonymous namespace ensures file scope of all the stuff inside it, even
17 // if you add something more to this namespace somewhere else.
18 namespace
19 {
20 // List of saved addons (in DB).
21 typedef std::list<SavedAddon> SavedAddonsList;
22
23 SavedAddonsList m_knownAddons;
24
25 BannedAddonList m_bannedAddons;
26 }
27
29 {
30 uint32 oldMSTime = getMSTime();
31
32 QueryResult result = CharacterDatabase.Query("SELECT name, crc FROM addons");
33 if (result)
34 {
35 uint32 count = 0;
36
37 do
38 {
39 Field* fields = result->Fetch();
40
41 std::string name = fields[0].GetString();
42 uint32 crc = fields[1].GetUInt32();
43
44 m_knownAddons.push_back(SavedAddon(name, crc));
45
46 ++count;
47 } while (result->NextRow());
48
49 SF_LOG_INFO("server.loading", ">> Loaded %u known addons in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
50 }
51 else
52 SF_LOG_INFO("server.loading", ">> Loaded 0 known addons. DB table `addons` is empty!");
53
54 oldMSTime = getMSTime();
55 result = CharacterDatabase.Query("SELECT id, name, version, UNIX_TIMESTAMP(timestamp) FROM banned_addons");
56 if (result)
57 {
58 uint32 count = 0;
59 uint32 dbcMaxBannedAddon = sBannedAddOnsStore.GetNumRows();
60
61 do
62 {
63 Field* fields = result->Fetch();
64
65 BannedAddon addon;
66 addon.Id = fields[0].GetUInt32() + dbcMaxBannedAddon;
67 addon.Timestamp = uint32(fields[3].GetUInt64());
68
69 std::string name = fields[1].GetString();
70 std::string version = fields[2].GetString();
71
72 MD5(reinterpret_cast<uint8 const*>(name.c_str()), name.length(), addon.NameMD5);
73 MD5(reinterpret_cast<uint8 const*>(version.c_str()), version.length(), addon.VersionMD5);
74
75 m_bannedAddons.push_back(addon);
76
77 ++count;
78 } while (result->NextRow());
79
80 SF_LOG_INFO("server.loading", ">> Loaded %u banned addons in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
81 }
82 }
83
84 void SaveAddon(AddonInfo const& addon)
85 {
86 std::string name = addon.Name;
87
88 PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_ADDON);
89
90 stmt->setString(0, name);
91 stmt->setUInt32(1, addon.CRC);
92
93 CharacterDatabase.Execute(stmt);
94
95 m_knownAddons.push_back(SavedAddon(addon.Name, addon.CRC));
96 }
97
98 SavedAddon const* GetAddonInfo(const std::string& name)
99 {
100 for (SavedAddonsList::const_iterator it = m_knownAddons.begin(); it != m_knownAddons.end(); ++it)
101 {
102 SavedAddon const& addon = (*it);
103 if (addon.Name == name)
104 return &addon;
105 }
106
107 return NULL;
108 }
109
111 {
112 return &m_bannedAddons;
113 }
114
115} // Namespace
@ CHAR_INS_ADDON
DBCStorage< BannedAddOnsEntry > sBannedAddOnsStore(BannedAddOnsfmt)
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
#define SF_LOG_INFO(filterType__,...)
Definition Log.h:137
Skyfire::AutoPtr< ResultSet, Skyfire::Mutex > QueryResult
Definition QueryResult.h:48
uint32 GetMSTimeDiffToNow(uint32 oldMSTime)
Definition Timer.h:22
uint32 getMSTime()
Definition Timer.h:12
Definition Field.h:16
std::string GetString() const
Definition Field.h:228
uint32 GetUInt32() const
Definition Field.h:105
void setString(const uint8 index, const std::string &value)
void setUInt32(const uint8 index, const uint32 value)
CharacterDatabaseWorkerPool CharacterDatabase
Accessor to the character database.
Definition Main.cpp:41
std::list< BannedAddon > BannedAddonList
Definition AddonMgr.h:53
SavedAddon const * GetAddonInfo(const std::string &name)
Definition AddonMgr.cpp:98
void SaveAddon(AddonInfo const &addon)
Definition AddonMgr.cpp:84
void LoadFromDB()
Definition AddonMgr.cpp:28
BannedAddonList const * GetBannedAddons()
Definition AddonMgr.cpp:110
std::string Name
Definition AddonMgr.h:19
uint32 CRC
Definition AddonMgr.h:21
uint8 NameMD5[16]
Definition AddonMgr.h:40
uint32 Id
Definition AddonMgr.h:39
uint32 Timestamp
Definition AddonMgr.h:42
uint8 VersionMD5[16]
Definition AddonMgr.h:41
std::string Name
Definition AddonMgr.h:33