📄 common.cpp
字号:
#include "stdafx.h"
#include "common.h"
#include "MainFrm.h"
//声明主框架类的实例,用于别类的显示
CMainFrame* g_MainFrame=NULL;
UINT THESEQ_NO=1;
//短消息通道信息
STRUCT_SMSCINFO gStructSmscInfo;
//短信中心发送链路配置
STRUCT_TRANSINFO gStructTransInfo;
//短信中心发送链路配置
STRUCT_RECVINFO gStructRecvInfo;
//系统模块配置
STRUCT_CLIENTINFO gStructClientInfo;
//监控中心配置
STRUCT_WATCHCENTER gStructWatchInfo;
//通道属性配置
STRUCT_CHANNEL_INFO gStructChannelInfo;
STRUCT_PACKET_LIST packetList;
//检测连接发送网络状态报告
DWORD gdw_RcvLinkNetStatus = 0;
DWORD gdw_TransLinkNetStatus = 0;
DWORD gdw_PtLinkNetStatus = 0;
DWORD gdw_CmppLinkNetStatus = 0;
//跟踪对象
TOutInterface Out;
char gszAddPackets[128][32];
char gszExchangeFees[128][32];
//读取配置文件
BOOL ReadInitFile()
{
//获得根据源SIM卡号码添加包头的配置
char szAddPacketsRet[1024],*pAddPacketsRet;
DWORD dwSize,dwAddPacketsRet,i;
dwSize = sizeof(szAddPacketsRet);
dwAddPacketsRet = GetPrivateProfileSection("ADDPACKETS",szAddPacketsRet,dwSize,szIniFileName);
pAddPacketsRet = szAddPacketsRet;
i = 0;
while(dwAddPacketsRet > 0)
{
strcpy(gszAddPackets[i],(strstr(pAddPacketsRet,"=")+1));
*strstr(gszAddPackets[i],"|") = 0;
dwAddPacketsRet -= (strlen(pAddPacketsRet)+1);
pAddPacketsRet += (strlen(pAddPacketsRet)+1);
i++;
}
strcpy(gszAddPackets[i],"END");
pAddPacketsRet = NULL;
//获得根据业务类型更改费率的配置
ZeroMemory(gszExchangeFees,sizeof(gszExchangeFees));
char szFeeTmp[128];
for(i=0;i<128;i++)
{
ZeroMemory(szFeeTmp,128);
sprintf(szFeeTmp,"EXCHANGEFEE%d",i+1);
GetPrivateProfileString("EXCHANGEFEES",szFeeTmp,"",gszExchangeFees[i],32,szIniFileName);
if(strlen(gszExchangeFees[i]) == 0)
{
strcpy(gszExchangeFees[i],"END");
break;
}
*strstr(gszExchangeFees[i],"|") = 0;
}
//[SMSCINFO]
GetPrivateProfileString("SMSCINFO","CORPID","",gStructSmscInfo.szCorpID,sizeof(gStructSmscInfo.szCorpID),szIniFileName);
GetPrivateProfileString("SMSCINFO","SMCREMARK","短消息通道",gStructSmscInfo.szRemark,sizeof(gStructSmscInfo.szRemark),szIniFileName);
gStructSmscInfo.nIVersion=GetPrivateProfileInt ("SMSCINFO", "INTERFACE_VERSION",-1,szIniFileName);
if(gStructSmscInfo.nIVersion==-1)
{
MessageBox(NULL,"读配置文件时出错!SMSCINFO段的INTERFACE_VERSION值(ReadInitFile)","错误信息",MB_OK+MB_ICONQUESTION);
return FALSE;
}
GetPrivateProfileString("SMSCINFO","SERVICENUMBER","-1",gStructSmscInfo.szServiceNo,sizeof(gStructSmscInfo.szServiceNo),szIniFileName);
if(!strcmp(gStructSmscInfo.szServiceNo,"-1"))
{
MessageBox(NULL,"读配置文件时出错!SMSCINFO段的SERVICENUMBER值(ReadInitFile)","错误信息",MB_OK+MB_ICONQUESTION);
return FALSE;
}
//[SMC_TRANSINFO]
gStructTransInfo.nPort=GetPrivateProfileInt ("SMC_TRANSINFO", "SMC_TRANS_PORT",-1,szIniFileName);
if(gStructTransInfo.nPort==-1)
{
MessageBox(NULL,"读配置文件时出错!SMC_TRANSINFO段的SMC_TRANS_PORT值(ReadInitFile)","错误信息",MB_OK+MB_ICONQUESTION);
return FALSE;
}
GetPrivateProfileString("SMC_TRANSINFO", "SMC_TRANS_IP","-1",gStructTransInfo.szTransIP,sizeof(gStructTransInfo.szTransIP),szIniFileName);
if(!strcmp(gStructTransInfo.szTransIP,"-1"))
{
MessageBox(NULL,"读配置文件时出错!SMC_TRANSINFO段的SMC_TRANS_IP值(ReadInitFile)","错误信息",MB_OK+MB_ICONQUESTION);
return FALSE;
}
GetPrivateProfileString("SMC_TRANSINFO", "SMC_TRANS_ICPID","-1",gStructTransInfo.szICPID,sizeof(gStructTransInfo.szICPID),szIniFileName);
if(!strcmp(gStructTransInfo.szICPID,"-1"))
{
MessageBox(NULL,"读配置文件时出错!SMC_TRANSINFO段的SMC_TRANS_ICPID值(ReadInitFile)","错误信息",MB_OK+MB_ICONQUESTION);
return FALSE;
}
GetPrivateProfileString("SMC_TRANSINFO", "SMC_TRANS_PAS","-1",gStructTransInfo.szPAS,sizeof(gStructTransInfo.szPAS),szIniFileName);
if(!strcmp(gStructTransInfo.szPAS,"-1"))
{
MessageBox(NULL,"读配置文件时出错!SMC_TRANSINFO段的SMC_TRANS_PAS值(ReadInitFile)","错误信息",MB_OK+MB_ICONQUESTION);
return FALSE;
}
//[SMC_RECVINFO]
gStructRecvInfo.nPort=GetPrivateProfileInt ("SMC_RECVINFO", "SMC_RECV_PORT",-1,szIniFileName);
if(gStructRecvInfo.nPort==-1)
{
MessageBox(NULL,"读配置文件时出错!SMC_RECVINFO段的SMC_RECV_PORT值(ReadInitFile)","错误信息",MB_OK+MB_ICONQUESTION);
return FALSE;
}
GetPrivateProfileString("SMC_RECVINFO", "SMC_RECV_IP","-1",gStructRecvInfo.szIP,sizeof(gStructRecvInfo.szIP),szIniFileName);
if(!strcmp(gStructRecvInfo.szIP,"-1"))
{
MessageBox(NULL,"读配置文件时出错!SMC_RECVINFO段的SMC_TRANS_IP值(ReadInitFile)","错误信息",MB_OK+MB_ICONQUESTION);
return FALSE;
}
GetPrivateProfileString("SMC_RECVINFO", "SMC_RECV_ICPID","-1",gStructRecvInfo.szICPID,sizeof(gStructRecvInfo.szICPID),szIniFileName);
if(!strcmp(gStructRecvInfo.szICPID,"-1"))
{
MessageBox(NULL,"读配置文件时出错!SMC_RECVINFO段的SMC_TRANS_ICPID值(ReadInitFile)","错误信息",MB_OK+MB_ICONQUESTION);
return FALSE;
}
GetPrivateProfileString("SMC_RECVINFO", "SMC_RECV_PAS","-1",gStructRecvInfo.szPAS,sizeof(gStructRecvInfo.szPAS),szIniFileName);
if(!strcmp(gStructRecvInfo.szPAS,"-1"))
{
MessageBox(NULL,"读配置文件时出错!SMC_RECVINFO段的SMC_TRANS_PAS值(ReadInitFile)","错误信息",MB_OK+MB_ICONQUESTION);
return FALSE;
}
//[CLIENTINFO]
gStructClientInfo.nPort=GetPrivateProfileInt ("CLIENTINFO", "SYSMODULE_PORT",-1,szIniFileName);
if(gStructClientInfo.nPort==-1)
{
MessageBox(NULL,"读配置文件时出错!CLIENTINFO段的SYSMODULE_PORT值(ReadInitFile)","错误信息",MB_OK+MB_ICONQUESTION);
return FALSE;
}
GetPrivateProfileString("CLIENTINFO", "SYSMODULE_IP","-1",gStructClientInfo.szIP,sizeof(gStructClientInfo.szIP),szIniFileName);
if(!strcmp(gStructClientInfo.szIP,"-1"))
{
MessageBox(NULL,"读配置文件时出错!CLIENTINFO 段的SYSMODULE_IP值(ReadInitFile)","错误信息",MB_OK+MB_ICONQUESTION);
return FALSE;
}
//[WATCHCENTER]
gStructWatchInfo.nPort=GetPrivateProfileInt ("WATCHCENTER", "WATCHPORT",-1,szIniFileName);
if(gStructWatchInfo.nPort==-1)
{
MessageBox(NULL,"读配置文件时出错!WATCHCENTER段的WATCHPORT值(ReadInitFile)","错误信息",MB_OK+MB_ICONQUESTION);
return FALSE;
}
GetPrivateProfileString("WATCHCENTER", "WATCHHOSTIP","-1",gStructWatchInfo.szIP,sizeof(gStructWatchInfo.szIP),szIniFileName);
if(!strcmp(gStructWatchInfo.szIP,"-1"))
{
MessageBox(NULL,"读配置文件时出错!WATCHCENTER 段的WATCHHOSTIP值(ReadInitFile)","错误信息",MB_OK+MB_ICONQUESTION);
return FALSE;
}
//channel name
GetPrivateProfileString("CHANNELINFO","CHANNELNAME","BJ1",gStructChannelInfo.szChannelName,sizeof(gStructChannelInfo.szChannelName),szIniFileName);
//password
GetPrivateProfileString("CHANNELINFO","PASSWORD","1234",gStructChannelInfo.szPwd,sizeof(gStructChannelInfo.szPwd),szIniFileName);
//channel protocol
gStructChannelInfo.ChannelProtocol=GetPrivateProfileInt ("CHANNELINFO", "CHANNELPROTOCOL",-1,szIniFileName);
if(gStructChannelInfo.ChannelProtocol==-1)
{
MessageBox(NULL,"读配置文件时出错!CHANNELINFO段的CHANNELPROTOCOL值(ReadInitFile)","错误信息",MB_OK+MB_ICONQUESTION);
return FALSE;
}
//channel type
gStructChannelInfo.ChannelType=GetPrivateProfileInt ("CHANNELINFO", "CHANNELTYPE",-1,szIniFileName);
if(gStructChannelInfo.ChannelType==-1)
{
MessageBox(NULL,"读配置文件时出错!CHANNELINFO段的CHANNELTYPE值(ReadInitFile)","错误信息",MB_OK+MB_ICONQUESTION);
return FALSE;
}
//channel special
gStructChannelInfo.nSpFlag=GetPrivateProfileInt("CHANNELINFO","BSPCHANNEL",-1,szIniFileName);
if(gStructChannelInfo.nSpFlag==-1)
{
MessageBox(NULL,"读配置文件时出错!CHANNELINFO段的BSPCHANNEL值(ReadInitFile)","错误信息",MB_OK+MB_ICONQUESTION);
return FALSE;
}
//channel packet
gStructChannelInfo.nPacket=GetPrivateProfileInt("CHANNELINFO", "MOPACKET",-1,szIniFileName);
if(gStructChannelInfo.nPacket==-1)
{
MessageBox(NULL,"读配置文件时出错!CHANNELINFO段的MOPACKET值(ReadInitFile)","错误信息",MB_OK+MB_ICONQUESTION);
return FALSE;
}
char sztempszIds[2560];
ZeroMemory(&packetList,sizeof(STRUCT_PACKET_LIST));
char *szTmpPacket,*szTmp;
ZeroMemory(sztempszIds,sizeof(sztempszIds));
GetPrivateProfileString("CHANNELINFO","DYANPACKET0","",sztempszIds,sizeof(sztempszIds),szIniFileName);
szTmpPacket = strtok(sztempszIds,"|");
while((szTmpPacket)&&(packetList.Count<1024))
{
szTmp = strtok(NULL,"|");
if(szTmp==NULL)
break;
strcpy(packetList.packet[packetList.Count].szPacket,szTmpPacket);
strncpy(packetList.packet[packetList.Count].szCommand,szTmp,strlen(szTmp));
packetList.Count++;
}
return TRUE;
}
void MakeSmppHeader(char* szbuf,int nTotalLength,int nCommandID)
{
//
MESSAGE_HEADER *mh=(MESSAGE_HEADER*)szbuf;
mh->command_length=htonl(nTotalLength);
mh->command_id=htonl(nCommandID);
//向短信中心发送时均为0
mh->command_status=htonl(0);
mh->sequence_no=htonl(GET_SEQ_NO);
}
//拷贝最大化的字符串
int StrnCopy(char* szbuf,int nMaxstrlen,char* szSource)
{
int nStrlen=strlen(szSource);
nStrlen=(nStrlen>nMaxstrlen)?nMaxstrlen:nStrlen;
strncpy(szbuf,szSource,nStrlen);
return nStrlen;
}
void convPDUToBin(char *buf, WORD *sm_length)
{
int i;
*sm_length /= 2;
char szTemp[3];
szTemp[2]='\0';
for(i=0; i<*sm_length; i++)
{
szTemp[0]=buf[i+i];
szTemp[1]=buf[i+i+1];
buf[i]=strToByte(szTemp);
}
}
BYTE strToByte(char szTemp[])
{
BYTE bt;
char cTemp;
cTemp=toupper(szTemp[0]);
bt = (cTemp>='A')?(cTemp-'A'+10)*16:(cTemp-'0')*16;
cTemp=toupper(szTemp[1]);
bt += (cTemp>='A')?(cTemp-'A'+10):(cTemp-'0');
return bt;
}
void convCToUnicode(char *buf, unsigned char *sm_length)
{
int len = MultiByteToWideChar(CP_ACP, 0, buf, *sm_length, NULL, 0);
unsigned short buffer[512];
MultiByteToWideChar(CP_ACP, 0, buf, *sm_length, buffer, len);
for(int i=0; i <len; i++)
buffer[i]=htons(buffer[i]);
memcpy(buf, (char *) buffer, len+len);
buf[len+len]='\0';
*sm_length=len+len;
}
char 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 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';
}
void StrPrintHex(char *pCur, int iLen)
{
BYTE *pTmp = (BYTE *)pCur;
for(int i=0; i<iLen; i++)
{
if((i%16 == 0)&&(i>0))
printf("\n");
printf("%x%x_",(*pTmp)/16, (*pTmp)%16);
pTmp++;
}
printf("__iLen=%d\n",iLen);
}
//检查消息体里是否包含动态包头
char * CheckPacketInBuf(char buf[])
{
for(int i=0;i<packetList.Count;i++)
{
if(!strncmp(packetList.packet[i].szCommand,buf,strlen(packetList.packet[i].szCommand)))
return packetList.packet[i].szPacket;
}
return NULL;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -