⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 deviceservice.cpp

📁 Software Testing Automation Framework (STAF)的开发代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
        pData->fListDeviceMapClass->addKey("type",    "Type");        pData->fListDeviceMapClass->addKey("model",   "Model");        pData->fListDeviceMapClass->addKey("serial#", "Serial Number");        pData->fListDeviceMapClass->setKeyProperty(            "serial#", "display-short-name", "Serial #");        // Construct map class for the result from a QUERY request.        pData->fQueryDeviceMapClass = STAFMapClassDefinition::create(            "STAF/Service/Device/QueryDevice");        pData->fQueryDeviceMapClass->addKey("model",   "Model");        pData->fQueryDeviceMapClass->addKey("serial#", "Serial Number");        // Resolve the line separator variable for the local machine        STAFResultPtr result = pData->fHandlePtr->submit(            "local", "VAR", "RESOLVE STRING {STAF/Config/Sep/Line}");        if (result->rc != 0)        {            *pErrorBuffer = result->result.adoptImpl();            return result->rc;        }        else sLineSep = result->result;                // Resolve the machine name variable for the local machine        result = pData->fHandlePtr->submit(            "local", "VAR", "RESOLVE STRING {STAF/Config/Machine}");        if (result->rc != 0)        {            *pErrorBuffer = result->result.adoptImpl();            return result->rc;        }        else pData->fLocalMachineName = result->result;                // Create mutex semaphores for the printer and modem data maps        pData->fPrinterMapSem = STAFMutexSemPtr(            new STAFMutexSem, STAFMutexSemPtr::INIT);        pData->fModemMapSem = STAFMutexSemPtr(            new STAFMutexSem, STAFMutexSemPtr::INIT);        // Register Help Data        registerHelpData(pData, kDeviceInvalidSerialNumber,            STAFString("Invalid serial number"),            STAFString("A non-numeric value was specified for serial number"));    }    catch (STAFException &e)    {        STAFString result;                result += STAFString("In DeviceService.cpp: STAFServiceInit")            + kUTF8_SCOLON;                    result += STAFString("Name: ") + e.getName() + kUTF8_SCOLON;        result += STAFString("Location: ") + e.getLocation() + kUTF8_SCOLON;        result += STAFString("Text: ") + e.getText() + kUTF8_SCOLON;        result += STAFString("Error code: ") + e.getErrorCode() + kUTF8_SCOLON;                *pErrorBuffer = result.adoptImpl();    }    catch (...)    {        STAFString error(                    "DeviceService.cpp: STAFServiceInit: Caught unknown "                    "exception in STAFServiceServiceInit()");        *pErrorBuffer = error.adoptImpl();    }        return retCode;}STAFRC_t STAFServiceAcceptRequest(STAFServiceHandle_t serviceHandle,                                  void *pRequestInfo, unsigned int reqLevel,                                  STAFString_t *pResultBuffer){    if (reqLevel != 30) return kSTAFInvalidAPILevel;    STAFRC_t retCode = kSTAFUnknownError;    try    {        STAFResultPtr result(new STAFResult(),                             STAFResultPtr::INIT);                STAFServiceRequestLevel30 *pInfo =            reinterpret_cast<STAFServiceRequestLevel30 *>(pRequestInfo);        DeviceServiceData *pData =            reinterpret_cast<DeviceServiceData *>(serviceHandle);        STAFString request(pInfo->request);        STAFString action = request.subWord(0, 1).toLowerCase();                // Call functions for the request        if (action == "add")            result = handleAdd(pInfo, pData);        else if (action == "delete")            result = handleDelete(pInfo, pData);        else if (action == "query")            result = handleQuery(pInfo, pData);        else if (action == "list")            result = handleList(pInfo, pData);        else if (action == "help")            result = handleHelp(pInfo, pData);        else if (action == "version")            result = handleVersion(pInfo, pData);        else        {            result = STAFResultPtr(new STAFResult(kSTAFInvalidRequestString,                                   request.subWord(0, 1)),                                    STAFResultPtr::INIT);        }        *pResultBuffer = result->result.adoptImpl();        retCode = result->rc;    }    catch (STAFException &e)    {         STAFString result;                result += STAFString("In DeviceService.cpp: STAFServiceAcceptRequest")            + kUTF8_SCOLON;                    result += STAFString("Name: ") + e.getName() + kUTF8_SCOLON;        result += STAFString("Location: ") + e.getLocation() + kUTF8_SCOLON;        result += STAFString("Text: ") + e.getText() + kUTF8_SCOLON;        result += STAFString("Error code: ") + e.getErrorCode() + kUTF8_SCOLON;                *pResultBuffer = result.adoptImpl();    }    catch (...)    {        STAFString error(                    "DeviceService.cpp: STAFServiceAcceptRequest: Caught "                    "unknown exception in STAFServiceAcceptRequest()");        *pResultBuffer = error.adoptImpl();    }    return retCode;}STAFRC_t STAFServiceTerm(STAFServiceHandle_t serviceHandle,                         void *pTermInfo, unsigned int termLevel,                         STAFString_t *pErrorBuffer){    if (termLevel != 0) return kSTAFInvalidAPILevel;    STAFRC_t retCode = kSTAFUnknownError;    try    {        retCode = kSTAFOk;        DeviceServiceData *pData =            reinterpret_cast<DeviceServiceData *>(serviceHandle);        // Un-register Help Data        unregisterHelpData(pData, kDeviceInvalidSerialNumber);    }    catch (STAFException &e)    {         STAFString result;                result += STAFString("In DeviceService.cpp: STAFServiceTerm")            + kUTF8_SCOLON;                    result += STAFString("Name: ") + e.getName() + kUTF8_SCOLON;        result += STAFString("Location: ") + e.getLocation() + kUTF8_SCOLON;        result += STAFString("Text: ") + e.getText() + kUTF8_SCOLON;        result += STAFString("Error code: ") + e.getErrorCode() + kUTF8_SCOLON;                *pErrorBuffer = result.adoptImpl();    }    catch (...)    {        STAFString error(                    "DeviceService.cpp: STAFServiceTerm: Caught unknown "                    "exception in STAFServiceTerm()");        *pErrorBuffer = error.adoptImpl();    }    return retCode;}STAFRC_t STAFServiceDestruct(STAFServiceHandle_t *serviceHandle,                             void *pDestructInfo, unsigned int destructLevel,                             STAFString_t *pErrorBuffer){    if (destructLevel != 0) return kSTAFInvalidAPILevel;    STAFRC_t retCode = kSTAFUnknownError;    try    {        DeviceServiceData *pData =            reinterpret_cast<DeviceServiceData *>(*serviceHandle);        delete pData;        *serviceHandle = 0;        retCode = kSTAFOk;    }    catch (STAFException &e)    {         STAFString result;                result += STAFString("In DeviceService.cpp: STAFServiceDestruct")            + kUTF8_SCOLON;                    result += STAFString("Name: ") + e.getName() + kUTF8_SCOLON;        result += STAFString("Location: ") + e.getLocation() + kUTF8_SCOLON;        result += STAFString("Text: ") + e.getText() + kUTF8_SCOLON;        result += STAFString("Error code: ") + e.getErrorCode() + kUTF8_SCOLON;                *pErrorBuffer = result.adoptImpl();    }    catch (...)    {        STAFString error(                    "DevicePoolService.cpp: STAFServiceDestruct: Caught "                    "unknown exception in STAFServiceDestruct()");        *pErrorBuffer = error.adoptImpl();    }    return retCode;}// Handles device add entry requestsSTAFResultPtr handleAdd(STAFServiceRequestLevel30 *pInfo,                         DeviceServiceData *pData){    // Verify the requester has at least trust level 3    VALIDATE_TRUST(3, pData->fShortName, "ADD", pData->fLocalMachineName);        // Parse the request    STAFCommandParseResultPtr parsedResult =         pData->fAddParser->parse(pInfo->request);    if (parsedResult->rc != kSTAFOk)    {        return STAFResultPtr(new STAFResult(kSTAFInvalidRequestString,                             parsedResult->errorBuffer), STAFResultPtr::INIT);    }    // Resolve any STAF variables in the printer option's value       STAFResultPtr resultPtr = resolveOp(pInfo, pData, parsedResult, "PRINTER");    if (resultPtr->rc != 0) return resultPtr;    STAFString printer = resultPtr->result;    // Resolve any STAF variables in the modem option's value       resultPtr = resolveOp(pInfo, pData, parsedResult, "MODEM");    if (resultPtr->rc != 0) return resultPtr;    STAFString modem = resultPtr->result;        // Resolve any STAF variables in the model option's value    resultPtr = resolveOp(pInfo, pData, parsedResult, "MODEL");    if (resultPtr->rc != 0) return resultPtr;    STAFString model = resultPtr->result;        // Resolve any STAF variables in the sn option's value    resultPtr = resolveOp(pInfo, pData, parsedResult, "SN");    if (resultPtr->rc != 0) return resultPtr;    STAFString serialNumber = resultPtr->result;    // Verify that the serial number is numeric        if (!serialNumber.isDigits())    {        // Note that instead of creating a new error code specific for        // this service, could use kSTAFInvalidValue instead.        return STAFResultPtr(            new STAFResult(kDeviceInvalidSerialNumber, serialNumber),             STAFResultPtr::INIT);    }        // Add the device to the printer map or the modem map    if (printer != "")    {        STAFMutexSemLock lock(*pData->fPrinterMapSem);                pData->fPrinterMap.insert(DeviceMap::value_type(printer,            DeviceDataPtr(new DeviceData(printer, model, serialNumber),             DeviceDataPtr::INIT)));    }    else if (modem != "")    {        STAFMutexSemLock lock(*pData->fModemMapSem);                pData->fModemMap.insert(DeviceMap::value_type(modem,            DeviceDataPtr(new DeviceData(modem, model, serialNumber),             DeviceDataPtr::INIT)));    }    // Return an Ok result        return STAFResultPtr(new STAFResult(kSTAFOk), STAFResultPtr::INIT);}// Handles device deletion requestsSTAFResultPtr handleDelete(STAFServiceRequestLevel30 *pInfo,                            DeviceServiceData *pData){    // Verify the requester has at least trust level 4    VALIDATE_TRUST(4, pData->fShortName, "DELETE", pData->fLocalMachineName);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -