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

📄 msg_center.cpp

📁 短信网管的原代码。用于与sp通信
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			strsplitter.add(pcmpp_submit->szAt_Time,17);
			strsplitter.add(pcmpp_submit->szSrc_terminal_id,21);
			strsplitter.add(pcmpp_submit->cDestUsr_tl);
			strsplitter.add(pcmpp_submit->szDest_terminal_ids,21);
			strsplitter.add((unsigned char)pcmpp_submit->wMsg_Length);
			strsplitter.add(pcmpp_submit->szMsg_Content,ntohs(pcmpp_submit->wMsg_Length));
			strsplitter.add(pcmpp_submit->szReserve,8);

			//设置包头的总长度			
			totalLen=htonl(strsplitter.m_StrLen);
			memcpy(&strsplitter.m_str[0],&totalLen,sizeof(totalLen));
			//返回数据包
			memcpy(OutBuf,strsplitter.m_str,strsplitter.m_StrLen);
			return strsplitter.m_StrLen;
		}
		break;
	}
	return 0;
}


//////////////////////////////////////////////////////////////////////////////
//函数名称:GetCmpp12DataFromBuf()
//
//创建时间:2001-9-15
//函数功能:通过消息包,获取CMPP1.2消息内容,写入CMPP1.2数据结构
//////////////////////////////////////////////////////////////////////////////
void TMSG_CENTER::GetCMPP12DataFromBuf(void* ReceiveBuf,char* buf,UINT nCommandID)
{
	switch(nCommandID)
	{
	  case CMPP12_DELIVERY://Deliver消息
		  {
			int nCurrentPos=0;
			//CMPP数据包分析
	        STRUCT_CMPP12_DELIVERY *pCmpp_deliver=(STRUCT_CMPP12_DELIVERY *)ReceiveBuf;
			//消息头,网络字节未经转换
			memcpy(&(pCmpp_deliver->sHeader),buf,sizeof(STRUCT_TRP_MSG_HEADER));
			//消息体的第一字节
			nCurrentPos=12;//消息头的长度为12,消息体从13开始
			//msgid 8
			memcpy(&(pCmpp_deliver->n64Msg_ID),&buf[nCurrentPos],8);
			nCurrentPos+=8;
			//destination id 21
			int len=StrnCopy(pCmpp_deliver->szDestinationID,21,&buf[nCurrentPos]);
			nCurrentPos+=21;
			//service id
			StrnCopy(pCmpp_deliver->szService_ID,10,&buf[nCurrentPos]);
			nCurrentPos+=10;
			//TP_pid
			pCmpp_deliver->cTP_Pid=(unsigned char)buf[nCurrentPos];
			nCurrentPos+=1;
			//TP_udhi
			pCmpp_deliver->cTP_Udhi=(unsigned char)buf[nCurrentPos];
			nCurrentPos+=1;
			//msg fmt
			pCmpp_deliver->cMsg_Fmt=(unsigned char)buf[nCurrentPos];
			nCurrentPos+=1;
			//source_terminal_id
			StrnCopy(pCmpp_deliver->szSrc_terminalID,21,&buf[nCurrentPos]);
			nCurrentPos+=21;
			//registered delivery
			pCmpp_deliver->cRegistered_Delivery=(unsigned char)buf[nCurrentPos];
			nCurrentPos+=1;
			//msg_length
			pCmpp_deliver->wMsg_Length=(unsigned char)buf[nCurrentPos];
			nCurrentPos+=1;
			//msg content,消息体,可能是二进制数据
			memcpy(pCmpp_deliver->Msg_Content,&buf[nCurrentPos],pCmpp_deliver->wMsg_Length);
			//reserve保留字段
			StrnCopy(pCmpp_deliver->Reserve,8,&buf[nCurrentPos+pCmpp_deliver->wMsg_Length]);
			return ;
		  }
	}
}

