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 + -
显示快捷键?