int CMountProg::Process(IInputStream *pInStream, IOutputStream *pOutStream, ProcessParam *pParam) { static PPROC pf[] = {&CMountProg::ProcedureNULL, &CMountProg::ProcedureMNT, &CMountProg::ProcedureNOIMP, &CMountProg::ProcedureUMNT, &CMountProg::ProcedureNOIMP, &CMountProg::ProcedureEXPORT}; PrintLog("MOUNT "); if (pParam->nProc >= sizeof(pf) / sizeof(PPROC)) { ProcedureNOIMP(); PrintLog("\n"); return PRC_NOTIMP; } m_pInStream = pInStream; m_pOutStream = pOutStream; m_pParam = pParam; m_nResult = PRC_OK; (this->*pf[pParam->nProc])(); PrintLog("\n"); return m_nResult; }
int CNFS3Prog::Process(IInputStream *pInStream, IOutputStream *pOutStream, ProcessParam *pParam) { static PPROC pf[] = { &CNFS3Prog::ProcedureNULL, &CNFS3Prog::ProcedureGETATTR, &CNFS3Prog::ProcedureSETATTR, &CNFS3Prog::ProcedureLOOKUP, &CNFS3Prog::ProcedureACCESS, &CNFS3Prog::ProcedureREADLINK, &CNFS3Prog::ProcedureREAD, &CNFS3Prog::ProcedureWRITE, &CNFS3Prog::ProcedureCREATE, &CNFS3Prog::ProcedureMKDIR, &CNFS3Prog::ProcedureSYMLINK, &CNFS3Prog::ProcedureMKNOD, &CNFS3Prog::ProcedureREMOVE, &CNFS3Prog::ProcedureRMDIR, &CNFS3Prog::ProcedureRENAME, &CNFS3Prog::ProcedureLINK, &CNFS3Prog::ProcedureREADDIR, &CNFS3Prog::ProcedureREADDIRPLUS, &CNFS3Prog::ProcedureFSSTAT, &CNFS3Prog::ProcedureFSINFO, &CNFS3Prog::ProcedurePATHCONF, &CNFS3Prog::ProcedureCOMMIT }; nfsstat3 stat; struct tm current; time_t now; time(&now); localtime_s(¤t, &now); PrintLog("[%i:%i:%i] NFS ", current.tm_hour, current.tm_min, current.tm_sec); if (pParam->nProc >= sizeof(pf) / sizeof(PPROC)) { ProcedureNOIMP(); PrintLog("\n"); return PRC_NOTIMP; } m_pInStream = pInStream; m_pOutStream = pOutStream; m_pParam = pParam; m_nResult = PRC_OK; try { stat = (this->*pf[pParam->nProc])(); } catch (...) { m_nResult = PRC_FAIL; } PrintLog(" "); if (m_nResult == PRC_FAIL) { //input data is truncated PrintLog("fail"); } else { switch (stat) { case NFS3_OK: PrintLog("OK"); break; case NFS3ERR_PERM: PrintLog("PERM"); break; case NFS3ERR_NOENT: PrintLog("NOENT"); break; case NFS3ERR_IO: PrintLog("IO"); break; case NFS3ERR_NXIO: PrintLog("NXIO"); break; case NFS3ERR_ACCES: PrintLog("ACCESS"); break; case NFS3ERR_EXIST: PrintLog("EXIST"); break; case NFS3ERR_XDEV: PrintLog("XDEV"); break; case NFS3ERR_NODEV: PrintLog("NODEV"); break; case NFS3ERR_NOTDIR: PrintLog("NOTDIR"); break; case NFS3ERR_ISDIR: PrintLog("ISDIR"); break; case NFS3ERR_INVAL: PrintLog("INVAL"); break; case NFS3ERR_FBIG: PrintLog("FBIG"); break; case NFS3ERR_NOSPC: PrintLog("NOSPC"); break; case NFS3ERR_ROFS: PrintLog("ROFS"); break; case NFS3ERR_MLINK: PrintLog("MLINK"); break; case NFS3ERR_NAMETOOLONG: PrintLog("NAMETOOLONG"); break; case NFS3ERR_NOTEMPTY: PrintLog("NOTEMPTY"); break; case NFS3ERR_DQUOT: PrintLog("DQUOT"); break; case NFS3ERR_STALE: PrintLog("STALE"); break; case NFS3ERR_REMOTE: PrintLog("REMOTE"); break; case NFS3ERR_BADHANDLE: PrintLog("BADHANDLE"); break; case NFS3ERR_NOT_SYNC: PrintLog("NOT_SYNC"); break; case NFS3ERR_BAD_COOKIE: PrintLog("BAD_COOKIE"); break; case NFS3ERR_NOTSUPP: PrintLog("NOTSUPP"); break; case NFS3ERR_TOOSMALL: PrintLog("TOOSMALL"); break; case NFS3ERR_SERVERFAULT: PrintLog("SERVERFAULT"); break; case NFS3ERR_BADTYPE: PrintLog("BADTYPE"); break; case NFS3ERR_JUKEBOX: PrintLog("JUKEBOX"); break; default: assert(false); break; } } PrintLog("\n"); return m_nResult; }