cmpppack.c

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

C
2,267
字号
    /* 9 Name: Fee_TerminalType length: 1*/    prCmppSubmit->ucFeeTerminalType = *psHead;    psHead ++;    /* 10 Name: TP_pId length: 1 */    prCmppSubmit->ucTpPid = *psHead;    psHead ++;    /* 11 Name: TP_udhi length: 1 */    prCmppSubmit->ucTpUdhi = *psHead;    psHead ++;    /* 12 Name: Msg_FMt length: 1 */    prCmppSubmit->ucMsgFmt = *psHead;    psHead ++;    /* 13 Name: Msg_src length: 6 */    memcpy(prCmppSubmit->chMsgSrc, psHead, MacMsgSrc);    psHead = psHead + MacMsgSrc;    /* 14 Name: FeeType length: 2 */    memcpy(prCmppSubmit->chFeeType, psHead, MacFeeType);    psHead = psHead + MacFeeType;    /* 15 Name: FeeCode length: 6 */    memcpy(prCmppSubmit->chFeeCode, psHead, MacFeeCode);    psHead = psHead + MacFeeCode;    /* 16 Name: Valid_time length: 17 */    memcpy(prCmppSubmit->chValidTime, psHead, MacValidTime);    psHead = psHead + MacValidTime;    /* 17 Name: At_time length: 17 */    memcpy(prCmppSubmit->chAtTime, psHead, MacAtTime);    psHead = psHead + MacAtTime;    /* 18 Name: Src_Id length 21 */    memcpy(prCmppSubmit->chSrcId, psHead, MacSrcId);    psHead = psHead + MacSrcId;    /* 19 Name: DestUsr_tl length 1 */    prCmppSubmit->ucDestUsrTl = *psHead;    psHead ++;    /* Get Dest termUsr number */    nDestUsrNum = (int)prCmppSubmit->ucDestUsrTl;    if (nDestUsrNum != 1)    {        return -2;    }    /* 20 Name: Dest_termId length: nDestUsrNum* MacDesTermId */    memcpy(prCmppSubmit->chDstTerminalId, psHead, nDestUsrNum*MacDesTermId);    psHead = psHead + nDestUsrNum*MacDesTermId;    /* 21 Name: Dest_termIdType length: 1*/    prCmppSubmit->ucDstTerminalType = *psHead;    psHead ++;        /* 22 Name: Msg_Length  length: 1 */    prCmppSubmit->ucMsgLength = *psHead;    psHead ++;     /* Get Content Len */     nContentLen = (int)prCmppSubmit->ucMsgLength;     nMsgFmt =(int)prCmppSubmit->ucMsgFmt;     if(0 == nMsgFmt)     {     	if((nContentLen < 0)||(nContentLen >= 160))     	{     		return -2;     	}     }     else     {     	if((nContentLen < 0)||(nContentLen > 140))     	{     		return -2;     	}     }          /* Check Content' len before memcpy */     if( nContentLen >= (int)(ActualLen - MacBasSubmitLen))     {     	return -2;     }         /* 23 Name: Msg_Content length: 160 */    if(nContentLen > 0)    {    	 memcpy(prCmppSubmit->chMsgContent, psHead, nContentLen);        psHead = psHead + nContentLen;    }       /* Check linkid length before memcpy */    if(MacLinkId !=(ActualLen - MacBasSubmitLen - nContentLen))    {    	return -2;    }        /* 24 Name: linkid length: 8 */    memcpy(prCmppSubmit->chLinkId, psHead, MacLinkId);    nRet = nVerifySubmit(prCmppSubmit);    if(nRet != 0)    {    	return -2;    }	    return 0;    }/************************************************************************  Function ID:  nVerifySubmitResp  Description:  CMPP协议中SubmitResp pack 合法性校验  Input Param:  recCmppSubmitResp* prCmppSubmitResp  Output Param:   Return:       int             0     success                                -1    failed                                *************************************************************************/int nVerifySubmitResp(recCmppSubmitResp* prCmppSubmitResp){	int nResult;		if(NULL == prCmppSubmitResp)	{		return -1;	}	nResult = prCmppSubmitResp->unResult;		/* Check Result */	if(nResult < 0)	{		vSetErrorDetail("Result is error value  when  SubmitResp pack  Decode");		return -2;	}	return 0;}/************************************************************************  Function ID:  nSubmitRespDecode  Description:  CMPP协议的SubmitResp pack 解析函数  Input Param:  unsigned char*      psDecodeStr  Output Param: recCmppSubmitResp*  prCmppSubmitResp  Return:       int                 0   success                                    -1  failed                                *************************************************************************/int nSubmitRespDecode(unsigned char* psDecodeStr, recCmppSubmitResp* prCmppSubmitResp){	int nRet;	int nTmp;    unsigned char* psHead;    if((NULL == psDecodeStr) ||(NULL == prCmppSubmitResp))    {        return -1;    }        psHead = psDecodeStr;    /* 1 Name: MsgId length: 8 */    memcpy(prCmppSubmitResp->uchMsgId, psHead, MacMsgId);    psHead = psHead + MacMsgId;    /* 2 Name: Result length: 4 */    memcpy(&nTmp, psHead, MacIntLen);    prCmppSubmitResp->unResult = ntohl(nTmp);    nRet = nVerifySubmitResp(prCmppSubmitResp);    if(nRet != 0)    {    	return -2;    }        return 0;}/************************************************************************  Function ID:  nVerifyDeliver  Description:  CMPP协议中SubmitResp pack 合法性校验  Input Param:  recCmppDeliver* prCmppDeliver  Output Param:   Return:       int             0     success                                -1    failed                                *************************************************************************/int nVerifyDeliver(recCmppDeliver* prCmppDeliver){	int nRegisteredDeliver;	int nTermnalType;	if(NULL == prCmppDeliver)	{		return -1;	}	/* Check Registered_Deliver */	nRegisteredDeliver = (int)prCmppDeliver->ucRegisterDelivery;	if((nRegisteredDeliver < 0) || (nRegisteredDeliver > 1))	{		vSetErrorDetail("RegisteredDeliveris error value  when  Deliever pack  Decode");		return -2;	}	nTermnalType= (int)prCmppDeliver->ucSrcTerminalType;	if(nTermnalType < 0 ||nTermnalType > 1)	{		vSetErrorDetail("SrcTerminalType error value  when  Deliever pack  Decode");		return -2;	}	return 0;}/************************************************************************  Function ID:  nDeliverReqDecode  Description:  CMPP协议的Deliver pack 解析函数  Input Param:  unsigned char*      psDecodeStr  Output Param: recCmppDeliver*     prCmppDeliver  Return:       int                 0   success                                    -1  failed                                *************************************************************************/int nDeliverReqDecode(unsigned char* psDecodeStr, recCmppDeliver* prCmppDeliver, int nLen){	int nRet;	int nContentLen;	int nActualLen;    int nMsgFmt;    unsigned char* psHead;    if((NULL == psDecodeStr) ||(NULL == prCmppDeliver))    {        return -1;    }        psHead = psDecodeStr;	nActualLen = nLen - MacHeadLen;	    /* 1 Name: MsgId length: 8 */    memcpy(prCmppDeliver->uchMsgId, psHead, MacMsgId);    psHead = psHead + MacMsgId;    /* 2 Name: Dest_Id length: 21 */    memcpy(prCmppDeliver->chDestId, psHead, MacDstId);    psHead = psHead + MacDstId;    /* 3 Name: ServiceId length: 10 */    memcpy(prCmppDeliver->chServiceId, psHead, MacServiceId);    psHead = psHead + MacServiceId;    /* 4 Name: Tp_pid length: 1 */    prCmppDeliver->ucTpPid = *psHead;    psHead ++;    /* 5 Name: Tp_udhi length: 1 */    prCmppDeliver->ucTpUdhi = *psHead;    psHead ++;    /* 6 Name: Msg_Fmt length: 1 */    prCmppDeliver->ucMsgFmt = *psHead;    psHead ++;    /* 7 Name: Src_termId length: 32 */    memcpy(prCmppDeliver->chSrcTerminalId, psHead, MacSrcTermId);    psHead = psHead + MacSrcTermId;    /* 8 Name: Src_termIdType length: 1*/    prCmppDeliver->ucSrcTerminalType = *psHead;    psHead ++;    /* 9 Name: Registered_Deliver length: 1 */    prCmppDeliver->ucRegisterDelivery = *psHead;    psHead ++;    /* 10 Name: Msg_Length length: 1 */    prCmppDeliver->ucMsgLength = *psHead;    psHead ++;	/* Get Content Len */	nContentLen = (int)prCmppDeliver->ucMsgLength;	nMsgFmt =(int)prCmppDeliver->ucMsgFmt;	if(0 == nMsgFmt)	{		if((nContentLen < 0)||(nContentLen >= 160))		{			return -2;		}	}	else	{		if((nContentLen < 0)||(nContentLen > 140))		{			return -2;		}	}	/* Check Content' len before memcpy */	if( nContentLen >=  (int)(nActualLen - MacBasDeliverLen))	{		return -2;	}	       /* 11 Name: Msg_Content length: 160 */      if(nContentLen > 0)      {      	  memcpy(prCmppDeliver->chMsgContent, psHead, nContentLen);         psHead = psHead + nContentLen;      }    	if(MacLinkId!= (nActualLen - MacBasDeliverLen - nContentLen))	{		return -2;	}	    /* 12 Name: Reserve length: 8 */    memcpy(prCmppDeliver->chLinkId, psHead, MacLinkId);    nRet = nVerifyDeliver(prCmppDeliver);    if(nRet != 0)    {    	return -2;    }        return 0;}/************************************************************************  Function ID:  nDeliverReceiptDecode  Description:  CMPP协议的DeliverReceipt content 解析函数  Input Param:  char*               psMsgContent  Output Param: recCmppReceiptBody* prCmppReceipt  Return:       int                 0   success                                    -1  input para error                                    -2  input Len error*************************************************************************/int nDeliverReceiptDecode(unsigned char* psMsgContent, recCmppReceiptBody* prCmppReceipt, int nLen){	unsigned char* psHead;	unsigned int   nSms_sequence;		if(NULL == psMsgContent)	{		return -1;	}	if(NULL == prCmppReceipt)	{		return -1;	}	if(nLen != MacReceiptBodyLen)	{		return -2;	}	psHead = psMsgContent;	memset(prCmppReceipt, 0, sizeof(recCmppReceiptBody));	/* Name: MsgId lenght: 8 */	memcpy(prCmppReceipt->uchMsgId, psHead, MacMsgId);	psHead = psHead + MacMsgId;	/* Name: Stat  length: 7 */    memcpy(prCmppReceipt->chStat, psHead, MacRecStat);	psHead = psHead + MacRecStat;	/* Name: Submit_time length: 10 */	memcpy(prCmppReceipt->chSubmitTime, psHead, MacSubmitTime);	psHead = psHead + MacSubmitTime;	/* Name: Done_time length: 10 */	memcpy(prCmppReceipt->chDoneTime, psHead, MacDoneTime);	psHead = psHead + MacDoneTime;	/* Name: Dest_termId length: 32*/	memcpy(prCmppReceipt->chDestTerminalId, psHead, MacDesTermId);	psHead = psHead + MacDesTermId;	/* Name: SMSC_sequence length: 4 */	memcpy(&nSms_sequence, psHead, MacIntLen);	prCmppReceipt->unSmscSequence =  ntohl(nSms_sequence);	return 0;	}/************************************************************************  Function ID:  nVerifyDeliverResp  Description:  CMPP协议中DeliverResp pack 合法性校验  Input Param:  recCmppDeliver* prCmppDeliver  Output Param:   Return:       int             0     success                                -1    failed                                *************************************************************************/int nVerifyDeliverResp(recCmppDeliverResp* prCmppDeliverResp){	int nResult;	if( NULL == prCmppDeliverResp)	{		return -1;	}	/* Check Result */	nResult = prCmppDeliverResp->unResult;	if(nResult < 0)	{		vSetErrorDetail("Result is error value  when  DelieverResp pack  Encode");		return -2;	}		return 0;}/************************************************************************  Function ID:  nDeliverRespDecode  Description:  CMPP协议的DeliverResp pack 解析函数  Input Param:  unsigned char*      psDecodeStr  Output Param: recCmppDeliverResp* prCmppDeliverResp  Return:       int                 0   success                                    -1  failed                                *************************************************************************/int nDeliverRespDecode(unsigned char* psDecodeStr, recCmppDeliverResp* prCmppDeliverResp){	int nRet;	int nTmp;    unsigned char* psHead;    if((NULL == psDecodeStr) ||(NULL == prCmppDeliverResp))    {        return -1;    }        psHead = psDecodeStr;    /* 1 Name: MsgId length: 8 */    memcpy(prCmppDeliverResp->uchMsgId, psHead, MacMsgId);    psHead = psHead + MacMsgId;    /* 2 Name: Result length: 4 */     memcpy(&nTmp, psHead, MacIntLen);    prCmppDeliverResp->unResult = ntohl(nTmp);    nRet = nVerifyDeliverResp(prCmppDeliverResp);    if(nRet != 0)    {    	return -2;    }

⌨️ 快捷键说明

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