📄 sgippkg.cpp
字号:
memcpy(&stMsg.Body.Report.cState, pTmp, sizeof(stMsg.Body.Report.cState));
pTmp += sizeof(stMsg.Body.Report.cState);
memcpy(&stMsg.Body.Report.ErrorCode, pTmp, sizeof(stMsg.Body.Report.ErrorCode));
pTmp += sizeof(stMsg.Body.Report.ErrorCode);
memcpy(&stMsg.Body.Report.cReserve, pTmp, sizeof(stMsg.Body.Report.cReserve));
*/
break;
}
case SGIP_SUBMIT:
{
SGIP_SUBMIT_BODY *pSubmit = (SGIP_SUBMIT_BODY *)&stMsg.Body;
memcpy(&pSubmit->cSPNumber, pTmp, sizeof(pSubmit->cSPNumber));
pTmp += sizeof(pSubmit->cSPNumber);
memcpy(&pSubmit->cChargeNumber, pTmp, sizeof(pSubmit->cChargeNumber));
pTmp += sizeof(pSubmit->cChargeNumber);
memcpy(&pSubmit->cUserCount, pTmp, sizeof(pSubmit->cUserCount));
pTmp += sizeof(pSubmit->cUserCount);
//memcpy(&pSubmit->cUserNumber, pTmp, sizeof(pSubmit->cUserNumber));
//pTmp += sizeof(pSubmit->cUserNumber);
memcpy(&pSubmit->cUserNumber, pTmp, (pSubmit->cUserCount * 21));
pTmp += (pSubmit->cUserCount * 21);
memcpy(&pSubmit->cCorpId, pTmp, sizeof(pSubmit->cCorpId));
pTmp += sizeof(pSubmit->cCorpId);
memcpy(&pSubmit->cServiceType, pTmp, sizeof(pSubmit->cServiceType));
pTmp += sizeof(pSubmit->cServiceType);
memcpy(&pSubmit->cFeeType, pTmp, sizeof(pSubmit->cFeeType));
pTmp += sizeof(pSubmit->cFeeType);
memcpy(&pSubmit->cFeeValue, pTmp, sizeof(pSubmit->cFeeValue));
pTmp += sizeof(pSubmit->cFeeValue);
memcpy(&pSubmit->cGivenValue, pTmp, sizeof(pSubmit->cGivenValue));
pTmp += sizeof(pSubmit->cGivenValue);
memcpy(&pSubmit->cAgentFlag, pTmp, sizeof(pSubmit->cAgentFlag));
pTmp += sizeof(pSubmit->cAgentFlag);
memcpy(&pSubmit->cMorelatetoMTFlag, pTmp, sizeof(pSubmit->cMorelatetoMTFlag));
pTmp += sizeof(pSubmit->cMorelatetoMTFlag);
memcpy(&pSubmit->cPriority, pTmp, sizeof(pSubmit->cPriority));
pTmp += sizeof(pSubmit->cPriority);
memcpy(&pSubmit->cExpireTime, pTmp, sizeof(pSubmit->cExpireTime));
pTmp += sizeof(pSubmit->cExpireTime);
memcpy(&pSubmit->cScheduleTime, pTmp, sizeof(pSubmit->cScheduleTime));
pTmp += sizeof(pSubmit->cScheduleTime);
memcpy(&pSubmit->cReportFlag, pTmp, sizeof(pSubmit->cReportFlag));
pTmp += sizeof(pSubmit->cReportFlag);
memcpy(&pSubmit->cTP_pid, pTmp, sizeof(pSubmit->cTP_pid));
pTmp += sizeof(pSubmit->cTP_pid);
memcpy(&pSubmit->cTP_udhi, pTmp, sizeof(pSubmit->cTP_udhi));
pTmp += sizeof(pSubmit->cTP_udhi);
memcpy(&pSubmit->cMessageCoding, pTmp, sizeof(pSubmit->cMessageCoding));
pTmp += sizeof(pSubmit->cMessageCoding);
memcpy(&pSubmit->cMessageType, pTmp, sizeof(pSubmit->cMessageType));
pTmp += sizeof(pSubmit->cMessageType);
memcpy(&pSubmit->iMessageLength, pTmp, sizeof(pSubmit->iMessageLength));
pTmp += sizeof(pSubmit->iMessageLength);
memcpy(&pSubmit->cMessageContent, pTmp, ntohl(pSubmit->iMessageLength));
pTmp += ntohl(pSubmit->iMessageLength);
memcpy(&pSubmit->cReserve, pTmp, sizeof(pSubmit->cReserve));
pTmp += sizeof(pSubmit->cReserve);
break;
}
default:
{
if (nPkgType > 0x80000000)
{
SGIP_RESP_BODY *pResp = (SGIP_RESP_BODY *)&stMsg.Body;
memcpy(&pResp->cResult, pTmp, sizeof(pResp->cResult));
pTmp += sizeof(pResp->cResult);
memcpy(&pResp->cReserve, pTmp, sizeof(pResp->cReserve));
pTmp += sizeof(pResp->cReserve);
}
break;
}
}
return;
}
void CSGIPPkg::DeComposePackage
(
unsigned int nPkgType,
SGIP_MSG_BODY &stMsg,
char *pBuf,
int *pLen
)
{
if (pBuf == NULL)
return;
*pLen = 0;
int iMsgLen = 0;
int iMessageLength = 0;
switch(nPkgType)
{
case SGIP_SUBMIT:
{
SGIP_SUBMIT_BODY sSubmit;
memset(&sSubmit, 0, sizeof(sSubmit));
memcpy(&sSubmit, &stMsg.Body.Submit, sizeof(sSubmit));
this->NewPackage(SGIP_SUBMIT, pBuf);
SGIP_SUBMIT_MSG *pCompress = (SGIP_SUBMIT_MSG *)pBuf;
//Compress the Submit Package method:
iMsgLen = ntohl(pCompress->Head.iMsgLen);
iMessageLength = ntohl(sSubmit.iMessageLength);
printf("message len =%d\n", iMessageLength);
iMsgLen = iMsgLen - (MAX_CONTENT_LEN) + iMessageLength\
-21*100 + 21*sSubmit.cUserCount;
int iSize = 0;
int iCpyLen = 0;
iSize = sizeof(SGIP_HEAD);
iCpyLen = sizeof(pCompress->Body.cSPNumber) + \
sizeof(pCompress->Body.cChargeNumber) + \
sizeof(pCompress->Body.cUserCount);
memcpy(pBuf+iSize, &sSubmit, iCpyLen);
iSize += iCpyLen;
iCpyLen = 21 * sSubmit.cUserCount;
memcpy(pBuf+iSize, &sSubmit.cUserNumber, iCpyLen);
iSize += iCpyLen;
iCpyLen = iMsgLen - iSize - iMessageLength -8 - sizeof(int);
memcpy(pBuf+iSize, &sSubmit.cCorpId, iCpyLen);
iSize += iCpyLen;
//len
iCpyLen = sizeof(int);
memcpy(pBuf+iSize, &sSubmit.iMessageLength, iCpyLen);
/*
int nTmp = 0;
memcpy(&nTmp, cBuf+iSize, iCpyLen);
printf("nTmp = %d\n", ntohl(nTmp));
*/
iSize += iCpyLen;
iCpyLen = iMessageLength;
memcpy(pBuf+iSize, &sSubmit.cMessageContent, iCpyLen);
iSize += iCpyLen;
iCpyLen = 8;
memcpy(pBuf+iSize, &sSubmit.cReserve, iCpyLen);
iSize += iCpyLen;
if (iMsgLen != iSize)
{
printf("copy send buf error!\n");
return;
}
memset(&pCompress->Head.iMsgLen, 0, sizeof(unsigned int));
pCompress->Head.iMsgLen = htonl(iMsgLen);
*pLen = iMsgLen;
break;
}
case SGIP_BIND:
{
//SGIP_BIND_MSG stBind;
//memset(&stBind, 0, sizeof(stBind));
//memcpy(&stBind, &stMsg, sizeof(stBind));
NewPackage(SGIP_BIND, pBuf);
SGIP_BIND_BODY sBindBody;
memset(&sBindBody, 0, sizeof(sBindBody));
strcpy(sBindBody.cLoginName, g_cRUserName);
strcpy(sBindBody.cLoginPwd, g_cRUserPwd);
sBindBody.cLoginType = 1;
//memcpy(cBuf+sizeof(SGIP_HEAD), sBindBody.cLoginType, 1);
char *pTmp = NULL;
pTmp = pBuf+sizeof(SGIP_HEAD);
*pTmp = sBindBody.cLoginType;
memcpy(pBuf+sizeof(SGIP_HEAD)+1, \
sBindBody.cLoginName, sizeof(sBindBody.cLoginName));
memcpy(pBuf+sizeof(SGIP_HEAD)+1+sizeof(sBindBody.cLoginName), \
sBindBody.cLoginPwd, sizeof(sBindBody.cLoginPwd));
memcpy(pBuf+sizeof(SGIP_HEAD)+1+sizeof(sBindBody.cLoginName)+sizeof(sBindBody.cLoginPwd), \
sBindBody.cReserve, sizeof(sBindBody.cReserve));
SGIP_BIND_MSG *pBind = (SGIP_BIND_MSG *)pBuf;
*pLen = ntohl(pBind->Head.iMsgLen);
#ifdef __DEBUG_API__STOP
printf("====bind package=====\n");
printf("\tmesg_len = %d\n"
"\tcomm id = %02x\n"
"\tmsg id = %05d%010d%d\n"
"\tlogin type = %02x\n"
"\tuser name = %s\n"
"\tuser pwd= %s\n"
"\treserve = %s\n",
ntohl(pBind->Head.iMsgLen),
ntohl(pBind->Head.iCmdID),
ntohl(pBind->Head.sSeqNo.iSrcID),
ntohl(pBind->Head.sSeqNo.iDate),
ntohl(pBind->Head.sSeqNo.iSeqno),
sBindBody.cLoginType,
sBindBody.cLoginName,
sBindBody.cLoginPwd,
sBindBody.cReserve
);
printf("====bind package=====\n");
#endif
break;
}
case SGIP_UNBIND:
{
NewPackage(nPkgType, (char *)pBuf);
*pLen = GetMessageLen(nPkgType);
break;
}
case SGIP_DELIVER:
{
SGIP_DELIVER_BODY sDeliver;
memset(&sDeliver, 0, sizeof(sDeliver));
memcpy(&sDeliver, &stMsg.Body.Deliver, sizeof(sDeliver));
this->NewPackage(SGIP_DELIVER, pBuf);
SGIP_DELIVER_MSG *pCompress = (SGIP_DELIVER_MSG *)pBuf;
//Compress the Deliver Package method:
iMsgLen = ntohl(pCompress->Head.iMsgLen);
iMessageLength = ntohl(sDeliver.iMessageLength);
printf("Deliver len =%d\n", iMessageLength);
iMsgLen = iMsgLen - (MAX_CONTENT_LEN) + iMessageLength;
int iSize = 0;
int iCpyLen = 0;
iSize = sizeof(SGIP_HEAD);
iCpyLen = sizeof(pCompress->Body.cUserNumber) + \
sizeof(pCompress->Body.cSPNumber) + \
sizeof(pCompress->Body.cTP_pid) +\
sizeof(pCompress->Body.cTP_udhi) +\
sizeof(pCompress->Body.cMessageCoding);
memcpy(pBuf+iSize, &sDeliver, iCpyLen);
iSize += iCpyLen;
//len
iCpyLen = sizeof(int);
memcpy(pBuf+iSize, &sDeliver.iMessageLength, iCpyLen);
int nTmp = 0;
memcpy(&nTmp, pBuf+iSize, iCpyLen);
printf("Deliver Len = %d\n", ntohl(nTmp));
iSize += iCpyLen;
iCpyLen = iMessageLength;
memcpy(pBuf+iSize, &sDeliver.cMessageContent, iCpyLen);
iSize += iCpyLen;
iCpyLen = 8;
memcpy(pBuf+iSize, &sDeliver.cReserve, iCpyLen);
iSize += iCpyLen;
if (iMsgLen != iSize)
{
printf("copy send buf error!\n");
return;
}
memset(&pCompress->Head.iMsgLen, 0, sizeof(unsigned int));
pCompress->Head.iMsgLen = htonl(iMsgLen);
*pLen = iMsgLen;
break;
}
case SGIP_REPORT:
{
SGIP_REPORT_BODY sReport;
memset(&sReport, 0, sizeof(sReport));
memcpy(&sReport, &stMsg.Body.Report, sizeof(sReport));
NewPackage(SGIP_REPORT, (char *)pBuf);
int iSize = 0;
int iCpyLen = 0;
iSize = sizeof(SGIP_HEAD);
iCpyLen = sizeof(sReport.sSubmitSeqNum);
memcpy(pBuf+iSize, &sReport.sSubmitSeqNum, iCpyLen);
iSize += iCpyLen;
iCpyLen = sizeof(sReport.cReportType);
memcpy(pBuf+iSize, &sReport.cReportType, iCpyLen);
iSize += iCpyLen;
iCpyLen = sizeof(sReport.cUserNumber);
memcpy(pBuf+iSize, &sReport.cUserNumber, iCpyLen);
iSize += iCpyLen;
iCpyLen = sizeof(sReport.cState);
memcpy(pBuf+iSize, &sReport.cState, iCpyLen);
iSize += iCpyLen;
iCpyLen = sizeof(sReport.ErrorCode);
memcpy(pBuf+iSize, &sReport.ErrorCode, iCpyLen);
iSize += iCpyLen;
iCpyLen = sizeof(sReport.cReserve);
memcpy(pBuf+iSize, &sReport.cReserve, iCpyLen);
iSize += iCpyLen;
*pLen = iSize;
break;
}
default:
{
if (nPkgType > 0x80000000)
{
NewPackage(nPkgType, (char *)pBuf);
*pLen = GetMessageLen(nPkgType);
}
break;
}
}
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -