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

📄 cnapstag.cpp

📁 液晶电视完整代码可实现人机界面
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			memcpy(mmlTail, sFindStr, mmlTailLen);			strcat(mmlTail, FLAG_COLON);			//printf("mmlTail:%s\n", mmlTail);			//bRet = parserContent(mmlTail, mmlTailParaList, &mmlTailParaNum);			//if(FALSE == bRet)			//{			//	return bRet;			//}		}		else		{			filelog(CIS_SRV_LOG, "Error:mmlInfo not mml tail finsh flag "				"in file=[%s] at line=[%d]\n",  __FILE__, __LINE__);			return FALSE;		}	}	mmlInfo = mmlInfoHead;	filelog(CIS_SRV_LOG, "Exit TCnapsTagMML::parserMmlcmd");	return TRUE;}/****************************************************************************函数说明:MML的内容分析函数,根据其人机接口信息分析出报文头,报文业务头*报文体,报文尾的具体内容,分析到参数中*输入参数:无*           *输出参数:无*          *          *返回值  :TBool*          TRUE  处理成功*     FALSE 处理失败*作    者:zhanglongping *日    期: 2006-10-15****************************************************************************/BOOL TCnapsTagMML::parserContent(char * paraContent, TParameter *paraList, int *paraNum){	filelog(CIS_SRV_LOG, "Enter TCnapsTagMML::parserContent\n");	if(NULL == paraContent || strlen(paraContent) <= 0 || 		strlen(paraContent) >MAX_LEN_MML_INFO)	{		filelog(CIS_SRV_LOG, "Error:paraConten invalid and len=[%d] in file="			"[%s] at line=[%d]\n", strlen(paraContent), __FILE__, __LINE__);		return FALSE;	}	long i = 0;	/////////////////////////////////////////////////////add by lics	const char *p1 = paraContent+1;	const char *p2 = p1;		int	isName = 1;	char name[64];		while(*p2 != '}' && *p2 != 0){		p2 ++;		if(*p2 == ':'){			//			if(isName){				memset(name, 0, sizeof(name));				if(p2 - p1 >= 63)					return FALSE;		//tagName too long				strncpy(name, p1, p2-p1);				p1 = p2+1;				isName = 0;			}else{				isName = 1;				if(!strcmp(name, "")){					return FALSE;		//包错误				}				//this->addTag(name, p1, p2-p1);				char *pn = new char[strlen(name) + 3];				char *pv = new char[p2 - p1 + 1];								memset(pn, 0, strlen(name) + 3);				memset(pv, 0, p2-p1+1);				strcpy(pn,":");				memcpy(pn+1, name, strlen(name));				strcat(pn, ":");								memcpy(pv, p1, p2-p1);								paraList[i].paraName = pn;				paraList[i].paraValueLen = p2-p1;				paraList[i].paraValue = pv;                filelog(CIS_SRV_LOG, "ParaInfo=[%s][%d][%s]\n",                     paraList[i].paraName,                    paraList[i].paraValueLen,                    paraList[i].paraValue);				i++;								p1 = p2+1;			}		}	}	if(isName == 0 && strcmp(name, "")!=0){		//this->addTag(name, p1, p2-p1);		char *pn = new char[strlen(name) + 3];		char *pv = new char[p2 - p1 + 1];				memset(pn, 0, strlen(name) + 3);		memset(pv, 0, p2-p1+1);		strcpy(pn,":");		memcpy(pn+1, name, strlen(name));		strcat(pn, ":");						memcpy(pv, p1, p2-p1);				paraList[i].paraName = pn;		paraList[i].paraValueLen = p2-p1;		paraList[i].paraValue = pv;		i++;						p1 = p2+1;	}	////////////////////////////////////////////////////////////////		/*int iParaContentLen = strlen(paraContent);		//delete by lics	char *sValue = paraContent;	while(sValue != NULL && strlen(sValue)>=2)	{		char *sParaName = NULL;		sParaName = new char[MAX_LEN_PARA_NAME+1];		if(NULL == sParaName)		{			filelog(CIS_SRV_LOG, "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_SRV_LOG, "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_SRV_LOG, "paraList[%d].paraName=[%s]\n",						i, paraList[i].paraName);					filelog(CIS_SRV_LOG, "paraList[%d].paraValue=[%d][%s]\n",						i, paraList[i].paraValueLen, paraList[i].paraValue);					i++;					sValue = sFind;										paraContent = sValue;					printf("**************");					continue;					//printf("**************");				}								char *sParaValue = new char[len+1];				if(NULL == sParaValue)				{					filelog(CIS_SRV_LOG, "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;				printf("tagName:%s---value:%s\n",sParaName, sParaValue);								//报文内容往移动,截除已分析的参数值的内容				sValue = sFind;			}			else			{					filelog(CIS_SRV_LOG,"Error:the parameter not value\n");			}			//报文内容往移动,截除已分析的内容			paraContent = sValue;			//打印分析出来的参数信息			filelog(CIS_SRV_LOG, "paraList[%d].paraName=[%s]\n",				i, paraList[i].paraName);			filelog(CIS_SRV_LOG, "paraList[%d].paraValue=[%d][%s]\n",				i, paraList[i].paraValueLen, paraList[i].paraValue);			i++;		}		else		{			filelog(CIS_SRV_LOG, "Not found or parser complete\n");			break;		}			}//end while	*/	*paraNum = i;	filelog(CIS_SRV_LOG, "Parser number=[%d] parameter\n", i);		filelog(CIS_SRV_LOG, "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){	static char *sRet = NULL;	char *p = sStr;	//char *q = sStr;	if(*p != ':' || *p == 0){		return NULL;	}	p++;	while(*p != ':' && *p != 0){		p ++;	}	strncpy(sOutTag, sStr, p-sStr+1);		//printf("sOutTag:%s sStr:%s--%d\n", sOutTag, sStr, p-sStr+1);	sRet = p +1 ;	if(*p == 0 || *sRet == 0)		return NULL;	return sRet;	/*	if(NULL == sStr || NULL == sInTag || NULL == sOutTag)	{		filelog(CIS_SRV_LOG, "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_SRV_LOG, "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_SRV_LOG, "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_SRV_LOG, "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_SRV_LOG, "Error:invalid mmlContType=[%d] in file=[%s] "				"at line=[%d]\n", mmlContType, __FILE__, __LINE__);			break;	}	if(paraList == NULL)		return FALSE;	//printf("\nparaNum:%d\n", paraNum);	for(int i=0; i<paraNum; i++)	{		//printf("paraName:%d---%s\n", i, paraList->paraName);		if(strlen(sInTag) == strlen(paraList->paraName)){			int j = 0;			for(; j<strlen(sInTag); j++){				if(toupper(sInTag[j]) != toupper(paraList->paraName[j]))					break;			}			if(j >= strlen(sInTag) && paraList->paraValueLen > 0){				memcpy(sOutValue, paraList->paraValue, paraList->paraValueLen);                filelog(CIS_SRV_LOG, "Success:found paraName=[%s][%d][%s]\n",                    paraList->paraName,                    paraList->paraValueLen,                    paraList->paraValue);				return TRUE;			}					}		/*if(0 == stricmp(paraList->paraName, sInTag))		{			filelog(CIS_SRV_LOG, "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++;	}	//printf("\n%s not found\n", sInTag);	return bFound;}const char* TCnapsTagMML::getParaValue(TMMLContType mmlContType, char * sInTag){		if(INVALID_MMLCONTTYPE >= mmlContType || 		INVALID_MMLCONTTYPE_END <= mmlContType)	{		filelog(CIS_SRV_LOG, "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_SRV_LOG, "Error:invalid mmlContType=[%d] in file=[%s] "				"at line=[%d]\n", mmlContType, __FILE__, __LINE__);			break;	}	if(paraList == NULL)		return FALSE;		for(int i=0; i<paraNum; i++)	{		if(strlen(sInTag) == strlen(paraList->paraName)){			int j = 0;			for(j=0; j<strlen(sInTag); j++){				if(toupper(sInTag[j]) != toupper(paraList->paraName[j]))					break;			}			if(j >= strlen(sInTag)){				if(paraList->paraValueLen <= 0 || paraList->paraValueLen>= MAX_LEN_PARA_VALUE)					return NULL;                                filelog(CIS_SRV_LOG, "Success:found paraName=[%s][%d][%s]\n",                    paraList->paraName,                    paraList->paraValueLen,                    paraList->paraValue);				return paraList->paraValue;			}					}				paraList++;	}	return NULL;}

⌨️ 快捷键说明

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