cnapstag.cpp
来自「液晶电视完整代码可实现人机界面」· C++ 代码 · 共 779 行 · 第 1/2 页
CPP
779 行
/***文件头描述**/#include "cnapstag.hpp"#include "mmlpubdef.hpp"#include "BepsSend.h"#include "libcore.h"#include "SvrDef.hpp"/****************************************************************************函数说明:TParameter的构造函数*输入参数:无* *输出参数:无* * *返回值 :无* *作 者:zhanglongping *日 期: 2006-10-15****************************************************************************/TParameter::TParameter(){ paraValueLen = 0; paraValue = NULL; paraName = NULL;}/****************************************************************************函数说明:TParameter的析构函数*输入参数:无* *输出参数:无* * *返回值 :无* *作 者:zhanglongping *日 期: 2006-10-15****************************************************************************/TParameter::~TParameter(){ if(NULL != paraName) { delete [] paraName; paraName = NULL; } if(NULL != paraValue) { delete [] paraValue; paraValue = NULL; }}/****************************************************************************函数说明:TParameter的打印函数,打印其成员值*输入参数:无* *输出参数:无* * *返回值 :TBool* TRUE 处理成功* FALSE 处理失败*作 者:zhanglongping *日 期: 2006-10-15****************************************************************************/BOOL TParameter::printParaInfo(){ //PrintFormat(PROMPT, "Enter TParameter::printParaInfo\n"); if( NULL == paraName || NULL == paraValue) { filelog(CIS_INTER_MB, "Error:parameter information invalid in file=[%s]" "at line=[%d]\n", __FILE__, __LINE__); return FALSE; } if( paraValueLen > MAX_LEN_PARA_VALUE || paraValueLen <=0) { filelog(CIS_INTER_MB, "Error:parameter length invalid in file=[%s]" "at line=[%d]\n", __FILE__, __LINE__); return FALSE; } filelog(CIS_INTER_MB, "ParaName=[%s],ParaValue=[%d][%s]\n", paraName, paraValueLen, paraValue); //PrintFormat(PROMPT, "Exit TParameter::printParaInfo"); return TRUE;}/****************************************************************************函数说明:TCnapsTagMML的构造函数*输入参数:无* *输出参数:无* * *返回值 :无* *作 者:zhanglongping *日 期: 2006-10-15****************************************************************************/TCnapsTagMML::TCnapsTagMML(){ mmlHeadLen = 0; mmlServiceHeadLen = 0; mmlContentLen = 0; mmlTailLen = 0; mmlHead = NULL; mmlServiceHead = NULL; mmlContent = NULL; mmlTail = NULL; mmlInfoLen = 0; mmlInfo = NULL; mmlHeadParaNum = 0; mmlServiceHeadParaNum = 0; mmlContentParaNum = 0; mmlTailParaNum = 0; memset(mmlHeadParaList, 0, sizeof(mmlHeadParaList)); memset(mmlServiceHeadParaList, 0, sizeof(mmlServiceHeadParaList)); memset(mmlContentParaList, 0, sizeof(mmlContentParaList)); memset(mmlTailParaList, 0, sizeof(mmlTailParaList));}/****************************************************************************函数说明:TCnapsTagMML的析构函数*输入参数:无* *输出参数:无* * *返回值 :无* *作 者:zhanglongping *日 期: 2006-10-15****************************************************************************/TCnapsTagMML::~TCnapsTagMML(){ if(NULL != mmlInfo) { delete [] mmlInfo; } if(NULL != mmlHead) { delete [] mmlHead; } if(NULL != mmlServiceHead) { delete [] mmlServiceHead; } if(NULL != mmlContent) { delete [] mmlContent; } if(NULL != mmlTail) { delete [] mmlTail; }}/****************************************************************************函数说明:TCnapsTagMML的打印函数,打印其成员值*输入参数:无* *输出参数:无* * *返回值 :TBool* TRUE 处理成功* FALSE 处理失败*作 者:zhanglongping *日 期: 2006-10-15****************************************************************************/BOOL TCnapsTagMML::printMmlcmd(){ filelog(CIS_INTER_MB, "Enter TCnapsTagMML::printMmlcmd\n"); if(NULL == mmlInfo || mmlInfoLen <= 0 || mmlInfoLen > MAX_LEN_MML_INFO) { filelog(CIS_INTER_MB, "Error:mmlInfo or mmlInfoLen=[%d] invalid in " "file=[%s] at line=[%d]\n", mmlInfoLen, __FILE__, __LINE__); return FALSE; } if(NULL == mmlContent || mmlContentLen <= 0 || mmlContentLen > MAX_LEN_MML_INFO) { filelog(CIS_INTER_MB, "Error:mmlContent or mmlContentLen=[%d] invalid " "in file=[%s] at line=[%d]\n", mmlContentLen, __FILE__, __LINE__); return FALSE; } filelog(CIS_INTER_MB, "The MML information as follow\n"); filelog(CIS_INTER_MB, "mmlInfo=[%d][%s]\n", mmlInfoLen,mmlInfo); filelog(CIS_INTER_MB, "mmlHeadParaNum=[%d], mmlServiceHeadParaNum=[%d]\n", mmlHeadParaNum, mmlServiceHeadParaNum); filelog(CIS_INTER_MB, "mmlContentParaNum=[%d], mmlTailParaNum=[%d]\n", mmlContentParaNum, mmlTailParaNum); if(NULL != mmlHead && mmlHeadLen > 0) { filelog(CIS_INTER_MB, "mmlHead=[%d][%s]\n", mmlHeadLen, mmlHead); for(int i=0; i<mmlHeadParaNum; i++) { mmlHeadParaList[i].printParaInfo(); } } if(NULL!= mmlServiceHead && mmlServiceHeadLen > 0) { filelog(CIS_INTER_MB, "mmlServiceHead=[%d][%s]\n", mmlServiceHeadLen, mmlServiceHead); for(int i=0; i<mmlServiceHeadParaNum; i++) { mmlServiceHeadParaList[i].printParaInfo(); } } if(NULL != mmlContent && mmlContentLen >0) { filelog(CIS_INTER_MB, "mmlContent=[%d][%s]\n", mmlContentLen, mmlContent); for(int i=0; i<mmlContentParaNum; i++) { mmlContentParaList[i].printParaInfo(); } } if(NULL != mmlTail && mmlTailLen > 0) { filelog(CIS_INTER_MB, "mmlTail=[%d][%s]\n", mmlTailLen, mmlTail); for(int i=0; i<mmlTailParaNum; i++) { mmlTailParaList[i].printParaInfo(); } } filelog(CIS_INTER_MB, "Exit TCnapsTagMML::printMmlcmd\n"); return TRUE;}/****************************************************************************函数说明:TCnapsTagMML的分析函数,根据其人机接口信息分析出报文头,报文业务头*报文体,报文尾*输入参数:无* *输出参数:无* * *返回值 :TBool* TRUE 处理成功* FALSE 处理失败*作 者:zhanglongping *日 期: 2006-10-15****************************************************************************/BOOL TCnapsTagMML::parserMmlcmd(){ filelog(CIS_INTER_MB, "Enter TCnapsTagMML::parserMmlcmd"); if(NULL == mmlInfo || mmlInfoLen <= 0 || mmlInfoLen > MAX_LEN_MML_INFO) { filelog(CIS_INTER_MB, "Error:mmlInfo or mmlInfoLen=[%d] invalid in " "file=[%s] at line=[%d]", mmlInfoLen, __FILE__, __LINE__); return FALSE; } //PrintFormat(PROMPT, "mmlInfo=[%d][%s]\n", strlen(mmlInfo), mmlInfo); char *sFindStr = NULL; char *sFinsh = NULL; int iContentLen = 0; BOOL bRet = TRUE; char *mmlInfoHead = mmlInfo; //分析出报文头 if((sFindStr = strstr(mmlInfo, MML_HEAD)) != NULL) { filelog(CIS_INTER_MB, "Parser message head\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_HEAD) { filelog(CIS_INTER_MB, "Error:mmlHeadLen=[%d] invalid in file=" "[%s] at line=[%d]\n", iContentLen, __FILE__, __LINE__); return FALSE; } mmlHeadLen = iContentLen; mmlHead = new char[mmlHeadLen+2]; if(NULL == mmlHead) { filelog(CIS_INTER_MB, "Error:allocate memory fail in file=[%s]" "at line=[%d]\n", __FILE__, __LINE__); return FALSE; } memset(mmlHead, 0, mmlHeadLen+2); memcpy(mmlHead, sFindStr, mmlHeadLen); strcat(mmlHead, FLAG_COLON); iContentLen = 0; sFindStr = NULL; mmlInfo = sFinsh+2; sFinsh = NULL; bRet = parserContent(mmlHead, mmlHeadParaList, &mmlHeadParaNum); if(FALSE == bRet) { return bRet; } } else { filelog(CIS_INTER_MB, "Error:mmlInfo=[%s] not mml head finsh flag " "in file=[%s] at line=[%d]\n", mmlInfo, __FILE__, __LINE__); return FALSE; } } //分析出报文中的业务头 if((sFindStr = strstr(mmlInfo, MML_SRV_HEAD)) != NULL) { filelog(CIS_INTER_MB, "Parser message service head\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_HEAD) { filelog(CIS_INTER_MB, "Error:mmlServiceHeadLen=[%d] invalid in " "file=[%s] at line=[%d]\n", iContentLen, __FILE__, __LINE__); return FALSE; } mmlServiceHeadLen = iContentLen; mmlServiceHead = new char[mmlServiceHeadLen+2]; if(NULL == mmlServiceHead) { filelog(CIS_INTER_MB, "Error:allocate memory fail in file=[%s]" "at line=[%d]\n", __FILE__, __LINE__); return FALSE; } memset(mmlServiceHead, 0, mmlServiceHeadLen+2); memcpy(mmlServiceHead, sFindStr, mmlServiceHeadLen); strcat(mmlServiceHead, FLAG_COLON); iContentLen = 0; sFindStr = NULL; mmlInfo = sFinsh+2; sFinsh = NULL; bRet = parserContent(mmlServiceHead, mmlServiceHeadParaList, &mmlServiceHeadParaNum); if(FALSE == bRet) { return bRet; } } else {
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?