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;

}
예제 #2
0
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;
}