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

📄 readservicefeeinfo.cpp

📁 中国移动的短信网关程序
💻 CPP
字号:

#include "stdafx.h"
#include "SmGateway.h"

TServiceFeeTable g_rServiceFeeTable[MAX_SERVICE_ID];
static long int g_lMaintenanceModifyTime=0;  //last modified time

static char *LTrim(char * spSour)
{
	char * p;
	if (spSour == NULL) return NULL;
	p = spSour;
	while( *p==' ' || *p =='\t' ) p++;
	strcpy(spSour, p);
	return spSour;
}

static char *RTrim(char * spSour)
{
	char * p;
	if (spSour == NULL) return NULL;

	if( strlen(spSour) > 0 )
	{
		p = spSour + strlen(spSour) - 1;
		while( *p==' ' || *p =='\t')
		{
			* p = '\0';
			if(p==spSour) break;
			else p--;
		}
	}
	return spSour;
}

static char *Trim(char * spSour)
{
	if(spSour == NULL) return NULL;
	return LTrim(RTrim(spSour));
}

static int nReadParam(char *spParams, char *spParam, int nIndex, char cSpaceChar, int nLen)
{
	char *spStart, *spEnd;
	int i;

	if( spParams == NULL || spParam == NULL)
		return -1;
	
	spStart=spParams;
	for( i=0; i<nIndex; i++ )
	{
		spStart = strchr(spStart, cSpaceChar);
		if( spStart == NULL )
		{
			spParam = NULL;
			return -1;
		}
		else spStart ++;
	}
	spEnd =strchr(spStart,cSpaceChar);
	memset(spParam,'\0',nLen);
	if(spEnd == NULL)
		strncpy(spParam,spStart,nLen);
	else
	   strncpy(spParam,spStart,((spEnd-spStart) > nLen ? nLen : spEnd-spStart));
	if (spParam==NULL) return -1;
	Trim(spParam);
	return 0;
}

static void InitServiceFeeInfoTable()
{
	int i,k;
	for(i=0; i<MAX_SERVICE_ID; i++)
	{
		g_rServiceFeeTable[i].nIsUsed = 0;
		memset(g_rServiceFeeTable[i].sServiceId, 0x00, MAX_SERVICEID_LEN);
		memset(g_rServiceFeeTable[i].sServiceType, 0x00, MAX_SERVICETYPE_LEN);
		for(k=0; k<MAX_PROVINCE_NUM; k++)
		{
			g_rServiceFeeTable[i].rProviceFeeInfo[k].nIsUsed = 0;
			memset(g_rServiceFeeTable[i].rProviceFeeInfo[k].rFeeInfo.sFeeCode, 0x00, MAX_FEECODE_LEN);
			memset(g_rServiceFeeTable[i].rProviceFeeInfo[k].rFeeInfo.sFeeType, 0x00, MAX_FEETYPE_LEN);
		}
	}
}

int ReadServiceFeeInfoToMem(char *sFeeInfoFile)
{
    FILE *fp;
	char sTxtLine[128] = {0x00};
	char sFeeType[MAX_FEETYPE_LEN] = {0x00};
	char sFeeCode[MAX_FEECODE_LEN] = {0x00};
	char sServiceId[MAX_SERVICEID_LEN] = {0x00};
	char sServiceType[MAX_SERVICETYPE_LEN] = {0x00};
	char sProvince[8] = {0x0};
	int  nProvince = 0;
	struct stat rStat;
	
	int i,j;

	SmgTrace(0, (char *)"Begin to read service fee infomation");
	InitServiceFeeInfoTable();
	
    if((fp = fopen(sFeeInfoFile, "r")) == NULL)
        return -1;
	j=0;
	while(fgets(sTxtLine, 127, fp))
	{
		if(sTxtLine[0] == '#')
			continue;
		i=0;
		nReadParam(sTxtLine, sServiceId, i++, ';', MAX_SERVICEID_LEN);
		nReadParam(sTxtLine, sServiceType, i++, ';', MAX_SERVICETYPE_LEN);
		nReadParam(sTxtLine, sProvince, i++, ';', 8);
		nProvince = atoi(sProvince);
		if(nProvince <0 || nProvince >MAX_PROVINCE_NUM)
		{
			SmgTrace(2, (char *)"Error: read service fee infomation error, Province=%d", nProvince);
			continue;
		}
		nReadParam(sTxtLine, sFeeType, i++, ';', MAX_FEETYPE_LEN);
		nReadParam(sTxtLine, sFeeCode, i++, ';', MAX_FEECODE_LEN);
		if(sFeeCode[strlen(sFeeCode)-1] == '\n')
			sFeeCode[strlen(sFeeCode)-1] = '\0';
		if(sFeeCode[strlen(sFeeCode)-1] == '\r')
			sFeeCode[strlen(sFeeCode)-1] = '\0';

		for(j=0; j<MAX_SERVICE_ID; j++)
		{
			if(g_rServiceFeeTable[j].nIsUsed == 1 && strcmp(g_rServiceFeeTable[j].sServiceId, sServiceId) == 0)
			{
				g_rServiceFeeTable[j].nIsUsed = 1;
				g_rServiceFeeTable[j].rProviceFeeInfo[nProvince].nIsUsed = 1;
				strcpy(g_rServiceFeeTable[j].rProviceFeeInfo[nProvince].rFeeInfo.sFeeCode, sFeeCode);
				strcpy(g_rServiceFeeTable[j].rProviceFeeInfo[nProvince].rFeeInfo.sFeeType, sFeeType);
				break;
			}
		}
		for(j=0; j<MAX_SERVICE_ID; j++)
		{
			if(g_rServiceFeeTable[j].nIsUsed == 0)
			{
				g_rServiceFeeTable[j].nIsUsed = 1;
				strcpy(g_rServiceFeeTable[j].sServiceId, sServiceId);
				strcpy(g_rServiceFeeTable[j].sServiceType, sServiceType);
				//g_rServiceFeeTable[j].nIsUsed = 1;
				g_rServiceFeeTable[j].rProviceFeeInfo[nProvince].nIsUsed = 1;
				strcpy(g_rServiceFeeTable[j].rProviceFeeInfo[nProvince].rFeeInfo.sFeeCode, sFeeCode);
				strcpy(g_rServiceFeeTable[j].rProviceFeeInfo[nProvince].rFeeInfo.sFeeType, sFeeType);
				break;
			}
		}
	}
	fclose(fp);
	SmgTrace(0, (char *)"End to read service fee infomation");
	if(stat(sFeeInfoFile,&rStat)==0)
	{
		g_lMaintenanceModifyTime=rStat.st_mtime;
	}
	return 0;
}
extern char g_sFeeInfoFile[];
void ReloadServiceFeeInfo()
{
	static time_t lOldTime=0;
	time_t lNewTime;
	struct stat rStat;

	time(&lNewTime);

	if((lNewTime-lOldTime)>=CHECK_CONFIGINFO_TIMEVAL)
	{
		lOldTime=lNewTime;

		if(stat(g_sFeeInfoFile,&rStat)==0)
		{
			if(rStat.st_mtime!=g_lMaintenanceModifyTime)
				ReadServiceFeeInfoToMem(g_sFeeInfoFile);
		}
	}
}

⌨️ 快捷键说明

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