void XMLConfigurator::load(XMLDocumentWrapper& xmlDoc) { setMode(Configurator::FROM_CONF); XMLNodeWrapperPtr pNode = xmlDoc.firstNode(CONFIGURE_TAG_NAME); if (pNode.isNull()) { FIRTEX_THROW(InvalidConfigException, "Load xml configure FAILED: no configure element."); } load(pNode, getMap()); }
void XMLConfigurator::load(XMLNodeWrapperPtr& pNode, Configurator::ConfMap& conf) { XMLNodeWrapperPtr pChild = pNode->firstNode(); if (pChild.isNull()) { Configurator c(conf, Configurator::TO_CONF); string sValue = pNode->getValue(); c.configure((const string&)pNode->getName(), sValue, (const string&)_T("")); conf = c.getMap(); } else if (pChild->nextSibling().isNull() && pChild->type() == XMLDocumentWrapper::NODE_DATA) { Configurator c(conf, Configurator::TO_CONF); string sValue = pChild->getValue(); c.configure((const string&)pNode->getName(), sValue, (const string&)_T("")); conf = c.getMap(); } else { Configurator::ConfMap confMap; for (XMLNodeWrapperPtr pSubNode = pNode->firstNode(); pSubNode.isNotNull(); pSubNode = pSubNode->nextSibling()) { load(pSubNode, confMap); } if (strCompareNoCase(pNode->getName(), CONFIGURE_TAG_NAME)) { Configurator c(conf, Configurator::TO_CONF); c.configure(pNode->getName(), confMap); conf = c.getMap(); } else { conf = confMap; } } }
bool HTTPWatchdogService::commandToTask(EvHttpRequestContext* pCtx, ExecutionTask& task, int32_t& stopSignal) { string sContent; if (pCtx->getMethodType() == EVHTTP_REQ_GET) { sContent = pCtx->getQuery(); KeyValueParser kvParser; if (!kvParser.parse(sContent, "&", "=")) { stringstream ss; ss << "Invalid request: [" << sContent << "]"; sendErrorMsg(pCtx, ss.str(), HTTPTypes::RESPONSE_CODE_BAD_REQUEST); return false; } string sValue; if (kvParser.getValue("process_name", sValue)) { task.command.processName = sValue; } if (kvParser.getValue("parameters", sValue)) { StringTokenizer st(sValue, ",", StringTokenizer::TOKEN_TRIM | StringTokenizer::TOKEN_IGNORE_EMPTY); task.command.parameters.assign(st.begin(), st.end()); } return true; } else // POST/PUT/DELETE { const char* p = (const char*)(pCtx->getInBuffer()->getData()); if (!p || !*p) { sendErrorMsg(pCtx, "Request missing content", HTTPTypes::RESPONSE_CODE_BAD_REQUEST); return false; } XMLDocumentWrapper xmlDoc; try { string str(p, pCtx->getInBuffer()->getLength()); xmlDoc.parse(str); } catch(const FirteXException& ex) { sendErrorMsg(pCtx, ex.what(), HTTPTypes::RESPONSE_CODE_BAD_REQUEST); return false; } XMLNodeWrapperPtr pRootNode = xmlDoc.firstNode("process"); if (pRootNode.isNull()) { sendErrorMsg(pCtx, "Missing process info", HTTPTypes::RESPONSE_CODE_BAD_REQUEST); return false; } EXTRACT_NODE_STRING2(pRootNode, "process_name", task.command.processName); if (task.command.processName.empty()) { sendErrorMsg(pCtx, "Missing process name", HTTPTypes::RESPONSE_CODE_BAD_REQUEST); return false; } XMLNodeWrapperPtr pParamRootNode = pRootNode->firstNode("parameters"); if (pParamRootNode.isNotNull()) { for (XMLNodeWrapperPtr pParamNode = pParamRootNode->firstNode("parameter"); pParamNode.isNotNull(); pParamNode = pParamNode->nextSibling()) { string str; EXTRACT_NODE_STRING(pParamNode, str); task.command.parameters.push_back(str); } } XMLNodeWrapperPtr pEnvNode = pRootNode->firstNode("environment"); if (pEnvNode.isNotNull()) { for (XMLNodeWrapperPtr pValueNode = pEnvNode->firstNode("value"); pValueNode.isNotNull(); pValueNode = pValueNode->nextSibling()) { XMLAttributeWrapperPtr pNameAttr = pValueNode->firstAttribute("name"); XMLNodeWrapperPtr pDataNode = pValueNode->firstNode(); task.envVariables.insert(make_pair(pNameAttr->getValue(), pDataNode->getValue())); } } XMLNodeWrapperPtr pProcInfoKeepTimeNode = pRootNode->firstNode("process_info_keep_time"); if (pProcInfoKeepTimeNode.isNotNull()) { task.processInfoKeepTime = NumberParser::parseInt32( pProcInfoKeepTimeNode->getValue()); } XMLNodeWrapperPtr pStopSignalNode = pRootNode->firstNode("stop_signal"); if (pStopSignalNode.isNotNull()) { stopSignal = NumberParser::parseInt32(pStopSignalNode->getValue()); } EXTRACT_NODE_STRING2(pRootNode, "work_directory", task.workDirectory); XMLNodeWrapperPtr pRestartAfterCrash = pRootNode->firstNode("restart_after_crash"); if (pRestartAfterCrash.isNotNull()) { if (!strCompareNoCase(pRestartAfterCrash->getValue(), "true")) { task.restartAfterCrash = true; } else { task.restartAfterCrash = false; } } return true; } //end else // POST/PUT/DELETE }