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