Example #1
0
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;
}
Example #2
0
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;
}