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

📄 lan_ip_jf-cgi.h

📁 计费部分源程序。我认为该软件极好
💻 H
📖 第 1 页 / 共 3 页
字号:
读取时间段名字
文件格式:time stage name
如:
0:00---8:00
8:00---17:00
17:00---24:00    
*/
void ReadTimeStageNameFile()
{
	FILE* userPtr;
	char str[100];
	char fileName[150];
	int i;
	
	if (TIME_STAGE_NUM <= 1)
		return;

	sprintf(fileName,"%s%s",PATH,TimeStageNameFile);
	/*读取路径文件*/
	if ((userPtr = fopen(fileName,"r")) != NULL)
	{
		for (i = 0; i < TIME_STAGE_NUM; i++)
		{
			fgets(str,100,userPtr);
			if (feof(userPtr))
				break;
			GetOneField(str,TimeStageName[i]);
		}
		fclose(userPtr);
	}   
}
/*
从网段列表文件中生成网端地址列表
该文件格式:Net Address|net mask|type
type = 0,主机
type = 1,网络
参数:netPartNo---网段号,filenName----列表文件名
*/
int ReadNetPartListFromFile(int netPartNo,char* fileName)
{
	FILE* fptr;
	char str[150];
	char* str1;
	char addr[30];
	char result[50];
	InternalNetType* netPtr;

	if ((fptr = fopen(fileName,"r")) == NULL)
	{
		PrintError("Don't Open Internal File %s.\n",fileName);
		return -1;
	}
	while (!feof(fptr))
	{
		fgets(str,150,fptr);
		if (feof(fptr))
			break;
		netPtr = malloc(sizeof(InternalNetType));
		if (netPtr == NULL)
		{
			PrintError("Noe enough memory in GrowInternalNetListFromFile().\n");
			fclose(fptr);
			return -1;
		}
		str1 = GetOneField(str,addr);
		TransIpAddress(0,addr,&(netPtr->netAddress));
		str1 = GetOneField(str1,addr);
		TransIpAddress(0,addr,&(netPtr->netMask));
		str1 = GetOneField(str1,result);
		netPtr->type = atoi(result);/*以后可能要从文件中读取*/
		netPtr->flag = 1;/*以后可能要从文件中读取*/
		netPtr->next = NetPartList[netPartNo];
		NetPartList[netPartNo] = netPtr;
	}
	fclose(fptr);
}

