int CConfigHandler::parse(const char *szFileName, int (*handler)(void *, const char *, const char *, const char *), void *object) { int nRet = -1; FILE *pstream; if (isValidStr(szFileName, 255)) { pstream = fopen(szFileName, "r"); if (pstream) { nRet = parseFile(pstream, handler, object); fclose(pstream); } else { _DBG("open config file %s fail", szFileName); } } return nRet; }
int CCmpHandler::parseBody(int nCommand, const void *pData, CDataHandler<std::string> &rData) { int nRet = 0; int nStrLen = 0; int nTotalLen = 0; int nBodyLen = 0; int nIndex = 0; int nPort = 0; int *pType; int nType = 0; char * pBody; char temp[MAX_SIZE]; int nMacCount = 0; char macName[13]; nTotalLen = getLength(pData); nBodyLen = nTotalLen - sizeof(CMP_HEADER); if (0 < nBodyLen) { pBody = (char*) ((char *) const_cast<void*>(pData) + sizeof(CMP_HEADER)); switch (nCommand) { case bind_request: if (isValidStr((const char*) pBody, MAX_SIZE)) { memset(temp, 0, sizeof(temp)); strcpy(temp, pBody); rData.setData("id", temp); nStrLen = strlen(temp); ++nStrLen; pBody += nStrLen; } break; case power_port_set_request: memset(temp, 0, sizeof(temp)); memcpy(temp, pBody, 1); ++pBody; rData.setData("wire", temp); memset(temp, 0, sizeof(temp)); memcpy(temp, pBody, 1); ++pBody; rData.setData("port", temp); memset(temp, 0, sizeof(temp)); memcpy(temp, pBody, 1); ++pBody; rData.setData("state", temp); if (isValidStr((const char*) pBody, MAX_SIZE)) { memset(temp, 0, sizeof(temp)); strcpy(temp, pBody); rData.setData("controller", temp); nStrLen = strlen(temp); ++nStrLen; pBody += nStrLen; } break; case power_port_state_request: memset(temp, 0, sizeof(temp)); memcpy(temp, pBody, 1); ++pBody; rData.setData("wire", temp); if (isValidStr((const char*) pBody, MAX_SIZE)) { memset(temp, 0, sizeof(temp)); strcpy(temp, pBody); rData.setData("controller", temp); nStrLen = strlen(temp); ++nStrLen; pBody += nStrLen; } break; case initial_request: nType = ntohl(*((int*) pBody)); rData.setData("type", ConvertToString(nType)); pBody += 4; break; case sign_up_request: case authentication_request: case access_log_request: nType = ntohl(*((int*) pBody)); rData.setData("type", ConvertToString(nType)); pBody += 4; if (isValidStr((const char*) pBody, MAX_SIZE)) { memset(temp, 0, sizeof(temp)); strcpy(temp, pBody); rData.setData("data", temp); nStrLen = strlen(temp); ++nStrLen; pBody += nStrLen; } break; case mdm_login_request: if (isValidStr((const char*) pBody, MAX_SIZE)) { memset(temp, 0, sizeof(temp)); strcpy(temp, pBody); rData.setData("account", temp); nStrLen = strlen(temp); ++nStrLen; pBody += nStrLen; } if (isValidStr((const char*) pBody, MAX_SIZE)) { memset(temp, 0, sizeof(temp)); strcpy(temp, pBody); rData.setData("password", temp); nStrLen = strlen(temp); ++nStrLen; pBody += nStrLen; } break; case mdm_operate_request: if (isValidStr((const char*) pBody, MAX_SIZE)) { memset(temp, 0, sizeof(temp)); strcpy(temp, pBody); rData.setData("token", temp); nStrLen = strlen(temp); ++nStrLen; pBody += nStrLen; } break; case sdk_tracker_request: if (isValidStr((const char*) pBody, MAX_SIZE)) { memset(temp, 0, sizeof(temp)); strcpy(temp, pBody); rData.setData("data", temp); nStrLen = strlen(temp); ++nStrLen; pBody += nStrLen; } break; } } else { _log("[CMP Parser]CMP body length error"); nRet = -1; } if (-1 == nRet) { _log("[CMP Parser] parse CMP body fail"); } else { nRet = rData.size(); } return nRet; }