//短信提交的应答消息
BOOL TMSG_CENTER::CMPP12_SubmitRep(void* buf,UINT nBufLen)
{
	//检查数据包是否正确
	if(buf==NULL || nBufLen<=0)
		return FALSE;

	STRUCT_SGIP_SUBMIT_REP*	  sSubmitRep = (STRUCT_SGIP_SUBMIT_REP*)buf;
	TRACE("SUBMIT_STATUS:%d\r\n",sSubmitRep->btResult);
	TRACE("SEQ_REP:%d\r\n",sSubmitRep->sHeader.Sequence_ID.seq);

    //CMPP1.2协议-—->CENTEK UNIDATA协议 转换
	//数据包缓冲 

	//UNIDATA 数据包
	STRUCT_UNIDATA_ACK app_ack;
    ZeroMemory(&app_ack,sizeof(STRUCT_UNIDATA_ACK));
	
	//消息流水号不作对应,透传给代理系统
	app_ack.sHeader.dwSeqNo=sSubmitRep->sHeader.Sequence_ID.seq;

	//如果为测试消息则不下发
	if(app_ack.sHeader.dwSeqNo==htonl(TRP_TESTMSG_SEQID))
		return TRUE;

	app_ack.sHeader.dwStatus=htonl((int)sSubmitRep->btResult);
	app_ack.sHeader.dwCommandId=htonl(TRP_UNIDATA_ACK);

	app_ack.cChannel_Protocol=TRP_PROTOCOL_CMPP12;
//	app_ack.cRequest_Plat;
//	app_ack.cService_ChannelID=;
//	app_ack.cService_Plat=;
	app_ack.cTNO=2;
//	app_ack.wAppID=;
	strncpy(app_ack.szService_Number,gStructSmscInfo.szServiceNo,6);//获得特服号

	//MSGID值
	CString MsgID;
	MsgID.Format("%u",(DWORD)sSubmitRep->sHeader.Sequence_ID.seq);
	strncpy(app_ack.sMsgID.szMsgID,MsgID,MsgID.GetLength());

	app_ack.sMsgID.cMsgID_Length=MsgID.GetLength();
	app_ack.sMsgID.cMsgID_Type=3;

	app_ack.sHeader.dwTotalLen=htonl(31+app_ack.sMsgID.cMsgID_Length);

	int app_ack_size=31+app_ack.sMsgID.cMsgID_Length;
	
	//下发到应用系统模块
	TRACE("UNIDATA_ACK:%d\r\n",app_ack.sHeader.dwSeqNo);
	TRACE("ACK_MSGID:%s\r\n",app_ack.sMsgID.szMsgID);
	PtEntity.SendToTcp((char*)&app_ack,app_ack_size);

	return TRUE;
}

//短信查询应答消息
BOOL TMSG_CENTER::CMPP12_QueryRep(void* buf,UINT nBufLen)
{
	//检查数据包是否正确
	if(buf==NULL || nBufLen<=0)
		return FALSE;

	return FALSE;
}


