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

📄 common.cpp

📁 短信网管的原代码。用于与sp通信
💻 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 + -