#include "stdafx.h" #include "ChatServerConfig.h" #include const char* CChatServerConfig::ms_szDefaultSetupFileName = "./Script/Server/ChatServerConfig.txt"; CChatServerConfig& CChatServerConfig::GetInstance() { static CChatServerConfig chatServerConfig; return chatServerConfig; } CChatServerConfig::CChatServerConfig() : m_lpLimitUserByIP(new CLimitUserByIP(0)) { } CChatServerConfig::~CChatServerConfig() { if(m_lpLimitUserByIP) { delete m_lpLimitUserByIP; m_lpLimitUserByIP = 0; } } //! ÆÄÀϷκÎÅÍ ¼Â¾÷À» ·ÎµåÇÑ´Ù. (ÀÌÀüÀÇ ³»¿ëÀº ÀüºÎ Áö¿öÁø´Ù.) bool CChatServerConfig::LoadSetup(const char* szFileName) { if(0 != m_lpLimitUserByIP) { m_lpLimitUserByIP->ClearIPList(); m_lpLimitUserByIP->OperateMode(CLimitUserByIP::DENY_ALL); m_lpLimitUserByIP->ReserveAllowIP(256); m_ChatToolAuthMap.clear(); FILE* lpFile = fopen(szFileName, "rt"); if(lpFile) { const int MAX_BUFFER = 4096; char szBuffer[MAX_BUFFER]; char* szToken = 0; enum SetupMode { NONE, USER_PASSWORD, ALLOW_IP }; SetupMode eSetupMode = NONE; unsigned long dwAddress = 0; std::string szUserID; std::string szPassword; while(fgets(szBuffer, MAX_BUFFER - 1, lpFile)) { szBuffer[MAX_BUFFER - 1] = 0; szToken = strtok(szBuffer, "\r\n\t= "); if(0 != szToken) { char szTokenBuffer[MAX_BUFFER]; strcpy(szTokenBuffer, szToken); _strupr(szTokenBuffer); if(0 == strcmp(szTokenBuffer, "//")) { // ÁÖ¼®Ã³¸®... continue; } else if(0 == strcmp(szTokenBuffer, "[USER]")) { eSetupMode = USER_PASSWORD; } else if(0 == strcmp(szTokenBuffer, "[ALLOW_IP]")) { eSetupMode = ALLOW_IP; if (true == CServerSetup::GetInstance().GetChatToolIPCheck()) { // Çã°¡¹ÞÀº »ç¶÷µé¸¸ µé¾î¿Ã ¼ö ÀÖµµ·Ï ¼³Á¤. m_lpLimitUserByIP->OperateMode(CLimitUserByIP::ALLOW_SOME); } else { m_lpLimitUserByIP->OperateMode(CLimitUserByIP::ALLOW_ALL); } } else { switch(eSetupMode) { case USER_PASSWORD: szUserID.assign(szToken); szToken = strtok(0, "\r\n\t= "); if(0 != szToken) { szPassword.assign(szToken); m_ChatToolAuthMap.insert( std::make_pair(szUserID, std::make_pair(szPassword, 0))); } break; case ALLOW_IP: dwAddress = inet_addr(szToken); if(0 != dwAddress) { m_lpLimitUserByIP->AddAllowIP(dwAddress); } break; } } } }; fclose(lpFile); return true; } } return false; } //! À¯Àú ID¿Í ÆÐ½º¿öµå¸¦ ¹Þ¾Æ¼­, ¼Â¾÷ ÆÄÀÏ¿¡ Á¸ÀçÇÏ´Â À¯ÀúID/PasswordÀÎÁö È®ÀÎÇÑ´Ù. bool CChatServerConfig::Authorize(const char* szUserID, const char* szPassword) { ChatToolAuthMap::iterator pos = m_ChatToolAuthMap.find(szUserID); ChatToolAuthMap::iterator end = m_ChatToolAuthMap.end(); if (pos != end && 0 == pos->second.second && 0 == pos->second.first.compare(szPassword)) { // ·Î±×ÀÎ »óÅ·ΠÀüȯ pos->second.second = 1; return true; } return false; } void CChatServerConfig::Logout(const char* szUserID) { ChatToolAuthMap::iterator pos = m_ChatToolAuthMap.find(szUserID); ChatToolAuthMap::iterator end = m_ChatToolAuthMap.end(); if (pos != end && 0 != pos->second.second) { // ·Î±×¾Æ¿ô »óÅ·ΠÀüȯ pos->second.second = 0; } }