extern DWORD g_dwAlarm;
void TMSG_CENTER::SGIP_Deliver(char buf[], int nMsgLen)
{
	if(buf==NULL || nMsgLen<=0)
		return ;

	g_dwAlarm = 0;
	char szUDPTmp[1024];
	ZeroMemory(szUDPTmp,sizeof(szUDPTmp));
	strcpy(szUDPTmp,gStructSmscInfo.szRemark);
	memcpy(&szUDPTmp[60],buf,nMsgLen);
	g_pUDPSocket->SendTo(szUDPTmp,nMsgLen+60,gStructWatchInfo.szIP,gStructWatchInfo.nPort);

	STRUCT_DELIVERY sDelivery;
	DELIVER* sSGIPDelivery = (DELIVER*)buf;

	sDelivery.sDeliveryHeader.sHeader.dwCommandId = htonl(TRP_DELIVERY);
	sDelivery.sDeliveryHeader.sHeader.dwSeqNo = sSGIPDelivery->sHeader.Sequence_ID.seq;
	sDelivery.sDeliveryHeader.sHeader.dwStatus = 0;
	sDelivery.sDeliveryHeader.sHeader.dwTotalLen;//???
	sDelivery.sDeliveryHeader.cChannel_Protocol = 2;//SGIP_PROTOCOL
	sDelivery.sDeliveryHeader.cProtocol_Type = 1;
	sDelivery.sDeliveryHeader.cTNO = 2;
	memcpy(sDelivery.sDeliveryHeader.szService_Number,gStructSmscInfo.szServiceNo,6);
	sDelivery.sDeliveryHeader.wProtocol_Length;//???
	sDelivery.sCMPP12Delivery.sHeader.dwCommand_ID = htonl(CMPP12_DELIVERY);
	sDelivery.sCMPP12Delivery.sHeader.dwSequence_ID = 0;
	sDelivery.sCMPP12Delivery.sHeader.dwTotal_Length;//???
	sDelivery.sCMPP12Delivery.cMsg_Fmt = sSGIPDelivery->MessageCoding;
	sDelivery.sCMPP12Delivery.cRegistered_Delivery = 0;
	sDelivery.sCMPP12Delivery.cTP_Pid = sSGIPDelivery->TP_pid;
	sDelivery.sCMPP12Delivery.cTP_Udhi = sSGIPDelivery->TP_udhi;
	memcpy(sDelivery.sCMPP12Delivery.Msg_Content,sSGIPDelivery->MessageContent,ntohl(sSGIPDelivery->MessageLength));
	sDelivery.sCMPP12Delivery.n64Msg_ID = -1;
	strncpy(sDelivery.sCMPP12Delivery.szSrc_terminalID,sSGIPDelivery->UserNumber,21);
	sDelivery.sCMPP12Delivery.szService_ID;
	strncpy(sDelivery.sCMPP12Delivery.szDestinationID,sSGIPDelivery->SPNumber,21);
	sDelivery.sCMPP12Delivery.wMsg_Length = htons((WORD)ntohl(sSGIPDelivery->MessageLength));

	unsigned short *p;
	DWORD i;
	//转换来自网关的编码为应用编码
		switch(sDelivery.sCMPP12Delivery.cMsg_Fmt)
		{
		case 0:
			break;
		case 15:
			break;
		case 0xf5:
		case 4:
		case 2:
			byteToStr(sSGIPDelivery->MessageContent, (char)ntohl(sSGIPDelivery->MessageLength), sDelivery.sCMPP12Delivery.Msg_Content);
			sDelivery.sCMPP12Delivery.wMsg_Length=htons((short)(ntohl(sSGIPDelivery->MessageLength)+ntohl(sSGIPDelivery->MessageLength)));
			sDelivery.sCMPP12Delivery.cMsg_Fmt=2;
			//strcpy(ut->message, buf); 
			break;
		case 8:
		case 10:		
			p = (unsigned short *)&sSGIPDelivery->MessageContent;
			for(i=0; i <ntohl(sSGIPDelivery->MessageLength)/2; i++,p++)
				*p = ntohs(*p);
			sDelivery.sCMPP12Delivery.wMsg_Length = WideCharToMultiByte(CP_ACP, 0, (WCHAR *)sSGIPDelivery->MessageContent, ntohl(sSGIPDelivery->MessageLength)/2, NULL, 0,NULL,NULL);
			
			WideCharToMultiByte(CP_ACP, 0, (WCHAR *)sSGIPDelivery->MessageContent, ntohl(sSGIPDelivery->MessageLength)/2, sDelivery.sCMPP12Delivery.Msg_Content, sDelivery.sCMPP12Delivery.wMsg_Length,NULL,NULL);
			sDelivery.sCMPP12Delivery.wMsg_Length=htons(sDelivery.sCMPP12Delivery.wMsg_Length);
			sDelivery.sCMPP12Delivery.cMsg_Fmt=15;
			break;
		default:
			//gpMainFrame->PrintToEdit("不认识的编码",FALSE);
			break;
		}
	sDelivery.sCMPP12Delivery.sHeader.dwTotal_Length = htonl(sizeof(STRUCT_CMPP12_DELIVERY)-sizeof(sDelivery.sCMPP12Delivery.Msg_Content)+(long)ntohs(sDelivery.sCMPP12Delivery.wMsg_Length));
	sDelivery.sDeliveryHeader.wProtocol_Length = htons((short)ntohl(sDelivery.sCMPP12Delivery.sHeader.dwTotal_Length));
	sDelivery.sDeliveryHeader.sHeader.dwTotalLen = htonl((long)ntohs(sDelivery.sDeliveryHeader.wProtocol_Length)+sizeof(STRUCT_DELIVERY_HEADER));
	if(gStructChannelInfo.nSpFlag)
	{
		sDelivery.sCMPP12Delivery.sHeader.dwTotal_Length = htonl(sizeof(STRUCT_CMPP12_DELIVERY)-sizeof(sDelivery.sCMPP12Delivery.Msg_Content)+(long)ntohs(sDelivery.sCMPP12Delivery.wMsg_Length)+2);
		sDelivery.sDeliveryHeader.wProtocol_Length = htons((short)ntohl(sDelivery.sCMPP12Delivery.sHeader.dwTotal_Length));
		sDelivery.sDeliveryHeader.sHeader.dwTotalLen = htonl((long)ntohs(sDelivery.sDeliveryHeader.wProtocol_Length)+sizeof(STRUCT_DELIVERY_HEADER));
		char strtmp[160];
		memset(strtmp,0,sizeof strtmp);
		memcpy(strtmp,(short*)&gStructChannelInfo.nPacket,2);
		memcpy(&strtmp[2],sDelivery.sCMPP12Delivery.Msg_Content,ntohs(sDelivery.sCMPP12Delivery.wMsg_Length));
		memcpy(sDelivery.sCMPP12Delivery.Msg_Content,strtmp,160);
		sDelivery.sCMPP12Delivery.wMsg_Length=htons((short)strlen(sDelivery.sCMPP12Delivery.Msg_Content));
	}
	memset(sDelivery.sCMPP12Delivery.Reserve,0,8);
	memcpy(sDelivery.sCMPP12Delivery.Reserve, sSGIPDelivery->Reserve, sizeof(sSGIPDelivery->Reserve));
	for(i=0;i<127;i++)
	{
		if(strcmp(gszAddPackets[i],"END") == 0)
			break;
		if(strncmp(gszAddPackets[i],sDelivery.sCMPP12Delivery.szDestinationID,strlen(gszAddPackets[i])) == 0)
		{
			char szTmp[281];
			ZeroMemory(szTmp,sizeof(szTmp));
			strcpy(sDelivery.sCMPP12Delivery.szService_ID,gszAddPackets[i]);
			strcpy(szTmp,&gszAddPackets[i][strlen(gszAddPackets[i])+1]);
			strncpy(&szTmp[2],sDelivery.sCMPP12Delivery.Msg_Content,ntohs(sDelivery.sCMPP12Delivery.wMsg_Length));

			ZeroMemory(sDelivery.sCMPP12Delivery.Msg_Content,sizeof(sDelivery.sCMPP12Delivery.Msg_Content));
			strcpy(sDelivery.sCMPP12Delivery.Msg_Content,szTmp);
			sDelivery.sDeliveryHeader.sHeader.dwTotalLen = htonl(ntohl(sDelivery.sDeliveryHeader.sHeader.dwTotalLen)+2);
			sDelivery.sCMPP12Delivery.wMsg_Length = htons(ntohs(sDelivery.sCMPP12Delivery.wMsg_Length)+2);
			sDelivery.sDeliveryHeader.wProtocol_Length = htons(ntohs(sDelivery.sDeliveryHeader.wProtocol_Length)+2);
			//app_ind_head.sHeader.dwTotalLen=htonl(ntohl(app_ind_head.sHeader.dwTotalLen)+2);
			if(sDelivery.sCMPP12Delivery.cMsg_Fmt==2)
			{
				char strsrc[3]={0},strdest[5]={0};
				strcpy(strsrc,&gszAddPackets[i][strlen(gszAddPackets[i])+1]);
				byteToStr(strsrc,2,strdest);
				strcpy(szTmp,strdest);
				strncpy(&szTmp[4],&sDelivery.sCMPP12Delivery.Msg_Content[2],ntohs(sDelivery.sCMPP12Delivery.wMsg_Length)-2);
				ZeroMemory(sDelivery.sCMPP12Delivery.Msg_Content,sizeof(sDelivery.sCMPP12Delivery.Msg_Content));
				strcpy(sDelivery.sCMPP12Delivery.Msg_Content,szTmp);
				sDelivery.sDeliveryHeader.sHeader.dwTotalLen = htonl(ntohl(sDelivery.sDeliveryHeader.sHeader.dwTotalLen)+2);
				sDelivery.sCMPP12Delivery.wMsg_Length = htons(ntohs(sDelivery.sCMPP12Delivery.wMsg_Length)+2);
				sDelivery.sDeliveryHeader.wProtocol_Length = htons(ntohs(sDelivery.sDeliveryHeader.wProtocol_Length)+2);
				sDelivery.sDeliveryHeader.sHeader.dwTotalLen=htonl(ntohl(sDelivery.sDeliveryHeader.sHeader.dwTotalLen)+2);
			}
			break;
		}
	}
	//CSSgipDelivery.Lock();
	PtEntity.SendToTcp((char*)&sDelivery,ntohl(sDelivery.sDeliveryHeader.sHeader.dwTotalLen));
	//CSSgipDelivery.Unlock();
}
//PDU码==》PDU串
void TMSG_CENTER::byteToStr(char sourcebuf[], BYTE Msg_Length, char *Destbuf)
{
	for(int i=0; i < Msg_Length; i++)
	{
		Destbuf[i+i+1]=getHex(sourcebuf[i]&0x0f);
		Destbuf[i+i]=getHex(sourcebuf[i]>>4&0x0f);
	}
	Destbuf[Msg_Length+Msg_Length] = '\0';
}
//转换十六进制数字为字符
char TMSG_CENTER::getHex(char c)
{
	if(c>=0&&c <=9)
		return c+'0';
	else 
	switch(c) {
	case 10:
		c= 'A';
		break;
	case 11:
		c= 'B';
		break;
	case 12:
		c= 'C';
		break;
	case 13:
		c= 'D';
		break;
	case 14:
		c= 'E';
		break;
	case 15:
		c= 'F';
		break;
	}
	return c;
}