/*
读取网段文件,生成网段链表
NetPart 文件格式:netPartNo|fileName|netPartName
netPartNo:网段号
fileName:该网段地址列表文件
netPartName:网段名
*/
void ReadNetPartFile()
{
	int i;
	FILE* fptr,fptr1;
	char str[150];
	char fileName[100];
	char result[30],* startField;
	int netPartNo;

	for (i = 0;i < NET_PART_NUM; i++)
			NetPartList[i] = NULL;
		
	if ((fptr = fopen(NetPartFile,"r")) == NULL)
	{
		PrintError("don't open net part file %s\n",NetPartFile);
		return;
	}
	while (!feof(fptr))
	{
		fgets(str,150,fptr);
		if (feof(fptr))
			break;
		/*得到网段号*/
		startField = GetOneField(str,result);
		netPartNo = atoi(result);
		if ((netPartNo < 0) || (netPartNo >= NET_PART_NUM))
			continue;
		/*得到文件名*/
		startField = GetOneField(startField,fileName);
		/*得到网段名字符串*/
		startField = GetOneField(startField,NetPartName[netPartNo]);
		/*打开网段地址列表文件*/
		ReadNetPartListFromFile(netPartNo,fileName);
	}
}
/*
读取管理员的帐户文件,生成管理员列表
文件格式:managerName|managerPass|level
*/
void ReadManagerFile()
{
	FILE* fptr;
	char fileName[150];
	char str[100],*startField,result[30];
	ManagerAccountType* manager;

	sprintf(fileName,"%s%s",PATH,ManagerAccountFile);
	if ((fptr = fopen(fileName,"r")) == NULL)
	{
		ManagerListHead = (ManagerAccountType*)malloc(sizeof(ManagerAccountType));
		TangStrncpy(ManagerListHead->managerName,"manager",USER_NAME_LEN);
		TangStrncpy(ManagerListHead->managerPass,"123",USER_PASS_LEN);
		ManagerListHead->level = 1;
		ManagerListHead->next = NULL;
		PrintError("don't open manager file %s",ManagerAccountFile);
		return;
	}
	while (!feof(fptr))
	{
		fgets(str,100,fptr);
		if (feof(fptr))
			break;
		manager = (ManagerAccountType*)malloc(sizeof(ManagerAccountType));
		startField = GetOneField(str,result);
		TangStrncpy(manager->managerName,result,USER_NAME_LEN);
		startField = GetOneField(startField,result);
		TangStrncpy(manager->managerPass,result,USER_PASS_LEN);
		startField = GetOneField(startField,result);
		manager->level = atoi(result);
		manager->next = NULL;
		if (!ManagerListHead)
		{
			ManagerListHead = manager;
		}
		else
		{
			manager->next = ManagerListHead;
			ManagerListHead = manager;
		}
	}
	fclose(fptr);
}
/*
通过密码得到管理员记录
找不到,返回NULL
*/
ManagerAccountType* FindManagerByPass(char* password)
{
	ManagerAccountType* manager;

	manager = ManagerListHead;
	while (manager)
	{
		if (strcmp(manager->managerPass,password) == 0)
			return manager;
		manager = manager->next;
	}
	return NULL;
}
/*
通过名字得到管理员记录
找不到,返回NULL
*/
ManagerAccountType* FindManagerByName(char* managerName)
{
	ManagerAccountType* manager;

	manager = ManagerListHead;
	while (manager)
	{
		if (strcmp(manager->managerName,managerName) == 0)
			return manager;
		manager = manager->next;
	}
	return NULL;
}
/********************************************
以下函数用于组操作
********************************************/
/*
根据字符串生成一个组记录
文件格式:groupID|groupName|memberNum
*/
GroupType* GrowOneGroupByStr(char* str)
{
	static GroupType tmpGroup,*tmpGroupPtr = &tmpGroup;
	char *startField,result[50];

	startField = GetOneField(str,result);
	tmpGroup.groupID = atoi(result);
	if (tmpGroup.groupID  <= 0)
	{
		return NULL;
	}
	startField = GetOneField(startField,result);
	TangStrncpy(tmpGroup.groupName,result,GROUP_NAME_LEN);
	startField = GetOneField(startField,result);
	tmpGroup.memberNum = atoi(result);
	return tmpGroupPtr;
}
/*
增加一个组
*/
int AddOneGroup(GroupType* group)
{
	GroupType *group1;

	if (group == NULL)
		return -1;

	group1 = malloc(sizeof(GroupType));
	if (group1 == NULL)
	{
		PrintError("memory not enough!in AddOneGroup()");
		return -2;
	}
	memcpy(group1,group,sizeof(GroupType));
	if (!GroupListHead)
	{
		GroupListHead = GroupListTail = group1;
	}
	else
	{
		GroupListTail->next = group1;
		group1->prev = GroupListTail;
		GroupListTail = group1;
	}
	return 1;

}
/*
通过组名得到组的ID
若未找到,则返回0
*/
int GetGroupIDByName(char* groupName)
{
	GroupType* group;

	if (groupName == NULL)
		return 0;
	group = GroupListHead;
	while (group)
	{
		if (strcmp(groupName,group->groupName) == 0)
			return group->groupID;
		group = group->next;
	}
	return 0;
}
/*
通过组ID得到组名
若未找到,则返回NULL
*/
char* GetGroupNameByID(int groupID)
{
	GroupType* group;

	group = GroupListHead;
	while (group)
	{
		if (groupID == group->groupID)
			return group->groupName;
		group = group->next;
	}
	return NULL;
}
/*
读取组文件
文件格式:groupID|groupName|memberNum
*/
void ReadGroupListFromFile(char* path)
{
	FILE* fptr;
	char fileName[150];
	char str[150];
	GroupType* group;
	int groupID;
	char* groupName;

	sprintf(fileName,"%s%s",path,GroupFile);
	if ((fptr = fopen(fileName,"r")) == NULL)
	{
		PrintError("don't open group file %s.",fileName);
		return;
	}
	while (!feof(fptr))
	{
		fgets(str,150,fptr);
		if (feof(fptr))
			break;
		group = GrowOneGroupByStr(str);
		if (group == NULL)
		{
			PrintError("grow one goup error!In ReadGroupFile()\n");
			continue;
		}
		if (GetGroupIDByName(group->groupName) != 0)
		{
			PrintError("group name has exist!\n");
			continue;
		}
		if (GetGroupNameByID(group->groupID) != NULL)
		{
			PrintError("group ID has exist!\n");
			continue;
		}
		AddOneGroup(group);/*在组链表中增加一项*/
	}
	fclose(fptr);
}
#ifdef ZOOM-OP
/*
读取缩放用户数据的比例文件
*/
void ReadZoomRatioFromFile()
{
	FILE* fptr;
	char str[100];
	float ratio;
	char fileName[200];

	sprintf(fileName,"%s%s",PATH,ZoomRatioFile);

	if ((fptr = fopen(fileName,"r")) == NULL)
	{
		PrintError("Don't open zoom ratio file:%s\n",ZoomRatioFile);
		return;
	}
	fgets(str,100,fptr);
	sscanf(str,"%f",&ratio);
	if ((ratio > 0.01) && (ratio < 10.0))
	{
		ZoomRatio[0] = ratio;
	}
	fgets(str,100,fptr);
	sscanf(str,"%f",&ratio);
	if ((ratio > 0.01) && (ratio < 10.0))
	{
		ZoomRatio[1] = ratio;
	}
/*
printf("zoom=%f,%f\n",ZoomRatio[0],ZoomRatio[1]);
*/
}
#endif

