cnapstag.cpp

来自「液晶电视完整代码可实现人机界面」· C++ 代码 · 共 779 行 · 第 1/2 页

CPP
779
字号
			filelog(CIS_INTER_MB, "Error:mmlInfo not mml service head "				"finsh: flag in file=[%s] at line=[%d]\n", __FILE__, __LINE__);			return FALSE;		}	}	//分析出报文体	if((sFindStr = strstr(mmlInfo, MML_CONTENT)) != NULL)	{	    filelog(CIS_INTER_MB, "Parser message content\n");		//PrintFormat(PROMPT, "mmlInfo=[%d][%s]\n", strlen(mmlInfo), mmlInfo);		if((sFinsh = strstr(mmlInfo, FLAG_FINSH)) != NULL)		{			//去掉报文类别标识及结束标志			sFindStr += MAX_LEN_FLAG_MSG;			sFinsh -= 1;			iContentLen = sFinsh - sFindStr;			if(iContentLen <= 0 || iContentLen > MAX_LEN_MML_CONT)			{				filelog(CIS_INTER_MB, "Error:mmlContentLen=[%d] invalid in file"					"=[%s] at line=[%d]\n", iContentLen, __FILE__, __LINE__);			}			mmlContentLen = iContentLen;			mmlContent = new char[mmlContentLen+2];			if(NULL == mmlContent)			{				filelog(CIS_INTER_MB, "Error:allocate memory fail in file=[%s]"					"at line=[%d]\n", __FILE__, __LINE__);				return FALSE;			}			memset(mmlContent, 0, mmlContentLen+2);			memcpy(mmlContent, sFindStr, mmlContentLen);			strcat(mmlContent, FLAG_COLON);			iContentLen = 0;			sFindStr = NULL;			mmlInfo = sFinsh+2;			sFinsh = NULL;			bRet = parserContent(mmlContent, mmlContentParaList, 				&mmlContentParaNum);			if(FALSE == bRet)			{				return bRet;			}		}		else		{			filelog(CIS_INTER_MB, "Error:mmlInfo not mml content finsh flag "				"in file=[%s] at line=[%d]\n", __FILE__, __LINE__);			return FALSE;		}	}	else	{		filelog(CIS_INTER_MB, "Error:mmlInfo not mml content in file=[%s] "			"at line=[%d]\n",  __FILE__, __LINE__);		return FALSE;	}	//分析出报尾	if((sFindStr = strstr(mmlInfo, MML_TAIL)) != NULL)	{		filelog(CIS_INTER_MB, "Parser message tail\n");		//PrintFormat(PROMPT, "mmlInfo=[%d][%s]\n", strlen(mmlInfo), mmlInfo);		if((sFinsh = strstr(mmlInfo, FLAG_FINSH)) != NULL)		{			//去掉报文类别标识及结束标志			sFindStr += MAX_LEN_FLAG_MSG;			sFinsh -= 1;			iContentLen = sFinsh - sFindStr;			if(iContentLen <=0 || iContentLen > MAX_LEN_MML_TAIL)			{				filelog(CIS_INTER_MB, "Error:mmlTailLen=[%d] invalid in file="					"[%s] at line=[%d]\n", iContentLen, __FILE__, __LINE__);				return FALSE;			}			mmlTailLen = iContentLen;			mmlTail = new char[mmlTailLen+2];			if(NULL == mmlTail)			{				filelog(CIS_INTER_MB, "Error:allocate memory fail in file=[%s]"					"at line=[%d]\n", __FILE__, __LINE__);				return FALSE;			}			memset(mmlTail, 0, mmlTailLen+2);			memcpy(mmlTail, sFindStr, mmlTailLen);			strcat(mmlTail, FLAG_COLON);			//bRet = parserContent(mmlTail, mmlTailParaList, &mmlTailParaNum);			//if(FALSE == bRet)			//{			//	return bRet;			//}		}		else		{			filelog(CIS_INTER_MB, "Error:mmlInfo not mml tail finsh flag "				"in file=[%s] at line=[%d]\n",  __FILE__, __LINE__);			return FALSE;		}	}	mmlInfo = mmlInfoHead;	filelog(CIS_INTER_MB, "Exit TCnapsTagMML::parserMmlcmd");	return TRUE;}/****************************************************************************函数说明:MML的内容分析函数,根据其人机接口信息分析出报文头,报文业务头*报文体,报文尾的具体内容,分析到参数中*输入参数:无*           *输出参数:无*          *          *返回值  :TBool*          TRUE  处理成功*     FALSE 处理失败*作    者:zhanglongping *日    期: 2006-10-15****************************************************************************/BOOL TCnapsTagMML::parserContent(char * paraContent, TParameter *paraList, int *paraNum){	filelog(CIS_INTER_MB, "Enter TCnapsTagMML::parserContent\n");	if(NULL == paraContent || strlen(paraContent) <= 0 || 		strlen(paraContent) >MAX_LEN_MML_INFO)	{		filelog(CIS_INTER_MB, "Error:paraConten invalid and len=[%d] in file="			"[%s] at line=[%d]\n", strlen(paraContent), __FILE__, __LINE__);		return FALSE;	}	int iParaContentLen = strlen(paraContent);	int i = 0;	char *sValue = paraContent;	while(sValue != NULL)	{		char *sParaName = NULL;		sParaName = new char[MAX_LEN_PARA_NAME+1];		if(NULL == sParaName)		{			filelog(CIS_INTER_MB, "Error:allocate memory fail in file=[%s]"				"at line=[%d]\n", __FILE__, __LINE__);			return FALSE;		}		memset(sParaName, 0, MAX_LEN_PARA_NAME+1);		//从报文开始处得到报文内容中的TAG值并自截报文的TAG内容		if(NULL != (sValue=findTag(paraContent, FLAG_TAG, sParaName)))		{			char *sFind = NULL;			//得到其TAG对应的值保存到paraList列表中			if((sFind=strstr(sValue, FLAG_COLON)) !=NULL)			{				int len = sFind - sValue;				//验证值的长度,对于大于两K的参数值跳过不分析				if(len <= 0 || len > MAX_LEN_PARA_VALUE)				{					//PrintFormat(PROMPT, "Parameter len=[%d] invalid too long "					//	"and skip the parameter\n");					paraList[i].paraName = sParaName;					paraList[i].paraValueLen = len;					char *strParaValue = new char[11];					if(NULL == strParaValue)					{						filelog(CIS_INTER_MB, "Error:allocate memory fail in "							"file=[%s] at line=[%d]\n", __FILE__, __LINE__);						delete [] sParaName;					}					memset(strParaValue, 0, 11);					if(len <=0)					{						strcpy(strParaValue, "not value");					}					if(len > MAX_LEN_PARA_VALUE)					{						strcpy(strParaValue, "too long");					}					paraList[i].paraValue = strParaValue;										//打印分析出来的参数信息					filelog(CIS_INTER_MB, "paraList[%d].paraName=[%s]\n",						i, paraList[i].paraName);					filelog(CIS_INTER_MB, "paraList[%d].paraValue=[%d][%s]\n",						i, paraList[i].paraValueLen, paraList[i].paraValue);					i++;					sValue = sFind;										paraContent = sValue;					continue;				}								char *sParaValue = new char[len+1];				if(NULL == sParaValue)				{					filelog(CIS_INTER_MB, "Error:allocate memory fail in "						"file=[%s] at line=[%d]\n", __FILE__, __LINE__);					delete [] sParaName;					return FALSE;				}								memset(sParaValue, 0, len+1);				memcpy(sParaValue, sValue, len);								//保存参数名信息				paraList[i].paraName = sParaName;				//保存参数值信息				paraList[i].paraValueLen = len;				paraList[i].paraValue = sParaValue;								//报文内容往移动,截除已分析的参数值的内容				sValue = sFind;			}			else			{					filelog(CIS_INTER_MB,"Error:the parameter not value\n");			}			//报文内容往移动,截除已分析的内容			paraContent = sValue;			//打印分析出来的参数信息			filelog(CIS_INTER_MB, "paraList[%d].paraName=[%s]\n",				i, paraList[i].paraName);			filelog(CIS_INTER_MB, "paraList[%d].paraValue=[%d][%s]\n",				i, paraList[i].paraValueLen, paraList[i].paraValue);			i++;		}		else		{			filelog(CIS_INTER_MB, "Not found or parser complete\n");			break;		}			}	*paraNum = i;	filelog(CIS_INTER_MB, "Parser number=[%d] parameter\n", i);		filelog(CIS_INTER_MB, "Exit TCnapsTagMML::parserContent\n");	return TRUE;}/****************************************************************************函数说明:定长通配查找报文中的TAG的函数*输入参数:char *sStr :源报文内容*          char *sInTag :定长的TAG通配符*输出参数:char *sOutTag:得到真正的TAG值*          *          *返回值  :char *     :找到TAG后VALUE的首地址*          *     *作    者:zhanglongping *日    期: 2006-10-15****************************************************************************/char* TCnapsTagMML::findTag(char * sStr, char * sInTag, char *sOutTag){	if(NULL == sStr || NULL == sInTag || NULL == sOutTag)	{		filelog(CIS_INTER_MB, "Error:invalid input or output parameter in file="			"[%s] at line=[%d]", __FILE__, __LINE__);		return NULL;	}	char *sStart = NULL;	char *sEnd = NULL;	char *sRet = NULL;	sStart = sStr;	sEnd = sInTag;	int iInTagLen = strlen(sInTag)-1;		if(strlen(sStart) <= (int)iInTagLen)	{		filelog(CIS_INTER_MB, "Already parser message end\n");		return sRet;		}		if(*sStart == *sEnd)	{		sStart += iInTagLen;		sEnd += iInTagLen;				if(*sStart == *sEnd)		{			sRet = sStart+1;			memcpy(sOutTag, sStart-iInTagLen, iInTagLen+1);		}		else		{			filelog(CIS_INTER_MB, "Not found sInTag=[%s]\n", sInTag);		}	}	return sRet;}/****************************************************************************函数说明:MML的内容分析函数,根据其人机接口信息分析出报文头,报文业务头*报文体,报文尾的具体内容,分析到参数中*输入参数:TMMLContType mmlContType:查找报文内容的类型*          char *sInTag :要查找值的TAG*输出参数:char *sOutValue:得到对应TAG的值*          *          *返回值  :TBool*          TRUE  处理成功*     FALSE 处理失败*作    者:zhanglongping *日    期: 2006-10-15****************************************************************************/BOOL TCnapsTagMML::getParaValue(TMMLContType mmlContType, char * sInTag, char * sOutValue){	if(INVALID_MMLCONTTYPE >= mmlContType || 		INVALID_MMLCONTTYPE_END <= mmlContType)	{		filelog(CIS_INTER_MB, "Error invalid mmlContType in file=[%s] at line="			"[%d]\n", __FILE__, __LINE__);		return FALSE;	}	TParameter *paraList = NULL;	int paraNum = 0;	BOOL bFound = FALSE;	switch (mmlContType)	{		case MML_CONTTYPE_HEAD:		{			paraList = mmlHeadParaList;			paraNum = mmlHeadParaNum;			break;		}				case MML_CONTTYPE_SERVICE_HEAD:		{			paraList = mmlServiceHeadParaList;			paraNum = mmlServiceHeadParaNum;			break;		}		case MML_CONTTYPE_CONT:		{			paraList = mmlContentParaList;			paraNum = mmlContentParaNum;			break;		}		case MML_CONTTYPE_TAIL:		{			paraList = mmlTailParaList;			paraNum = mmlTailParaNum;			break;		}		default:			filelog(CIS_INTER_MB, "Error:invalid mmlContType=[%d] in file=[%s] "				"at line=[%d]\n", mmlContType, __FILE__, __LINE__);			break;	}	for(int i=0; i<paraNum; i++)	{		if(0 == memcmp(paraList->paraName, sInTag, strlen(sInTag)))		{			filelog(CIS_INTER_MB, "Success:found paraName=[%s] and paraValue="				"[%d][%s]\n", paraList->paraName,paraList->paraValueLen,				paraList->paraValue);						memcpy(sOutValue, paraList->paraValue, paraList->paraValueLen);			bFound = TRUE;			break;		}		paraList++;	}	return bFound;}

⌨️ 快捷键说明

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