void TMSG_CENTER::SGIP_Report(char buf[], int nMsgLen)
{
	STRUCT_MSG_REPORT sMsgReport;
	STRUCT_SGIP_REPORT* sSGIPReport = (STRUCT_SGIP_REPORT*)buf;
	
	sMsgReport.sMsgReportToApp.sHeader.dwCommandId = htonl(TRP_MSG_REPORT);
	sMsgReport.sMsgReportToApp.sHeader.dwSeqNo = sSGIPReport->sHeader.Sequence_ID.seq;
	if((sSGIPReport->cState == 0) || (sSGIPReport->cState == 1))
		sMsgReport.sMsgReportToApp.sHeader.dwStatus = htonl((long)sSGIPReport->cState);
	else
		sMsgReport.sMsgReportToApp.sHeader.dwTotalLen = htonl((long)sSGIPReport->cErrorCode);
	sMsgReport.sMsgReportToApp.sHeader.dwTotalLen = htonl(sizeof(STRUCT_MSG_REPORT));
	sMsgReport.sMsgReportToApp.cChannel_Protocol = 2;//SGIP_PROTOCOL
	sMsgReport.sMsgReportToApp.cTNO = 2;
	//MSGID值
	CString MsgID;
	MsgID.Format("%u",(DWORD)sSGIPReport->sSeqNo.seq);
	strncpy(sMsgReport.sMsgID.szMsgID,MsgID,MsgID.GetLength());

	sMsgReport.sMsgID.cMsgID_Length=MsgID.GetLength();
	sMsgReport.sMsgID.cMsgID_Type=3;

	//CSSgipReport.Lock();
	TRACE("REPORT_MSGID:%s\r\n",sMsgReport.sMsgID.szMsgID);
	PtEntity.SendToTcp((char*)&sMsgReport,ntohl(sMsgReport.sMsgReportToApp.sHeader.dwTotalLen));
	//CSSgipReport.Unlock();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -