⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sgippkg.cpp

📁 联通的短信网关平台。 sp 使用。 如果想自己用vc 开发短信业务
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			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 + -