#ifdef SET_WAIT_TIMEOUT
void WaitTimeOut(int signo)
{
	msgrcv(CGIOutMessageID, &CGIOutMessage, sizeof(struct msg_scs), pid,IPC_NOWAIT);
	if (language == 0)
	{
		cgiPrintf("<BR>现在服务器太忙,请稍后再试或与系统管理员联系!</BR>");
		cgiPrintf("<BR>谢谢!</BR>");
	}
	else
	{
		cgiPrintf("<BR>Now the server is busy,Plaese try after minutes or contact with manager!</BR>");
		cgiPrintf("<BR>Thanck you very much!</BR>");
	}
        cgiPrintf("</center></BODY>");
        cgiHtmlTail();
	exit(1);
}
#endif
/*
得到应用程序所在的路径和本机的IP地址
*/
void GetPATHAndHOSTIPFromFile()
{
	FILE* userPtr;
	char str[100];

	#ifdef SET_WAIT_TIMEOUT
	signal(SIGALRM,WaitTimeOut);
	alarm(WAIT_TIMEOUT);
	#endif
	/*读取路径文件*/
	if ((userPtr = fopen(LOGIN_INIT_FILE,"r")) != NULL)
	{
		fgets(str,100,userPtr);
		GetOneField(str,PATH);
		fgets(str,20,userPtr);
		GetOneField(str,HOSTIP);
		fclose(userPtr);
	}   
	else cgiPrintf("don't open config file:%s.",LOGIN_INIT_FILE);
	/*读取时间段的名字*/
	ReadTimeStageNameFile();
	/*读取费率文件*/
	ReadConstRatioFile();
	/*读取管理员文件*/
	ReadManagerFile();
	/*读取组文件*/
	ReadGroupListFromFile(PATH);
	#ifdef ZOOM-OP
	ReadZoomRatioFromFile();
	#endif
}
/*
检查组ID是否合法
*/
int CheckGroupID(int groupID)
{
	if ((groupID>0) && (groupID<MAX_GROUPID))
		return 1;
	return 0;
}
/*
在HTML页面中显示组信息
*/
void ShowGroupName()
{
	GroupType* group;

	cgiPrintf("组列表<SELECT NAME=groupID VALUE=>");
	group = GroupListHead;
	if (group == NULL)
	{
		cgiPrintf("<option></option>");
	}
	while (group)
	{
		cgiPrintf("        <option> %s </option>",group->groupName);
		group = group->next;
	}
	cgiPrintf("</SELECT>");
}

⌨️ 快捷键说明

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