#include "stdafx.h" #include #pragma comment(lib, "shlwapi.lib ") #include "PatchRTTA.h" #include "CUnZipper.h" #pragma comment(lib, "Netapi32.lib") #include "genericftpclient.h" PatchRTTA::PatchRTTA() { } PatchRTTA::~PatchRTTA() { } void PatchRTTA::Start( char* szFtpAddress, DWORD dwFtpPort, char* szFtpUser, char* szFtpPassword, char* szFtpGetFilePath, char* szFtpGetFileName ) { OutputDebug( "[RTTA Patch info]FtpAddress=%s FtpPort=%d, FtpUser=%s, FtpPassword=%s, FtpGetFilePath=%s, FtpGetFileName=%s\n", szFtpAddress, dwFtpPort, szFtpUser, szFtpPassword, szFtpGetFilePath, szFtpGetFileName); ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /* 20060823 add by guiun RTTAgent¼­ºñ½º »óŸ¦ È®½ÇÇÏ°Ô SERVICE_STOPPED »óÅ·Π¸¸µé°í ´ÙÀ½À¸·Î ³Ñ¾î°¡ÀÚ */ int nCnt = 0; while( SERVICE_STOPPED != eXtreme::WinService::Instance()->QueryService(NULL, SERVICENAME_RTTA, NULL, 0) ) { // RTTAgent ¼­ºñ½º¸¦ ÁßÁö ÇÑ´Ù. eXtreme::WinService::Instance()->StopService( 0, SERVICENAME_RTTA ); // ¼­ºñ½º¸¦ 10¹øÁ¤µµ ÁßÁö ¸í·ÉÀ» ³»·ÈÀ½¿¡µµ ºÒ±¸Çϰí ÁßÁö°¡ ¾ÈµÉ°æ¿ì ÆÐÄ¡¸¦ ÁßÁö ÇÑ´Ù. // QueryService ´Â SERVICE_STOPPED/SERVICE_RUNNING/SERVICE_PAUSED ´Ü°è¸¦ ¹ÝȯÇϹǷΠÀÌ·± »óŰ¡ ¿À¸é ¾ÈµÈ´Ù. if(nCnt++>10) { OutputDebug("RTTAgent Service Stopped Fail............. \n"); return ; } } OutputDebug("RTTAgent Service Stopped ............. \n"); ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// CGenericFTPClient ftpClient; // FTP¿¡ Á¢¼ÓÀ» ÇÑ´Ù. if(ftpClient.Open(szFtpAddress, dwFtpPort, szFtpUser, szFtpPassword)==TRUE) { char szRemoteFileName[MAX_PATH] = {0, }; // FTP¼­¹öÀÇ °æ·Î char szLocalFileName[MAX_PATH] = {0, }; // Ŭ¶óÀ̾ðÆ®ÀÇ °æ·Î char szRTTAgentPath[MAX_PATH] = {0, }; // ´Ù¿î¹ÞÀº ZipÆÄÀÏ ¾ÐÃàÇØÁ¦ °æ·Î sprintf(szRemoteFileName, "%s/%s", szFtpGetFilePath, szFtpGetFileName); ::GetPrivateProfileString( "RTTAgentPatch", "PATH", "c:/rttagent", szRTTAgentPath, MAX_PATH, SERVERINFO_FILENAME ); strcpy(szLocalFileName, UPDATE_DIR); strcat(szLocalFileName, szFtpGetFileName); // ¾÷µ¥ÀÌÆ® ÆÄÀÏÀ» ÀúÀåÇÒ µð·ºÅ丮 »ý¼º if( FALSE == PathIsDirectory(UPDATE_DIR) ) { if( !CreateDirectory(UPDATE_DIR, 0) ) { OutputDebug("Cannot Maked Update Directory, [DIR : %s]\n", UPDATE_DIR ); return; } } ftpClient.GetInternetFile(szRemoteFileName, szLocalFileName); ftpClient.Close(); /*------------------------------ 2006. 8. 3 ±èÁ¾È£(¾ÐÃàÇØÁ¦ ÄÚµå »ðÀÔ) ---------------------*/ // ¾ÐÃà ÇØÁ¦ CUnZipper UZip; if( UZip.Unzip(szLocalFileName, UPDATE_DIR) ) { DeleteFile(szLocalFileName); // ¾ÐÃàÀ» ÇØÁ¦ÇßÀ¸¹Ç·Î ÆÄÀÏ»èÁ¦ // ¼­ºñ½º¸¦ ÁßÁö ÇßÀ¸¹Ç·Î ¾ÐÃàÇØÁ¦ÇÑ ÆÄÀÏÀ» ÁöÁ¤µÈ Æú´õ·Î º¹»çÈÄ Àç½ÇÇàÇÑ´Ù. char szFindSourceFile[MAX_PATH] = {0, }; strcpy(szFindSourceFile, UPDATE_DIR); strcat(szFindSourceFile, "*.*"); char szSourceFileName[MAX_PATH] = {0, }; // À̵¿ÇÒ ´ë»ó ÆÄÀÏÀÇ Full Path char szDestPath[MAX_PATH] = {0, }; // À̵¿ÇÒ ¸ñÀûÁöÀÇ Full Path BOOL bResult = TRUE; WIN32_FIND_DATA wfd; HANDLE hSearch = FindFirstFile(szFindSourceFile, &wfd); while(bResult) { if( !(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ) { sprintf(szSourceFileName, "%s", UPDATE_DIR); strcat(szSourceFileName, wfd.cFileName); sprintf(szDestPath, "%s/%s", szRTTAgentPath, wfd.cFileName); // if( CopyFile(szSourceFileName, szDestPath, FALSE) ) // ÆÄÀϺ¹»ç if( MoveFileEx(szSourceFileName, szDestPath, MOVEFILE_REPLACE_EXISTING) ) { OutputDebug("MoveFile To \"%s\"\n", szDestPath); } else { OutputDebug("File Access Error, FileName : %s, GetLastError : %d\n", szDestPath, GetLastError()); } } memset(szSourceFileName, 0, strlen(szSourceFileName) ); // ¹öÆÛ ÃʱâÈ­ memset(szDestPath, 0, strlen(szDestPath) ); // ´ÙÀ½ÆÄÀÏ °Ë»ö bResult = FindNextFile(hSearch, &wfd); } FindClose(hSearch); /*----------------------------------------------------------------------------------- END --*/ } else { OutputDebug("Unzip Fail \n"); } } else { OutputDebug("FTP Server Connect Fail \n"); } // À§¿¡¼­ Á¤È®ÇÏ°Ô RTTAgentÀÇ »óŸ¦ ÁßÁö »óÅ·Π¸¸µé¾ú±â ¶§¹®¿¡ ¿©±â¼­´Â ¹«Á¶°Ç RTTAgent ¼­ºñ½º¸¦ ½ÃÀÛ ÇÑ´Ù. DWORD dwErrorCode = eXtreme::WinService::Instance()->StartService( 0, SERVICENAME_RTTA ); OutputDebug("RTTAgent start service(%d)\n", dwErrorCode); }