smsm.c

来自「使用标准C开发的同时支持CMPP3.0 和 CMPP2.0 的SP短信网关程序」· C语言 代码 · 共 239 行

C
239
字号
#include <windows.h>
#include <stdio.h>
#include "vscp_os.h"
#include "iblock.h"
#include "smctimer.h"
#include "spsms.h"
#include "inifile.h"

#include ".\coding\coding.h"

#if defined WIN32 || defined LINUX
#pragma pack(push,1)
#endif

typedef struct CALLNUMBER_STR
{
	unsigned short len;
	unsigned char No[32];
}CALLNUMBER_T, * P_CALLNUMBER_T;

typedef struct RECBUFF_STR
{
	unsigned short len;
	unsigned char  buf[32];
}RECBUFF_T, * P_RECBUFF_T;

typedef struct SubAuth_Prim_STR
{
	unsigned short	type;
	CALLNUMBER_T *	cp;
	int				ch;
} SubAuth_Prim_Type;

typedef struct Asr_Prim_STR
{
	unsigned short	type;
	RECBUFF_T *		recbuf;
	int				ch;
} Asr_Prim_Type;


#if defined(WIN32)||defined(LINUX)
#pragma pack(pop)
#endif

CALLNUMBER_T   cp;

#define ISMGACTIVETEST_T	(20*1*1000)
extern void InitIsmgMsgTv();
extern void InitScanQueue(void);
extern int InitProcess(void); 
extern void ScanReceiveQueue();
extern void CMPP_SendActiveTestReq();
extern void CMPP_CloseClient();
extern int  CMPP_SendSubmitReq(unsigned int *pnSeqId,
						char *sMsgId,
						unsigned char nPkTotal,
						unsigned char nPkNumber,
						unsigned char nRegister,
						unsigned char nMsgLevel,
						char *sServiceId,
						unsigned char nFeeUserType,
						char *sFeeTerminalId,
						unsigned char nFeeTerminalType,
						unsigned char nTPPid,
						unsigned char nTPUdhi,
						unsigned char nMsgFmt,
						char *sSpId,
						unsigned char nFeeType,
						char *sFeeCode,
						char *sSrcTerminalId,
						unsigned char nDstAddrNumber,
						char *sDstTerminalId,
						unsigned char nDstTerminalType,
						unsigned char nMsgLen,
						char *sMsgContent,
						char *sLinkId,
						char * md5);

extern DWORD WINAPI QueryWarning(PVOID param);



int ReadSetting()
{
	const char sFileName[MAX_STRING_LEN] = "setting.ini";
	const char sSection[MAX_STRING_LEN] = "SP";
	const char sKey[MAX_SET_PARAM_NUM][MAX_STRING_LEN] = {"localip", "ismgip", "spid", "sppwd"};
	char	   sValue[MAX_SET_PARAM_NUM][MAX_STRING_LEN] = {0};	
	int	i = 0;

	for (i=0; i<MAX_SET_PARAM_NUM; i++)
	{
		if(!read_profile_string(sSection, sKey[i], sValue[i], MAX_STRING_LEN, "", sFileName))
		{
			printf("read ini file fail\n");
			return -1;
		}
	}	

	strcpy(SpSmc.localip, sValue[0]);
	strcpy(SpSmc.ismgip, sValue[1]);
	strcpy(SpSmc.spid, sValue[2]);
	strcpy(SpSmc.sppwd, sValue[3]);

	return 0;
}

void InitSpSmc()
{


	if (0 != ReadSetting())
	{
		return;
	}

	SpSmc.CheckN = MAXCHECK_N;

//	SysTestTv.Value = (3*60*1*1000);
	SysTestTv.Value = ISMGACTIVETEST_T*3;
	SysTestTv.pre = 0;
	SysTestTv.suc = 0;
	SysTestTv.TimerTime = 0;
	SysTestTv.TimeType = 1;

	SysTestResTv.Value = ISMGACTIVETEST_T;
	SysTestResTv.pre = 0;
	SysTestResTv.suc = 0;
	SysTestResTv.TimerTime = 0;
	SysTestResTv.TimeType = 2;

	InitIsmgMsgTv();
}


PrepareSubmit()
{
}

void GetErrorMsg()
{
	LPVOID lpMsgBuf;
	DWORD dw = GetLastError(); 
	
	FormatMessage(
		FORMAT_MESSAGE_ALLOCATE_BUFFER | 
		FORMAT_MESSAGE_FROM_SYSTEM |
		FORMAT_MESSAGE_IGNORE_INSERTS,
		NULL,
		dw,
		MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
		(LPTSTR) &lpMsgBuf,
		0, NULL );
	
	printf("Error: %s\n", lpMsgBuf);
	LocalFree(lpMsgBuf);
}

void main()
{
	DWORD listenThreadID = NULL;
	HANDLE listenHandle = NULL;
// 
// 	LocalSPData.Asr = 3;
// 	LocalSPData.DB	= 1; 
// 	LocalSPData.Man = 4;
// 	LocalSPData.Sms = 2;

	GetTargetInfo();
	InitSpSmc();
	InitIdleBlock();
	InitScanQueue();
	SmcTimerInit();

	InitProcess();

	StartClient();


	if (NULL == (listenHandle = CreateThread(NULL, NULL, QueryWarning, NULL, NULL, &listenThreadID)))
	{
		printf("初始化告警监控线程出错。\n");
		GetErrorMsg();
	}

	for (;;)
	{
		ScanReceiveQueue();
		SmcCheckTimer();

		ThreadSleep(10);
	}


	return ;
}


void SysTExpire(void * para,void *para1)
{
	CMPP_SendActiveTestReq();
	SmcSetTimer(&SysTestTv);
	SpSmc.Tswitch = 1;
	SmcSetTimer(&SysTestResTv);
}

void SysTestResExpire(void * para,void *para1)
{
	if (SpSmc.Tswitch == 1)
	{
		printf("TestResExprie and CheckN = %d; \n",SpSmc.CheckN);
		SpSmc.CheckN --;
		if (SpSmc.CheckN == 0)
		{
			CMPP_CloseClient();
		}
		else
		{
			CMPP_SendActiveTestReq();
			SmcSetTimer(&SysTestResTv);
		}
	}
}

void WriteLog(char * buf)
{
	FILE * fp;

	fp = fopen("vscpsmc.log", "a");
	if (fp == NULL)
		return;

	fprintf(fp, "%s \n", buf);
	fclose(fp);

}

⌨️ 快捷键说明

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