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 + -
显示快捷键?