cmpppack.c

来自「用c/c++实现的一个CMPP API」· C语言 代码 · 共 2,267 行 · 第 1/5 页

C
2,267
字号
        return 0;}/************************************************************************  Function ID:  nVerifyQuery  Description:  CMPP协议中Query pack 合法性校验  Input Param:  recCmppQuery*   prCmppQuery  Output Param:   Return:       int             0     success                                -1    failed                                *************************************************************************/int nVerifyQuery(recCmppQuery* prCmppQuery){	int nQueryType;		if( NULL == prCmppQuery)	{		return -1;	}	/* Check Query Type */	nQueryType = (int)prCmppQuery->ucQueryType;	if((nQueryType < 0) || (nQueryType > 1))	{		return -2;	}		return 0;}/************************************************************************  Function ID:  nQueryReqDecode  Description:  CMPP协议的QueryReq pack 解析函数  Input Param:  unsigned char*      psDecodeStr  Output Param: recCmppQuery*       prCmppQuery  Return:       int                 0   success                                    -1  failed                                *************************************************************************/int nQueryReqDecode(unsigned char* psDecodeStr, recCmppQuery* prCmppQuery){	int nRet;    unsigned char* psHead;    if((NULL == psDecodeStr) ||(NULL == prCmppQuery))    {        return -1;    }        psHead = psDecodeStr;    /* 1 Name: Time length 8 */    memcpy(prCmppQuery->chTime, psHead, MacQueryTime);    psHead = psHead + MacQueryTime;    /* 2 Name: Query Type length: 1 */    prCmppQuery->ucQueryType = *psHead;    psHead ++;    /* 3 Name: Query Code length: 10 */    memcpy(prCmppQuery->chQueryCode, psHead, MacQueryCode);    psHead = psHead + MacQueryCode;    /* 4 Name: Reserve length: 8 */    memcpy(prCmppQuery->chReserve, psHead, MacReserve);    nRet = nVerifyQuery(prCmppQuery);    if(nRet != 0)    {    	return -2;    }        return 0;}/************************************************************************  Function ID:  nVerifyQueryResp  Description:  CMPP协议中Query pack 合法性校验  Input Param:  recCmppQueryResp* prCmppQueryResp  Output Param:   Return:       int             0     success                                -1    failed                                *************************************************************************/int nVerifyQueryResp(recCmppQueryResp* prCmppQueryResp){	int nQueryType;		if( NULL == prCmppQueryResp)	{		return -1;	}	/* Check Query Type */	nQueryType = (int)prCmppQueryResp->ucQueryType;	if((nQueryType < 0) || (nQueryType > 1))	{		return -2;	}	return 0;}/************************************************************************  Function ID:  nQueryRespDecode  Description:  CMPP协议的QueryResp pack 解析函数  Input Param:  unsigned char*      psDecodeStr  Output Param: recCmppQueryResp*   prCmppQueryResp  Return:       int                 0   success                                    -1  failed                                *************************************************************************/int nQueryRespDecode(unsigned char* psDecodeStr, recCmppQueryResp* prCmppQueryResp){	int nRet;	unsigned int nNetSequence;    unsigned char* psHead;    if((NULL == psDecodeStr) ||(NULL == prCmppQueryResp))    {        return -1;    }        psHead = psDecodeStr;    /* 1 Name: Time length: 8 */    memcpy(prCmppQueryResp->chTime, psHead, MacQueryTime);    psHead = psHead + MacQueryTime;    /* 2 Name: Query type length: 1 */    prCmppQueryResp->ucQueryType = *psHead;    psHead ++;    /* 3 Name: Query Code length: 10 */    memcpy(prCmppQueryResp->chQueryCode, psHead, MacQueryCode);    psHead = psHead + MacQueryCode;    /* 4 Name: Mt_TlMsg length: sizeof(int) */    memcpy(&nNetSequence, psHead, sizeof(int));    prCmppQueryResp->unMtTlMsg = ntohl(nNetSequence);    psHead = psHead + sizeof(int);    /* 5 Name: Mt_Tlusr length: sizeof(int) */    memcpy(&nNetSequence, psHead, sizeof(int));    prCmppQueryResp->unMtTlUsr = ntohl(nNetSequence);    psHead = psHead + sizeof(int);    /* 6 Name: Mt_Scs   length: sizeof(int) */    memcpy(&nNetSequence, psHead, sizeof(int));    prCmppQueryResp->unMtScs = ntohl(nNetSequence);    psHead = psHead + sizeof(int);    /* 7 Name: MT_Wt    length: sizeof(int) */    memcpy(&nNetSequence, psHead, sizeof(int));    prCmppQueryResp->unMtWt = ntohl(nNetSequence);    psHead = psHead + sizeof(int);    /* 8 Name: Mt_Fl    length: sizeof(int) */    memcpy(&nNetSequence, psHead, sizeof(int));    prCmppQueryResp->unMtFl = ntohl(nNetSequence);    psHead = psHead + sizeof(int);    /* 9 Name: Mo_Scs   length: sizeof(int) */    memcpy(&nNetSequence, psHead, sizeof(int));    prCmppQueryResp->unMoScs = ntohl(nNetSequence);    psHead = psHead + sizeof(int);    /* 10 Name: Mo_Wt   length: sizeof(int) */    memcpy(&nNetSequence, psHead, sizeof(int));    prCmppQueryResp->unMoWt = ntohl(nNetSequence);    psHead = psHead + sizeof(int);    /* 11 Name: Mo_Fl   length: sizeof(int) */    memcpy(&nNetSequence, psHead, sizeof(int));    prCmppQueryResp->unMoFl = ntohl(nNetSequence);        nRet = nVerifyQueryResp(prCmppQueryResp);    if(nRet != 0)    {    	return -2;    }        return 0;}/************************************************************************  Function ID:  nVerifyCancel  Description:  CMPP协议中Cancel pack 合法性校验  Input Param:  recCmppCancel* prCmppCancel  Output Param:   Return:       int             0     success                                -1    failed                                *************************************************************************/int nVerifyCancel(recCmppCancel* prCmppCancel){	return 0;}/************************************************************************  Function ID:  nCancelReqDecode  Description:  CMPP协议的CancelReq pack 解析函数  Input Param:  unsigned char*      psDecodeStr  Output Param: recCmppCancel*      prCmppCancel  Return:       int                 0   success                                    -1  failed                                *************************************************************************/int nCancelReqDecode(unsigned char* psDecodeStr, recCmppCancel* prCmppCancel){	int nRet;    unsigned char* psHead;    if((NULL == psDecodeStr) ||(NULL == prCmppCancel))    {        return -1;    }        psHead = psDecodeStr;    /* 1 Name: MsgId length: 8 */    memcpy(prCmppCancel->uchMsgId, psHead, MacMsgId);    nRet = nVerifyCancel(prCmppCancel);    if(nRet != 0)    {    	return -2;    }        return 0;}/************************************************************************  Function ID:  nVerifyCancelResp  Description:  CMPP协议中CancelResp pack 合法性校验  Input Param:  recCmppCancelResp* prCmppCancelResp  Output Param:   Return:       int             0     success                                -1    failed                                *************************************************************************/int nVerifyCancelResp(recCmppCancelResp* prCmppCancelResp){	int nResult;	if(NULL == prCmppCancelResp)	{		return -1;	}		/* Check Result */	nResult = prCmppCancelResp->unSuccessId;	if((nResult < 0) || ( nResult > 1))	{		return -2;	}		return 0;}/************************************************************************  Function ID:  nCancelRespDecode  Description:  CMPP协议的CancelResp pack 解析函数  Input Param:  unsigned char*      psDecodeStr  Output Param: recCmppCancelResp*  prCmppCancelResp  Return:       int                 0   success                                    -1  failed                                *************************************************************************/int nCancelRespDecode(unsigned char* psDecodeStr, recCmppCancelResp* prCmppCancelResp){	int nRet;	int nTmp;    unsigned char* psHead;    if((NULL == psDecodeStr) ||(NULL == prCmppCancelResp))    {        return -1;    }        psHead = psDecodeStr;    /* 1 Name: SuccessId length: 1 */    memcpy(&nTmp, psHead, MacIntLen);    prCmppCancelResp->unSuccessId = ntohl(nTmp);        nRet = nVerifyCancelResp(prCmppCancelResp);    if( nRet !=0 )    {    	return -2;    }        return 0;}/************************************************************************  Function ID:  nVerifyActive  Description:  CMPP协议中Active pack 合法性校验  Input Param:  recCmppActiveTest* prCmppActiveTest  Output Param:   Return:       int             0     success                                -1    failed                                *************************************************************************/int nVerifyActive(recCmppActiveTest* prCmppActiveTest){	if( NULL == prCmppActiveTest)	{		return -1;	}		return 0;}/************************************************************************  Function ID:  nActiveReqDecode  Description:  CMPP协议的ActiveReq pack 解析函数  Input Param:  unsigned char*      psDecodeStr  Output Param: recCmppActiveTest*  prCmppActiveTest  Return:       int                 0   success                                    -1  failed                                *************************************************************************/int nActiveReqDecode(unsigned char* psDecodeStr, recCmppActiveTest* prCmppActiveTest){	int nRet;	    if((NULL == psDecodeStr) ||(NULL == prCmppActiveTest))    {        return -1;    }    nRet = nVerifyActive(prCmppActiveTest);	if(nRet != 0)    {    	return -2;    }        return 0;}/************************************************************************  Function ID:  nVerifyActiveResp  Description:  CMPP协议中ActiveResp pack 合法性校验  Input Param:  recCmppActiveTestResp* prCmppActiveTestResp  Output Param:   Return:       int             0     success                                -1    failed                                *************************************************************************/int nVerifyActiveResp(recCmppActiveTestResp* prCmppActiveTestResp){	if( NULL == prCmppActiveTestResp)	{		return -1;	}		return 0;}/************************************************************************  Function ID:  nActiveRespDecode  Description:  CMPP协议的ActiveResp pack 解析函数  Input Param:  unsigned char*      psDecodeStr  Output Param: recCmppActiveTestResp* prCmppActiveTestResp  Return:       int                 0   success                                    -1  failed                                *************************************************************************/int nActiveRespDecode(unsigned char* psDecodeStr, recCmppActiveTestResp* prCmppActiveTestResp){	int nRet;    unsigned char* psHead;    if((NULL == psDecodeStr) ||(NULL == prCmppActiveTestResp))    {        return -1;    }        psHead = psDecodeStr;    /* 1 Name: Reserver length: 1*/    prCmppActiveTestResp->ucReserver = *psHead;    nRet = nVerifyActiveResp(prCmppActiveTestResp);    if(nRet != 0)    {    	return -2;    }        return 0;}/************************************************************************  Function ID:  nCmppDecode  Description:  CMPP协议的解析函数  Input Param:  unsigned char* DecodeStr                int            nLen  Output Param: recCmppPck* prCmppPck  Return:       int             0     success                                -1    input para error                                -2    input nLen  not equal DeCodestr len                                -3    CmdId error                                -4    verify content of struct recCmppPck fail                                *************************************************************************/int nCmppDecode(unsigned char* DecodeStr, int nLen, recCmppPck* prCmppPck){    int nRet;    unsigned char* psHead;    unsigned int nTmp;    unsigned int nMsgLen;    unsigned int nMsgCmd;    unsigned int nSeq;        psHead = DecodeStr;    if(NULL == DecodeStr)    {        return -1;    }    if(NULL == prCmppPck)    {        return -1;    }    memset(prCmppPck, 0, sizeof(recCmppPck));        /* get pack len from input str */    memcpy(&nTmp, psHead, sizeof(int));    nMsgLen = ntohl(nTmp);        /* verify input nLen para */    if((int)nMsgLen != nLen)    {        return -2;    }        /* put len in recCmppPck struct head*/    prCmppPck->rHead.unTotalLength = nMsgLen;    psHead = psHead + sizeof(int);    /* get pack CmdId from input str*/    memcpy(&nTmp, psHead, sizeof(int));    nMsgCmd = ntohl(nTmp);    /* put CmdId  in recCmppPck struct head */    prCmppPck->rHead.unCommandId = nMsgCmd;    psHead = psHead + sizeof(int);    /* get pack sequence num from input str */    memcpy(&nTmp, psHead, sizeof(int));    nSeq = ntohl(nTmp);    /* put Sequence number in recCmppPck struct head */    prCmppPck->rHead.unSequenceId = nSeq;

⌨️ 快捷键说明

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