Esempio n. 1
0
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;
}
Esempio n. 2
0
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(&current, &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;
}