//-------------------------------------------------------------------------------- int Parse(CStdioFile& fIn, CFile& fOut, CFile& fOutBkup) { char temp[4096]; char temp2[4096]; char sName[512]; char* pBuf; CTokenMaster* pMaster = NULL; sName[0] = 0; bool bRv = false; for(;;) { pBuf = temp; if(! fIn.ReadString(pBuf, 4096)) break; while(isspace(*pBuf) && *pBuf) pBuf++; if(! *pBuf) continue; if(*pBuf == ';') continue; else { // remove all non esential characters from the string int i = 0; for(char* pBuf2 = pBuf; *pBuf2; pBuf2++) { // if(isalnum(*pBuf2) || *pBuf2 == ',' || *pBuf2 == '=') if(isprint(*pBuf2)) temp2[i++] = *pBuf2; } if(i == 0) continue; temp2[i] = 0; pBuf = temp2; } printf("%s\n", pBuf); char* pBreak = strchr(pBuf, '='); if(pBreak == NULL) { printf("syntax error ^^^^^^^ (= missing)\n"); continue; } *pBreak = 0; if(*pBuf == 0) continue; LPCTSTR pKeywords[] = {"token", "count", "max", "bits", "name", "serial", "p3", "processor", "dongle", "email", "expires", "extra", "backup", "monitor", "parent" }; enum { IDTOKEN, IDCOUNT, IDMAX, IDBITS, IDNAME, IDSERIAL, IDP3, IDPROCESSOR, IDDONGLE, IDEMAIL, IDEXPIRES, IDEXTRA, IDBACKUP, IDMONITOR, IDPARENT, NCOUNT }; const int nCount = sizeof(pKeywords) / sizeof(LPCTSTR); assert(nCount == NCOUNT); for(int i = 0; i < nCount; i++) { if(strcmp(pBuf, pKeywords[i]) == 0) break; } switch(i) { case IDTOKEN: bRv = DoToken(pBreak+1, pMaster); break; case IDCOUNT: bRv = DoCount(pBreak+1, pMaster); break; case IDMAX: bRv = DoMax(pBreak+1, pMaster); break; case IDBITS: bRv = DoBits(pBreak+1, pMaster); break; case IDNAME: bRv = DoName(pBreak+1, pMaster); break; case IDSERIAL: case IDP3: case IDPROCESSOR: bRv = DoP3Serial(pBreak+1, pMaster); break; case IDDONGLE: bRv = DoDongle(pBreak+1, pMaster); break; case IDEMAIL: bRv = DoEmail(pBreak+1, pMaster); break; case IDEXPIRES: bRv = DoExpires(pBreak+1, pMaster); break; case IDEXTRA: bRv = DoExtra(pBreak+1, pMaster); break; case IDBACKUP: bRv = DoBackup(pBreak+1, pMaster); break; case IDMONITOR: bRv = DoMonitor(pBreak+1, pMaster); break; case IDPARENT: bRv = DoParent(pBreak+1, pMaster); break; default: printf("syntax error ^^^^^^^ (unknown keyword)\n"); bRv = false; continue; } } if(! bRv) return -1; if(! WriteFile(fOut, fOutBkup)) return -1; return 0; }
//-------------------------------------------------------------------------------- bool CSystemMonitorHandlerThread::DoCommand() { ASSERT(NUM_OF_CMDS == sizeof(g_pCommands) / sizeof(LPCTSTR)); bool bRv = true; m_sCurCmd.MakeLower(); m_sCurCmd.TrimLeft(); m_sCurCmd.TrimRight(); TRY { CString sTemp(m_sCurCmd.Left(4)); if(sTemp == "hey") m_socket.Send("there\r\n\r\n", 6, CSmallSocket::WAITFORWOULDBLOCK); else { for(int i = 0; i < NUM_OF_CMDS; i++) { if(strncmp(sTemp, g_pCommands[i], 4) == 0) break; } if(i == CMDEXIT) { m_sCurCmd.Empty(); m_sUser.Empty(); m_sPass.Empty(); return false; } if(i == CMDUSER) { if(m_sCurCmd.GetLength() > 5) DoUser(m_sCurCmd.Mid(5)); m_sCurCmd.Empty(); return true; } if(i == CMDPASS) { if(m_sCurCmd.GetLength() > 5) DoPass(m_sCurCmd.Mid(5)); m_sCurCmd.Empty(); return true; } if(! m_bLoggedIn) { m_sCurCmd.Empty(); return true; } switch(i) { case CMDLOAD: if(m_sCurCmd.GetLength() > 5) DoLoad(m_sCurCmd.Mid(5)); else { CSSConfigGeneral config; DoLoad(config.m_sLicenseFileDefault); } break; case CMDLIST: DoList(); break; case CMDPAUSE: DoPause(); break; case CMDCONT: DoContinue(); break; case CMDREVOKE: DoRevoke(); break; case CMDHELP: { for(int i = 0; i < NUM_OF_CMDS; i++) { CString sTemp; sTemp.Format("%s\r\n", g_pCommands[i]); m_socket.Send(sTemp, sTemp.GetLength(), CSmallSocket::WAITFORWOULDBLOCK); } } break; case CMDSERIAL: { CString sTemp; for(int i = 0; CPlatformInfo::GetProcessorSerialNumber(sTemp, i); i++) { sTemp += "\r\n"; m_socket.Send(sTemp, sTemp.GetLength(), CSmallSocket::WAITFORWOULDBLOCK); } } break; case CMDDONGLE: DoDongle(); break; case CMDCONFIG: DoConfigDump(); break; default: m_socket.Send("what?\r\n\r\n", 6, CSmallSocket::WAITFORWOULDBLOCK); break; } } } CATCH_ALL(e) { } END_CATCH_ALL m_sCurCmd.Empty(); return bRv; }