uint32_t Tokenizer::STokenize(const char_t *str, const char_t *delim) { Reset(); ecila_strncpy(source_, str, sizeof(source_)); return StringTokenize(source_, delim); }
bool TextScanner::SetupFromMemoryAddress(const char *pCharArray) { m_lines = StringTokenize(pCharArray, "\n"); for (unsigned int i=0; i < m_lines.size(); i++) { StringReplace("\r", "", m_lines[i]); } return true; }
bool AnalyzeNetAddress(const std::string &address, uint32_t &out_ip, uint16_t &out_port) { std::list<std::string> ip_and_port; StringTokenize(address, ":", ip_and_port); if (ip_and_port.size() != 2) return false; out_ip = InetStringToNumber(*(ip_and_port.begin())); ip_and_port.pop_front(); out_port = (uint16_t)atoi((*(ip_and_port.begin())).c_str()); return true ; }
std::string TextScanner::GetMultipleLineStrings( string label, string token ) { for (unsigned int i=m_lastLine; i < m_lines.size(); i++) { if (m_lines[i].empty()) continue; vector<string> line = StringTokenize(m_lines[i], token); if (line[0] == label) { //found it m_lastLine = i+1; return m_lines[i]; } } m_lastLine = 0; //reset it return ""; }
std::string TextScanner::GetParmString( string label, int index, string token) { if (m_lines.empty()) { LogError("Load a file first"); return ""; } for (unsigned int i=0; i < m_lines.size(); i++) { if (m_lines[i].empty()) continue; vector<string> line = StringTokenize(m_lines[i], token); if (line[0] == label) { //found it return line[index]; } } return ""; }
int CUpdateUtil::VersionCheck(LPCSTR lpszFileName, LPCSTR lpszClientVersion, LPCSTR lpszServerVersion, LPCSTR lpszServerAddress, LPCSTR lpszServerMD5, unsigned long ulServerSize) { CString strFileFullPath = lpszFileName; unsigned long ulClientSize = 0; // 0. 파일 존재 유무 확인 // 1. MD5 체크 // 2. 파일 크기 먼저 확인(0으로 되어 있는 경우도 참고) // 2.1 파일 크기가 0으로 되어 있는 경우(솔루션의 v3d 파일 같은 경우 자주 다운 안 받아도 됨)는 // 파일 크기만 확인하여 업데이트 // 3. 파일 버전 확인(없는 경우도 참고) // 0. file exist check if( IsFileExist(strFileFullPath, ulClientSize) ){ // 1. md5 check CString strMD5 = lpszServerMD5; if(!strMD5.IsEmpty() && strMD5.GetLength()==32){ MD5 context(strFileFullPath); if( !context.GetHash().IsEmpty() ) if( 0==context.GetHash().CompareNoCase(strMD5) ) return UPDATE_FLAG_NORMAL; else return UPDATE_FLAG_UPDATE; } CString strClientVersion = lpszClientVersion; CString strServerVersion = lpszServerVersion; // 2. file size check if( ulServerSize == UPDATE_FILE_SIZE_NOT_EXIST ){ // 0 CString strFileAddress = lpszServerAddress; DownloadFileSizeCheck(strFileAddress, ulServerSize); } // 3. version check if(strServerVersion.IsEmpty() || 0==strServerVersion.CompareNoCase("0")){ // only file size check if( (ulClientSize >= ulServerSize) ) return UPDATE_FLAG_NORMAL; else /* ulClientSize < ulServerSize*/ return UPDATE_FLAG_UPDATE; } else{ char cFileVersion[MAX_PATH]; if( GetFileVersion((LPTSTR)(LPCTSTR)strFileFullPath, cFileVersion) ){ char cServerVersion[MAX_PATH]; strcpy(cServerVersion, (LPCSTR)strServerVersion); if( strcmp(cFileVersion, cServerVersion) == 0 ){ if(ulClientSize>0 && ulServerSize>0){ if( (ulClientSize >= ulServerSize) ) return UPDATE_FLAG_NORMAL; else return UPDATE_FLAG_UPDATE; } else return UPDATE_FLAG_NORMAL; } else{ // 1. Client file version > Server file version : 업데이트 취소 CUIntArray unarrayClient, unarrayServer; strClientVersion = cFileVersion; strServerVersion = cServerVersion; StringTokenize(strClientVersion, unarrayClient); StringTokenize(strServerVersion, unarrayServer); return RealVersionCheck(unarrayClient, unarrayServer); } } else{ if(strClientVersion.IsEmpty() || 0==strClientVersion.CompareNoCase("0")){ if( (ulClientSize >= ulServerSize) ) return UPDATE_FLAG_NORMAL; else return UPDATE_FLAG_UPDATE; } else{ if( 0==strServerVersion.CompareNoCase(strClientVersion) ){ if( (ulClientSize >= ulServerSize) ) return UPDATE_FLAG_NORMAL; else return UPDATE_FLAG_UPDATE; } else{ CUIntArray unarrayClient, unarrayServer; StringTokenize(strClientVersion, unarrayClient); StringTokenize(strServerVersion, unarrayServer); return RealVersionCheck(unarrayClient, unarrayServer); } } } } } else return UPDATE_FLAG_NEW; }
vector<string> TextScanner::TokenizeLine( int lineNum, const string &theDelimiter /*= "|"*/ ) { return StringTokenize(m_lines[lineNum], theDelimiter); }
uint32_t Tokenizer::STokenize(char_t *str, const char_t *delim) { Reset(); return StringTokenize(str, delim); }