📄 ipa_ctl.c
字号:
pos = sizeof(Header_t);
buf = resp + pos;
sprintf(buf, "The white list is empty!\n");
pos += strlen(buf);
pos ++;
pheader->buflen = htonl(pos);
*resplen = pos;
return 1;
}
plist = (IP_MAC_NAME_t *)calloc(sizeof(IP_MAC_NAME_t), whileListLen);
if (plist == NULL)
{
pheader->code = htonl(1);
pos = sizeof(Header_t);
buf = resp + pos;
sprintf(buf, "calloc() fail [%s]!\n", strerror(errno));
pos += strlen(buf);
pos ++;
pheader->buflen = htonl(pos);
*resplen = pos;
return -1;
}
ret = comReadShfn(gd_WHITE_LIST_file, 4, whileListLen*sizeof(IP_MAC_NAME_t), (char *)plist);
if (ret < 0)
{
free(plist);
pheader->code = htonl(1);
pos = sizeof(Header_t);
buf = resp + pos;
sprintf(buf, "comReadShfn() fail [%s]!\n", strerror(errno));
pos += strlen(buf);
pos ++;
pheader->buflen = htonl(pos);
*resplen = pos;
return -1;
}
for (i=0; i<whileListLen; i++)
{
if ( (strcmp(plist[i].ip, pnode->ip) == 0) &&
(strcmp(plist[i].mac, pnode->mac) == 0) &&
(strcmp(plist[i].name, pnode->name) == 0) )
{
free(plist);
pheader->code = htonl(0);
return 0;
}
}
free(plist);
pheader->code = htonl(4);
pos = sizeof(Header_t);
buf = resp + pos;
sprintf(buf, "What you input is not in the white list!\n", strerror(errno));
pos += strlen(buf);
pos ++;
pheader->buflen = htonl(pos);
*resplen = pos;
return 0;
}
int deal_reset_white_list(char *reqBuf, int requestlen, char *resp, int *resplen)
{
Header_t *pheader;
int pos;
char *buf;
int i;
pheader = (Header_t *)resp;
pheader->buflen = htonl(sizeof(Header_t));
*resplen = sizeof(Header_t);
fSemSetPlus(gd_semfd, 0);
comMkShfn(gd_WHITE_LIST_file, 4, 1);
i = 0;
comWriteShfn(gd_WHITE_LIST_file, 0, (char *)&i, 4) ;
fSemSetSub(gd_semfd, 0);
pheader->code = htonl(0);
return 0;
}
int deal_reset_ip_list(char *reqBuf, int requestlen, char *resp, int *resplen)
{
Header_t *pheader;
int pos;
char *buf;
int i;
pheader = (Header_t *)resp;
pheader->buflen = htonl(sizeof(Header_t));
*resplen = sizeof(Header_t);
fSemSetPlus(gd_semfd, 0);
comMkShfn(gd_IP_LIST_file, 4, 1);
i = 0;
comWriteShfn(gd_IP_LIST_file, 0, (char *)&i, 4) ;
fSemSetSub(gd_semfd, 0);
pheader->code = htonl(0);
return 0;
}
int deal_print_white_list(char *reqBuf, int requestlen, char *resp, int *resplen)
{
Header_t *pheader;
FILE *fp;
int pos;
char *buf;
IP_MAC_NAME_t *plist, *pnode;
struct stat fbuf;
char cmd[256];
int i, ret;
int whileListLen;
pheader = (Header_t *)resp;
pheader->buflen = htonl(sizeof(Header_t));
*resplen = sizeof(Header_t);
ret = comReadShfn(gd_WHITE_LIST_file, 0, 4, (char *)&whileListLen) ;
if (ret < 0)
{
pheader->code = htonl(1);
pos = sizeof(Header_t);
buf = resp + pos;
sprintf(buf, "comReadShfn() fail [%s]!\n", strerror(errno));
pos += strlen(buf);
pos ++;
pheader->buflen = htonl(pos);
*resplen = pos;
return 1;
}
if (whileListLen < 1)
{
pos = sizeof(Header_t);
buf = resp + pos;
sprintf(buf, "The white list is empty!\n");
pos += strlen(buf);
pos ++;
pheader->buflen = htonl(pos);
pheader->code = htonl(4);
*resplen = pos;
return 1;
}
plist = (IP_MAC_NAME_t *)calloc(sizeof(IP_MAC_NAME_t), whileListLen);
if (plist == NULL)
{
pos = sizeof(Header_t);
buf = resp + pos;
sprintf(buf, "calloc() fail[%s]!\n", strerror(errno));
pos += strlen(buf);
pos ++;
pheader->buflen = htonl(pos);
pheader->code = htonl(4);
*resplen = pos;
return 1;
}
ret = comReadShfn(gd_WHITE_LIST_file, 4, whileListLen*sizeof(IP_MAC_NAME_t), (char *)plist) ;
if (ret < 0)
{
free(plist);
pos = sizeof(Header_t);
buf = resp + pos;
sprintf(buf, "comReadShfn() fail[%s]!\n", strerror(errno));
pos += strlen(buf);
pos ++;
pheader->buflen = htonl(pos);
pheader->code = htonl(4);
*resplen = pos;
return 1;
}
fp = fopen("/tmp/wl.txt", "w");
if (fp == NULL)
{
pos = sizeof(Header_t);
buf = resp + pos;
sprintf(buf, "fopen(\"/tmp/wl.txt\", \"w\") error[%s]!\n", strerror(errno));
pos += strlen(buf);
pos ++;
pheader->buflen = htonl(pos);
pheader->code = htonl(3);
*resplen = pos;
return 1;
}
for (i=0; i<whileListLen; i++)
{
fprintf(fp, "%s\t%s\t%s\n", plist[i].ip, plist[i].mac, plist[i].name);
}
fclose(fp);
free(plist);
pheader->code = htonl(0);
return 0;
}
int deal_print_ip_list(char *reqBuf, int requestlen, char *resp, int *resplen)
{
Header_t *pheader;
FILE *fp;
int pos;
char *buf;
IP_MAC_NAME_t *plist, *pnode;
struct stat fbuf;
char cmd[256];
int i, ret;
int ipListLen;
pheader = (Header_t *)resp;
pheader->buflen = htonl(sizeof(Header_t));
*resplen = sizeof(Header_t);
ret = comReadShfn(gd_IP_LIST_file, 0, 4, (char *)&ipListLen) ;
if (ret < 0)
{
pheader->code = htonl(1);
pos = sizeof(Header_t);
buf = resp + pos;
sprintf(buf, "comReadShfn() fail [%s]!\n", strerror(errno));
pos += strlen(buf);
pos ++;
pheader->buflen = htonl(pos);
*resplen = pos;
return 1;
}
if (ipListLen < 1)
{
pos = sizeof(Header_t);
buf = resp + pos;
sprintf(buf, "The ip list is empty!\n");
pos += strlen(buf);
pos ++;
pheader->buflen = htonl(pos);
pheader->code = htonl(4);
*resplen = pos;
return 1;
}
plist = (IP_MAC_NAME_t *)calloc(sizeof(IP_MAC_NAME_t), ipListLen);
if (plist == NULL)
{
pos = sizeof(Header_t);
buf = resp + pos;
sprintf(buf, "calloc() fail[%s]!\n", strerror(errno));
pos += strlen(buf);
pos ++;
pheader->buflen = htonl(pos);
pheader->code = htonl(4);
*resplen = pos;
return 1;
}
ret = comReadShfn(gd_IP_LIST_file, 4, ipListLen*sizeof(IP_MAC_NAME_t), (char *)plist) ;
if (ret < 0)
{
free(plist);
pos = sizeof(Header_t);
buf = resp + pos;
sprintf(buf, "comReadShfn() fail[%s]!\n", strerror(errno));
pos += strlen(buf);
pos ++;
pheader->buflen = htonl(pos);
pheader->code = htonl(4);
*resplen = pos;
return 1;
}
fp = fopen("/tmp/ipl.txt", "w");
if (fp == NULL)
{
pos = sizeof(Header_t);
buf = resp + pos;
sprintf(buf, "fopen(\"/tmp/ipl.txt\", \"w\") error[%s]!\n", strerror(errno));
pos += strlen(buf);
pos ++;
pheader->buflen = htonl(pos);
pheader->code = htonl(3);
*resplen = pos;
return 1;
}
for (i=0; i<ipListLen; i++)
{
fprintf(fp, "%s\t%s\t%s\n", plist[i].ip, plist[i].mac, plist[i].name);
}
fclose(fp);
free(plist);
pheader->code = htonl(0);
return 0;
}
int deal_delete_white_list(char *reqBuf, int requestlen, char *resp, int *resplen)
{
Header_t *pheader;
IP_MAC_NAME_t *plist, *pnode;
int i, ret;
int pos;
char *buf;
int whileListLen;
pheader = (Header_t *)resp;
pheader->buflen = htonl(sizeof(Header_t));
*resplen = sizeof(Header_t);
pnode = (IP_MAC_NAME_t *)(reqBuf+sizeof(Header_t));
ret = comReadShfn(gd_WHITE_LIST_file, 0, 4, (char *)&whileListLen) ;
if (ret < 0)
{
pheader->code = htonl(1);
pos = sizeof(Header_t);
buf = resp + pos;
sprintf(buf, "comReadShfn() fail [%s]!\n", strerror(errno));
pos += strlen(buf);
pos ++;
pheader->buflen = htonl(pos);
*resplen = pos;
return 1;
}
//white list is empty
if (whileListLen < 1)
{
pos = sizeof(Header_t);
buf = resp + pos;
sprintf(buf, "The white list is empty, can not delete any <ip mac user>!\n");
pos += strlen(buf);
pos ++;
pheader->buflen = htonl(pos);
pheader->code = htonl(2);
*resplen = pos;
return 1;
}
plist = (IP_MAC_NAME_t *)calloc(sizeof(IP_MAC_NAME_t), whileListLen);
if (plist == NULL)
{
pheader->code = htonl(1);
pos = sizeof(Header_t);
buf = resp + pos;
sprintf(buf, "calloc() fail [%s]!\n", strerror(errno));
pos += strlen(buf);
pos ++;
pheader->buflen = htonl(pos);
*resplen = pos;
return -1;
}
ret = comReadShfn(gd_WHITE_LIST_file, 4, whileListLen*sizeof(IP_MAC_NAME_t), (char *)plist);
if (ret < 0)
{
free(plist);
pheader->code = htonl(1);
pos = sizeof(Header_t);
buf = resp + pos;
sprintf(buf, "comReadShfn() fail [%s]!\n", strerror(errno));
pos += strlen(buf);
pos ++;
pheader->buflen = htonl(pos);
*resplen = pos;
return -1;
}
for (i=0; i<whileListLen; i++)
{
//printf("strcmp(plist[%d].mac[%s] pnode->mac[%s]\n", i, plist[i].mac, pnode->mac);
if (strcmp(plist[i].ip, pnode->ip) == 0)
{
break;
}
}
if (i == whileListLen)
{
free(plist);
pos = sizeof(Header_t);
buf = resp + pos;
sprintf(buf, "Can not find MAC[%s] in the while list!\n", pnode->mac);
pos += strlen(buf);
pos ++;
pheader->buflen = htonl(pos);
pheader->code = htonl(2);
*resplen = pos;
return 1;
}
fSemSetPlus(gd_semfd, 0);
ret = comMkShfn(gd_WHITE_LIST_file, 4, 1);
if (ret < 0)
{
fSemSetSub(gd_semfd, 0);
free(plist);
pheader->code = htonl(1);
pos = sizeof(Header_t);
buf = resp + pos;
sprintf(buf, "comMkShfn() fail [%s]!\n", strerror(errno));
pos += strlen(buf);
pos ++;
pheader->buflen = htonl(pos);
*resplen = pos;
return 1;
}
i = whileListLen - 1;
ret = comWriteShfn(gd_WHITE_LIST_file, 0, (char *)&i, 4) ;
if (ret < 0)
{
fSemSetSub(gd_semfd, 0);
free(plist);
pheader->code = htonl(1);
pos = sizeof(Header_t);
buf = resp + pos;
sprintf(buf, "comWriteShfn() fail [%s]!\n", strerror(errno));
pos += strlen(buf);
pos ++;
pheader->buflen = htonl(pos);
*resplen = pos;
return 1;
}
for (i=0; i<whileListLen; i++)
{
if (strcmp(plist[i].ip, pnode->ip) == 0) continue;
ret = appendWriteShfn(gd_WHITE_LIST_file, (char *)(plist+i), sizeof(IP_MAC_NAME_t));
if (ret < 0)
{
fSemSetSub(gd_semfd, 0);
free(plist);
pheader->code = htonl(1);
pos = sizeof(Header_t);
buf = resp + pos;
sprintf(buf, "appendWriteShfn() fail [%s]!\n", strerror(errno));
pos += strlen(buf);
pos ++;
pheader->buflen = htonl(pos);
*resplen = pos;
return 1;
}
}
free(plist);
fSemSetSub(gd_semfd, 0);
pheader->code = htonl(0);
return 0;
}
int deal_add_white_list(char *reqBuf, int requestlen, char *resp, int *resplen)
{
Header_t *pheader;
IP_MAC_NAME_t *plist, *pnode;
int i;
int pos;
char *buf;
int ret;
int whileListLen;
pheader = (Header_t *)resp;
pheader->buflen = htonl(sizeof(Header_t));
*resplen = sizeof(Header_t);
pnode = (IP_MAC_NAME_t *)(reqBuf+sizeof(Header_t));
ret = comReadShfn(gd_WHITE_LIST_file, 0, 4, (char *)&whileListLen) ;
if (ret < 0)
{
pheader->code = htonl(1);
pos = sizeof(Header_t);
buf = resp + pos;
sprintf(buf, "comReadShfn() fail [%s]!\n", strerror(errno));
pos += strlen(buf);
pos ++;
pheader->buflen = htonl(pos);
*resplen = pos;
return 1;
}
if (whileListLen > 0)
{
plist = (IP_MAC_NAME_t *)calloc(sizeof(IP_MAC_NAME_t), whileListLen);
if (plist == NULL)
{
pheader->code = htonl(1);
pos = sizeof(Header_t);
buf = resp + pos;
sprintf(buf, "calloc() fail [%s]!\n", strerror(errno));
pos += strlen(buf);
pos ++;
pheader->buflen = htonl(pos);
*resplen = pos;
return -1;
}
ret = comReadShfn(gd_WHITE_LIST_file, 4, whileListLen*sizeof(IP_MAC_NAME_t), (char *)plist);
if (ret < 0)
{
free(plist);
pheader->code = htonl(1);
pos = sizeof(Header_t);
buf = resp + pos;
sprintf(buf, "comReadShfn() fail [%s]!\n", strerror(errno));
pos += strlen(buf);
pos ++;
pheader->buflen = htonl(pos);
*resplen = pos;
return -1;
}
for (i=0; i<whileListLen; i++)
{
//printf("plist[i].ip[%s] pnode->ip[%s]\n", plist[i].ip, pnode->ip);
if ( (strcmp(plist[i].mac, pnode->mac) == 0) ||
(strcmp(plist[i].ip, pnode->ip) == 0) )
{
free(plist);
pheader->code = htonl(1);
pos = sizeof(Header_t);
buf = resp + pos;
sprintf(buf, "The MAC or IP Had exist in while list, can not twice!\n");
pos += strlen(buf);
pos ++;
pheader->buflen = htonl(pos);
*resplen = pos;
return 0;
}
}
free(plist);
}
fSemSetPlus(gd_semfd, 0);
ret = comWriteShfn(gd_WHITE_LIST_file, 4+whileListLen*sizeof(IP_MAC_NAME_t), (char *)pnode, sizeof(IP_MAC_NAME_t)) ;
if (ret < 0)
{
fSemSetSub(gd_semfd, 0);
pheader->code = htonl(1);
pos = sizeof(Header_t);
buf = resp + pos;
sprintf(buf, "comWriteShfn() fail [%s]!\n", strerror(errno));
pos += strlen(buf);
pos ++;
pheader->buflen = htonl(pos);
*resplen = pos;
return 0;
}
whileListLen ++;
ret = comWriteShfn(gd_WHITE_LIST_file, 0, (char *)&whileListLen, 4);
if (ret < 0) return -1;
fSemSetSub(gd_semfd, 0);
pheader->code = htonl(0);
return 0;
}
int deal_add_ip_list(char *reqBuf, int requestlen, char *resp, int *resplen)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -