bool ParseLockCommand(CSocketIOPtr s, const char *command) { char *cmd,*p; char *param; bool bRet = true; size_t client; if(!*command) return bRet; // Empty line cmd = strdup(command); { ClientLock lock; client = SockToClient[s->getsocket()]; } p=lock_strchr(cmd,' '); if(!p) { s->printf("001 FAIL Syntax error\n"); } else { if(!*p) param = p; else param = p+1; *p='\0'; if(!strcmp(cmd,"Client")) DoClient(s,client,param); else if(!strcmp(cmd,"Lock")) DoLock(s,client,param); else if(!strcmp(cmd,"Unlock")) DoUnlock(s,client,param); else if(!strcmp(cmd,"Version")) DoVersion(s,client,param); else if(!strcmp(cmd,"Modified")) DoModified(s,client,param); else if(!strcmp(cmd,"Monitor")) DoMonitor(s,client,param); else if(!strcmp(cmd,"Clients")) DoClients(s,client,param); else if(!strcmp(cmd,"Locks")) DoLocks(s,client,param); else if(!strcmp(cmd,"Close")) { DoClose(s,client,param); bRet=false; } else s->printf("001 FAIL Unknown command '%s'\n",cmd); } free(cmd); return bRet; }
//-------------------------------------------------------------------------------- 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; }