📄 lan_ip_jf-cgi.h
字号:
读取时间段名字
文件格式: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 + -