📄 msg_center.cpp
字号:
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 + -