bool MMatchAdmin::Execute(const MUID& uidAdmin, const char* szStr) { if (!m_pMatchServer) return false; MAdminArgvInfo ai; memset(&ai, 0, sizeof(ai)); char szBuf[1024]; strcpy_safe(szBuf, szStr); if (MakeArgv(szBuf, &ai)) { if (ai.cargc > 0) { char szOut[65535]; if (m_pMatchServer->OnAdminExecute(&ai, szOut)) { m_pMatchServer->AdminTerminalOutput(uidAdmin, szOut); } } } else { return false; } return true; }
bool ZChatCmdManager::IsRepeatEnabled(char* szLine) { if ((szLine == 0) || (szLine[0] == 0)) return 0; ZChatCmdArgvInfo ai; memset(&ai, 0, sizeof(ZChatCmdArgvInfo)); ZChatCmd* pCmd = MakeArgv(szLine, &ai); if (pCmd != NULL) { return pCmd->GetRepeatEnabled(); } return false; }
bool ZChatCmdManager::DoCommand(char* szLine, ZChatCmdFlag nCurrFlag, unsigned long nInputFlag) { if ((szLine == 0) || (szLine[0] == 0)) return false; ZChatCmdArgvInfo ai; memset(&ai, 0, sizeof(ZChatCmdArgvInfo)); ZChatCmd* pCmd = MakeArgv(szLine, &ai); if (pCmd != NULL) { // 관리자 명령어일때 처리 if (pCmd->GetFlag() & CCF_ADMIN) { if ((nInputFlag & CIF_ADMIN) == false) return false; } // 테스트 명령어일때 처리 else if (pCmd->GetFlag() & CCF_TEST) { if ((nInputFlag & CIF_TESTER) == false) return false; } // Common if ( pCmd->GetFlag() & nCurrFlag) { pCmd->OnProc(szLine, ai.cargc, ai.cargv); return true; } // Admin else if ( (CIF_ADMIN & nInputFlag) && (pCmd->GetFlag() & CCF_ADMIN)) { if ( IsAdminGrade(ZGetMyInfo()->GetUGradeID()) ) { pCmd->OnProc(szLine, ai.cargc, ai.cargv); return true; } } // Test else if ( (CIF_TESTER & nInputFlag) && (pCmd->GetFlag() & CCF_TEST)) { pCmd->OnProc(szLine, ai.cargc, ai.cargv); return true; } } return false; }
static char * CompletionFunction(const char *text, int state) { char *cp; char *cmdstart; ArgvInfo ai; int bUsed; CommandPtr cmdp; static int flags; if (state == 0) { flags = -1; cmdstart = FindStartOfCurrentCommand(); if (cmdstart == NULL) return NULL; if (HaveCommandNameOnly(cmdstart)) { flags = -2; /* special case */ cp = CommandCompletionFunction(text, state); return cp; } (void) memset(&ai, 0, sizeof(ai)); bUsed = MakeArgv(cmdstart, &ai.cargc, ai.cargv, (int) (sizeof(ai.cargv) / sizeof(char *)), ai.argbuf, sizeof(ai.argbuf), ai.noglobargv, 1); if (bUsed <= 0) return NULL; if (ai.cargc == 0) return NULL; cmdp = GetCommandByName(ai.cargv[0], 0); if (cmdp == kAmbiguousCommand) { return NULL; } else if (cmdp == kNoCommand) { return NULL; } flags = cmdp->flags; } if (flags == (-2)) { cp = CommandCompletionFunction(text, state); return cp; } if (flags < 0) return NULL; if ((flags & (kCompleteLocalFile|kCompleteLocalDir)) != 0) { cp = gl_local_filename_completion_proc(text, state); return cp; } else if ((flags & kCompleteRemoteFile) != 0) { gl_filename_quoting_desired = 1; cp = RemoteFileCompletionFunction(text, state); return cp; } else if ((flags & kCompleteRemoteDir) != 0) { gl_filename_quoting_desired = 1; cp = RemoteDirCompletionFunction(text, state); return cp; } else if ((flags & kCompleteBookmark) != 0) { cp = BookmarkCompletionFunction(text, state); return cp; } else if ((flags & kCompletePrefOpt) != 0) { cp = PrefOptCompletionFunction(text, state); return cp; } return NULL; } /* CompletionFunction */
void CommandShell(void) { int tUsed, bUsed; ArgvInfo ai; char prompt[64]; char *lineRead; #if defined(WIN32) || defined(_WINDOWS) #else int sj; #endif time_t cmdStart, cmdStop; /* Execution may jump back to this point to restart the shell. */ #if defined(WIN32) || defined(_WINDOWS) #elif defined(HAVE_SIGSETJMP) sj = sigsetjmp(gBackToTopJmp, 1); #else /* HAVE_SIGSETJMP */ sj = setjmp(gBackToTopJmp); #endif /* HAVE_SIGSETJMP */ #if defined(WIN32) || defined(_WINDOWS) #else if (sj != 0) { Trace(0, "Caught signal %d, back at top.\n", gGotSig); if (gGotSig == SIGALRM) { (void) printf("\nRemote host was not responding, closing down the session."); FTPShutdownHost(&gConn); } else{ (void) printf("\nInterrupted.\n"); if (gCancelCtrl != 0) { gCancelCtrl = 0; (void) printf("Closing down the current FTP session: "); FTPShutdownHost(&gConn); (void) sleep(1); (void) printf("done.\n"); } } } gMayBackToTopJmp = 1; #endif ++gEventNumber; while (gDoneApplication == 0) { #if defined(WIN32) || defined(_WINDOWS) #else (void) NcSignal(SIGINT, BackToTop); (void) NcSignal(SIGPIPE, BackToTop); (void) NcSignal(SIGALRM, BackToTop); #endif MakePrompt(prompt, sizeof(prompt)); if (gConn.connected == 0) { SetXtermTitle("DEFAULT"); } else { SetXtermTitle("%s - NcFTP", gConn.host); } lineRead = Readline(prompt); if (lineRead == NULL) { /* EOF, Control-D */ (void) printf("\n"); break; } Trace(0, "> %s\n", lineRead); AddHistory(lineRead); for (tUsed = 0;;) { (void) memset(&ai, 0, sizeof(ai)); bUsed = MakeArgv(lineRead + tUsed, &ai.cargc, ai.cargv, (int) (sizeof(ai.cargv) / sizeof(char *)), ai.argbuf, sizeof(ai.argbuf), ai.noglobargv, 0); if (bUsed <= 0) break; tUsed += bUsed; if (ai.cargc == 0) continue; gRunningCommand = 1; (void) time(&cmdStart); if (DoCommand(&ai) < 0) { (void) time(&cmdStop); gRunningCommand = 0; break; } (void) time(&cmdStop); gRunningCommand = 0; if ((cmdStop - cmdStart) > kBeepAfterCmdTime) { /* Let the user know that a time-consuming * operation has completed. */ #if defined(WIN32) || defined(_WINDOWS) MessageBeep(MB_OK); #else (void) fprintf(stderr, "\007"); #endif } ++gEventNumber; } free(lineRead); } CloseHost(); gMayBackToTopJmp = 0; } /* Shell */