bool IOBanSQL::loadBans(const std::string& identifier, Ban& banclass) { Database db; if(!db.connect(m_db.c_str(), m_host.c_str(), m_user.c_str(), m_pass.c_str())){ return false; } DBQuery query; DBResult result; query << "SELECT * FROM bans"; if(!db.storeQuery(query, result)) return true; uint32_t currentTime = std::time(NULL); for(int i=0; i < result.getNumRows(); ++i){ int banType = result.getDataInt("type", i); int time = result.getDataInt("time", i); if(time > currentTime){ switch(banType){ case BAN_IPADDRESS: { int ip = result.getDataInt("ip", i); int mask = result.getDataInt("mask", i); banclass.addIpBan(ip, mask, time); break; } case BAN_PLAYER: { int player = result.getDataInt("player", i); banclass.addPlayerBan(player, time); break; } case BAN_ACCOUNT: { int account = result.getDataInt("account", i); banclass.addAccountBan(account, time); break; } } } } return true; }
bool IOBanXML::loadBans(const std::string& identifier, Ban& banclass) { xmlDocPtr doc = xmlParseFile(identifier.c_str()); if(doc){ xmlNodePtr root; root = xmlDocGetRootElement(doc); if(xmlStrcmp(root->name,(const xmlChar*)"bans") != 0){ xmlFreeDoc(doc); return false; } xmlNodePtr banNode = root->children; while(banNode){ if(xmlStrcmp(banNode->name,(const xmlChar*)"ban") == 0){ int banType; if(readXMLInteger(banNode, "type", banType) && banType >= BAN_IPADDRESS && banType <= BAN_ACCOUNT){ int time = 0; readXMLInteger(banNode, "time", time); switch(banType){ case BAN_IPADDRESS: { int ip = 0; int mask = 0; if(readXMLInteger(banNode, "ip", ip)){ readXMLInteger(banNode, "mask", ip); banclass.addIpBan(ip, mask, time); } break; } case BAN_PLAYER: { int playerguid = 0; if(readXMLInteger(banNode, "player", playerguid)){ banclass.addPlayerBan(playerguid, time); } break; } case BAN_ACCOUNT: { int account = 0; if(readXMLInteger(banNode, "account", account)){ banclass.addAccountBan(account, time); } break; } } } else{ std::cout << "Warning: [IOBanXML::loadBans] could not load ban" << std::endl; } } banNode = banNode->next; } } return true; }