cmpppack.c
来自「用c/c++实现的一个CMPP API」· C语言 代码 · 共 2,267 行 · 第 1/5 页
C
2,267 行
psHead = psHead + sizeof(int); //check input len nRet = nIsCorrectLen(nMsgCmd, nLen); if(nRet != 0) { return -2; } switch(nMsgCmd) { case MacC_ConnectRqst: { nRet = nConnectReqDecode(psHead, &prCmppPck->body.rCmppConnect); break; } case MacC_ConnectRep: { nRet = nConnectRespDecode(psHead, &prCmppPck->body.rCmppConnectResp); break; } case MacC_SubmitRqst: { nRet = nSubmitReqDecode(psHead, &prCmppPck->body.rCmppSubmit, nLen); break; } case MacC_SubmitRep: { nRet = nSubmitRespDecode(psHead, &prCmppPck->body.rCmppSubmitResp); break; } case MacC_DeliverRqst: { nRet = nDeliverReqDecode(psHead, &prCmppPck->body.rCmppDeliver, nLen); break; } case MacC_DeliverRep: { nRet = nDeliverRespDecode(psHead, &prCmppPck->body.rCmppDeliverResp); break; } case MacC_QueryRqst: { nRet = nQueryReqDecode(psHead, &prCmppPck->body.rCmppQuery); break; } case MacC_QueryRep: { nRet = nQueryRespDecode(psHead, &prCmppPck->body.rCmppQueryResp); break; } case MacC_CancelRqst: { nRet = nCancelReqDecode(psHead, &prCmppPck->body.rCmppCancel); break; } case MacC_CancelRep: { nRet = nCancelRespDecode(psHead, &prCmppPck->body.rCmppCancelResp); break; } case MacC_ActiveRqst: { nRet = nActiveReqDecode(psHead, &prCmppPck->body.rCmppActiveTest); break; } case MacC_ActiveRep: { nRet = nActiveRespDecode(psHead, &prCmppPck->body.rCmppActiveTestResp); break; } default: { return -3; break; } } if(nRet == -2) { return -4; } return nRet;}/************************************************************************ Function ID: nConnectReqEncode Description: CMPP协议的ConnectReq pack 组包函数 Input Param: recCmppConnect* prCmppConnect Output Param: unsigned char* psEndoceStr Return: int 0 success -1 failed *************************************************************************/int nConnectReqEncode(unsigned char* psEndoceStr,recCmppConnect* prCmppConnect){ int nRet; unsigned char* psHead; int nTmp; if((NULL == psEndoceStr) || (NULL == prCmppConnect)) { return -1; } nRet = nVerifyConnect(prCmppConnect); if(nRet != 0) { return -2; } psHead = psEndoceStr; /* 1 Name: Source_Addr(Sp_Id) length: 6 */ memcpy(psHead, prCmppConnect->chSourceAddr, MacSourceAddress); psHead = psHead + MacSourceAddress; /* 2 Name: Authenticator Source length: 16 */ memcpy(psHead, prCmppConnect->chAuthSource, MacAuthSource); psHead = psHead + MacAuthSource; /* 3 Name: Version length : 1 */ *psHead = prCmppConnect->ucVersion; psHead ++; /* 4 Name: Timestamp length: sizeof(int) */ nTmp = htonl(prCmppConnect->unTimestamp); memcpy(psHead, &nTmp, sizeof(int)); return 0;}/************************************************************************ Function ID: nConnectRespEncode Description: CMPP协议的ConnectResp pack 组包函数 Input Param: recCmppConnectResp* prCmppConnectResp Output Param: unsigned char* psEndoceStr Return: int 0 success -1 failed *************************************************************************/int nConnectRespEncode(unsigned char* psEndoceStr,recCmppConnectResp* prCmppConnectResp){ int nRet; int nTmp; unsigned char* psHead; if((NULL == psEndoceStr) || (NULL == prCmppConnectResp)) { return -1; } nRet = nVerifyConnectResp(prCmppConnectResp); if(nRet != 0) { return -2; } psHead = psEndoceStr; /* 1 Name: Resp state lenght: 4 */ /* put Cmpp Pack sequence into out str */ nTmp = htonl(prCmppConnectResp->unStatus); memcpy(psHead, &nTmp, sizeof(int)); psHead = psHead + sizeof(int); /* 2 Name: Auth Ismg length :16*/ memcpy(psHead, prCmppConnectResp->chAuthIsmg, MacAuthIsmg); psHead = psHead + MacAuthIsmg; /* 3 Name: Version length: 1 */ *psHead = prCmppConnectResp->ucVersion; return 0;}/************************************************************************ Function ID: nSubmitReqEncode Description: CMPP协议的submitreq pack 组包函数 Input Param: recCmppSubmit* prCmppSubmit Output Param: unsigned char* psEndoceStr Return: int 0 success -1 failed *************************************************************************/int nSubmitReqEncode(unsigned char* psEndoceStr,recCmppSubmit* prCmppSubmit){ int nRet; int nContentLen; int nDestUsrNum; int nMsgFmt; unsigned char* psHead; if((NULL == psEndoceStr) || (NULL == prCmppSubmit)) { return -1; } nRet = nVerifySubmit(prCmppSubmit); if(nRet != 0) { return -2; } psHead = psEndoceStr; /* 1 Name: MsgId length: 8 */ memcpy(psHead, prCmppSubmit->uchMsgId, MacMsgId); psHead = psHead + MacMsgId; /* 2 Name: PK_Total length: 1 */ *psHead = prCmppSubmit->ucPkTotal; psHead ++; /* 3 Name: PK_Nmber length: 1 */ *psHead = prCmppSubmit->ucPkNumber; psHead ++; /* 4 Name: Registered_Deliever length: 1 */ *psHead = prCmppSubmit->ucRegisterDelivery; psHead ++; /* 5 Name: Msg_Level length: 1 */ *psHead = prCmppSubmit->ucMsgLevel; psHead ++; /* 6 Name: ServiceId length: 10 */ memcpy(psHead, prCmppSubmit->chServiceId, MacServiceId); psHead = psHead + MacServiceId; /* 7 Name: Fee_USerType length: 1 */ *psHead = prCmppSubmit->ucFeeUserType; psHead ++; /* 8 Name: Fee_TerminalId length: 32 */ memcpy(psHead, prCmppSubmit->chFeeTerminateId, MacFeeTermId); psHead = psHead + MacFeeTermId; /* 9 Name: Fee_TerminalType length: 1 */ *psHead = prCmppSubmit->ucFeeTerminalType; psHead ++; /* 10 Name: TP_pId length: 1 */ *psHead = prCmppSubmit->ucTpPid; psHead ++; /* 11 Name: TP_udhi length: 1 */ *psHead = prCmppSubmit->ucTpUdhi; psHead ++; /* 12 Name: Msg_FMt length: 1 */ *psHead = prCmppSubmit->ucMsgFmt; psHead ++; /* 13 Name: Msg_src length: 6 */ memcpy(psHead, prCmppSubmit->chMsgSrc, MacMsgSrc); psHead = psHead + MacMsgSrc; /* 14 Name: FeeType length: 2 */ memcpy(psHead, prCmppSubmit->chFeeType, MacFeeType); psHead = psHead + MacFeeType; /* 15 Name: FeeCode length: 6 */ memcpy(psHead, prCmppSubmit->chFeeCode, MacFeeCode); psHead = psHead + MacFeeCode; /* 16 Name: Valid_time length: 17 */ memcpy(psHead, prCmppSubmit->chValidTime, MacValidTime); psHead = psHead + MacValidTime; /* 17 Name: At_time length: 17 */ memcpy(psHead, prCmppSubmit->chAtTime, MacAtTime); psHead = psHead + MacAtTime; /* 18 Name: Src_Id length 21 */ memcpy(psHead, prCmppSubmit->chSrcId, MacSrcId); psHead = psHead + MacSrcId; /* 19 Name: DestUsr_tl length 1 */ *psHead = prCmppSubmit->ucDestUsrTl; psHead ++; /* Get Dest termUsr number */ nDestUsrNum = (int)prCmppSubmit->ucDestUsrTl; if(nDestUsrNum != 1) { vSetErrorDetail("DestUsrNum is error value when Submit pack Encode"); return -2; } /* 20 Name: Dest_termId length: nDestUsrNum* MacDesTermId */ memcpy(psHead, prCmppSubmit->chDstTerminalId, nDestUsrNum*MacDesTermId); psHead = psHead + nDestUsrNum*MacDesTermId; /* 21 Name: Dest_termType length: 1*/ *psHead = prCmppSubmit->ucDstTerminalType; psHead ++; /* 22 Name: Msg_Length length: 1 */ *psHead = prCmppSubmit->ucMsgLength; psHead ++; nContentLen = (int)prCmppSubmit->ucMsgLength; nMsgFmt =(int)prCmppSubmit->ucMsgFmt; if(0 == nMsgFmt) { if((nContentLen <= 0)||(nContentLen >= 160)) { vSetErrorDetail("ContentLen is error value when Submit pack Encode"); return -2; } } else { if((nContentLen <= 0)||(nContentLen > 140)) { vSetErrorDetail("ContentLen is error value when Submit pack Encode"); return -2; } } /* verify ContenttLen and MsgContent */ /* if( nContentLen != (int)strlen(prCmppSubmit->chMsgContent) ) { vSetErrorDetail("ContentLen is not equal to MsgContent's length when Submit pack Encode"); return -2; } */ /* 23 Name: Msg_Content length: 160 */ memcpy(psHead, prCmppSubmit->chMsgContent, nContentLen); psHead = psHead + nContentLen; /* 24 Name: Reserve length: 20 */ memcpy(psHead, prCmppSubmit->chLinkId, MacLinkId); return 0;}/************************************************************************ Function ID: nSubmitRespEncode Description: CMPP协议的submitresp pack 组包函数 Input Param: recCmppSubmitResp* prCmppSubmitResp Output Param: unsigned char* psEndoceStr Return: int 0 success -1 failed *************************************************************************/int nSubmitRespEncode(unsigned char* psEndoceStr,recCmppSubmitResp* prCmppSubmitResp){ int nRet; int nTmp; unsigned char* psHead; if((NULL == psEndoceStr) || (NULL == prCmppSubmitResp)) { return -1; } nRet = nVerifySubmitResp(prCmppSubmitResp); if(nRet != 0) { return -2; } psHead = psEndoceStr; /* 1 Name: MsgId length: 8 */ memcpy(psHead, prCmppSubmitResp->uchMsgId, MacMsgId); psHead = psHead + MacMsgId; /* 2 Name: Result length: 4 */ nTmp = htonl(prCmppSubmitResp->unResult); memcpy(psHead, &nTmp, sizeof(int)); return 0;}/************************************************************************ Function ID: nDeliverReqEncode Description: CMPP协议的deliverReq pack 组包函数 Input Param: recCmppDeliver* prCmppDeliver Output Param: unsigned char* psEndoceStr Return: int 0 success -1 failed *************************************************************************/int nDeliverReqEncode(unsigned char* psEndoceStr,recCmppDeliver* prCmppDeliver){ int nRet; int nContentLen; int nMsgFmt; unsigned char* psHead; if((NULL == psEndoceStr) || (NULL == prCmppDeliver)) { return -1; } nRet = nVerifyDeliver(prCmppDeliver); if(nRet != 0) { return -2; } psHead = psEndoceStr; /* 1 Name: MsgId length: 8 */ memcpy(psHead, prCmppDeliver->uchMsgId, MacMsgId); psHead = psHead + MacMsgId; /* 2 Name: Dest_Id length: 21 */ memcpy(psHead, prCmppDeliver->chDestId, MacDstId); psHead = psHead + MacDstId; /* 3 Name: ServiceId length: 10 */ memcpy(psHead, prCmppDeliver->chServiceId, MacServiceId); psHead = psHead + MacServiceId; /* 4 Name: Tp_pid length: 1 */ *psHead = prCmppDeliver->ucTpPid; psHead ++; /* 5 Name: Tp_udhi length: 1 */ *psHead = prCmppDeliver->ucTpUdhi; psHead ++; /* 6 Name: Msg_Fmt length: 1 */ *psHead = prCmppDeliver->ucMsgFmt; psHead ++; /* 7 Name: Src_termId length: 32 */ memcpy(psHead, prCmppDeliver->chSrcTerminalId, MacSrcTermId); psHead = psHead + MacSrcTermId; /* 8 Name: Src_termIdType length: 1*/ *psHead = prCmppDeliver->ucSrcTerminalType; psHead ++; /* 9 Name: Registered_Deliver length: 1 */ *psHead = prCmppDeliver->ucRegisterDelivery; psHead ++; /* 10 Name: Msg_Length length: 1 */ *psHead = prCmppDeliver->ucMsgLength; psHead ++; /* Get Content Len */ nContentLen = (int)prCmppDeliver->ucMsgLength; nMsgFmt =(int)prCmppDeliver->ucMsgFmt; if(0 == nMsgFmt) {
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?