www.pudn.com > cgi-web.rar > networking.c, change:2007-08-31,size:15694b
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h>
#include <getopt.h>
#include <errno.h>
#include <sys/ioctl.h>
#include <linux/config.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include "cgivars.h"
#include "htmllib.h"
#include "config_phase.h"
#include "sysconf.h"
#define DEBUG 0
#define ID_GAPFALG 26
#define ID_IP 27
#define ID_SUBMASK 28
#define ID_GAWADD 29
#define ID_GADNSFALG 30
#define ID_DNSADD1 31
#define ID_DNSADD2 32
#define ID_WANMD 33
#define ID_PPOEFLAG 34
#define ID_PPOEUSR 35
#define ID_PPOEUPW 36
#define ID_PPOESER 37
#define ID_UPNPFLAG 38
static config_item ** items;
static int config_list[] = {26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38};
static char *config_name[] = {"GAPFALG", "IP", "SUBMASK", "GAWADD", "GADNSFALG", "DNSADD1", "DNSADD2", "WANMD", "PPOEFLAG",
"PPOEUSR","PPOEUPW","PPOESER","UPNPFLAG"};
#define IP_LEN 16
void netset(char **postvars, int form_method)
{
int config_num = sizeof(config_list)/sizeof(int);
int i;
//int r_fd, w_fd;
int ObtainIP_method, temp_int;
char *GAPFALG;
char *IP;
char *SUBMASK;
char *GAWADD;
char *GADNSFALG;
char *DNSADD1;
char *DNSADD2;
char *WANMD;
char *PPOEFLAG;
char *PPOEUSR;
char *PPOEUPW;
char *PPOESER;
char *UPNPFLAG;
char java[] ="
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\r\n
<HTML><HEAD>
<META http-equiv=Pragma content=no-cache>
<META http-equiv=Cache-Control content=\"No-cache,must revalidate\">
<META http-equiv=Content-Type content=\"text/html; charset=gb2312\">
<SCRIPT language=JavaScript src=\"js/javascript.js\"></SCRIPT>
<STYLE type=text/css>BODY {
FONT-SIZE: 10pt; FONT-FAMILY: Arial
}
TD {
FONT-SIZE: 10pt; FONT-FAMILY: Arial
}
FORM {
FONT-SIZE: 10pt; FONT-FAMILY: Arial
}
OPTION {
FONT-SIZE: 10pt; FONT-FAMILY: Arial
}
TEXTAREA {
FONT-SIZE: 10pt; FONT-FAMILY: Arial
}
P {
FONT-SIZE: 10pt; FONT-FAMILY: Arial
}
OL {
FONT-SIZE: 10pt; FONT-FAMILY: Arial
}
INPUT {
FONT-SIZE: 10pt; FONT-FAMILY: Arial
}
SELECT {
FONT-SIZE: 10pt; FONT-FAMILY: Arial
}
.style1 {
FONT-WEIGHT: bold; FONT-SIZE: 14pt
}
</STYLE>
<META content=\"MSHTML 6.00.6000.16414\" name=GENERATOR></HEAD>";
//r_fd = open_read_fifo();
items = init_config_item(items, config_num, config_list);
printf("%s\n", java);
// If we got post, write it into flash
if(form_method == POST)
{
GetConfValues(config_list, items, config_num);
if(SaveConfig(postvars, items, config_list, config_name, config_num))
{/*
w_fd = open_write_fifo();
notify_config(w_fd);
close_write_fifo(w_fd);
read_fifo(r_fd);
*/
}
}
GetConfValues(config_list, items, config_num);
printf("<BODY onload=\"dhcp_enable(document.networking.GAPFALG.value);dns_auto(document.networking.GADNSFALG.value);\" leftMargin=30 topMargin=24 rightMargin=30>\n");
//printf("<BODY leftMargin=30 topMargin=24 rightMargin=30>\n");
printf("<P class=style1>网络设置</P>\n");
printf("<FORM name=networking action=/networking.cgi method=post target=msgFrame>\n"); //
printf("<INPUT type=hidden value=write name=action> <INPUT type=hidden value=tcpip name=cfg_content>\n");
printf("<INPUT type=hidden value=chs name=lang>\n"); //
printf("<TABLE width=\"100%\"><TBODY><TR><TD>\n"); //
printf("<TABLE style=\"BORDER-COLLAPSE: collapse\" borderColor=#dae3eb cellSpacing=0 cellPadding=0 width=\"100%\" border=1>\n"); //
printf("<TBODY><TR bgColor=#cccccc><TD colSpan=2><B>局域网IP地址</B></TD></TR>\n"); //
printf("<TR><TD noWrap width=\"29%\">获取IP方式</TD><TD align=middle>\n");
printf("<DIV align=left><SELECT onchange=dhcp_enable(this.value) name=GAPFALG> \n");
//ID_GAPFALG
if(GAPFALG = getdata(ID_GAPFALG, items, config_num))
{
ObtainIP_method = atoi(GAPFALG);
if(ObtainIP_method == 2)
{
printf("<option value=\"1\">手动</OPTION> \n");
printf("<option value=\"2\" selected>DHCP自动设置</OPTION> \n");
}
else
{
printf("<option value=\"1\" selected>手动</OPTION> \n");
printf("<option value=\"2\">DHCP自动设置</OPTION> \n");
}
}
printf("</SELECT></TD></TR>\n");
//ID_IP
if(IP = getdata(ID_IP, items, config_num))
{
printf("<TR><TD width=\"29%\">IP地址</TD><TD align=middle width=\"71%\">\n");
printf("<DIV align=left><INPUT size=15 maxlength=15 value=%s name=IP></DIV></TD></TR>\n", IP);
}
else
{
printf("<TR><TD width=\"29%\">IP地址</TD><TD align=middle width=\"71%\">\n");
printf("<DIV align=left><INPUT size=15 maxlength=15 name=IP></DIV></TD></TR>\n");
}
//ID_SUBMASK
if(SUBMASK = getdata(ID_SUBMASK, items, config_num))
{
printf("<TR><TD width=\"29%\">子网掩码</TD><TD align=middle>\n");
printf("<DIV align=left><INPUT size=15 maxlength=15 value=%s name=SUBMASK></DIV></TD></TR>\n", SUBMASK);
}
else
{
printf("<TR><TD width=\"29%\">子网掩码</TD><TD align=middle>\n");
printf("<DIV align=left><INPUT size=15 maxlength=15 name=SUBMASK></DIV></TD></TR>\n");
}
//ID_GAWADD
if(GAWADD = getdata(ID_GAWADD, items, config_num))
{
printf("<TR><TD width=\"29%\">网关地址</TD><TD align=middle>\n");
printf("<DIV align=left><INPUT size=15 maxlength=15 value=%s name=GAWADD></DIV></TD></TR>\n", GAWADD);
}
else
{
printf("<TR><TD width=\"29%\">网关地址</TD><TD align=middle>\n");
printf("<DIV align=left><INPUT size=15 maxlength=15 name=GAWADD></DIV></TD></TR>\n");
}
printf("</TBODY></TABLE>\n");
//ID_WANMD
printf("<TABLE style=\"BORDER-COLLAPSE: collapse\" borderColor=#dae3eb cellSpacing=0 cellPadding=0 width=\"100%\" border=1>\n");
printf("<TBODY><TR bgColor=#cccccc><TD colSpan=2><B>WAN口设置</B></TD></TR>\n");
printf("<tr><TD noWrap width=\"29%\">WAN口连接方式</TD>\n");
printf("<TD align=middle><DIV align=left><SELECT name=WANMD>\n");
if(WANMD = getdata(ID_WANMD, items, config_num))
{
temp_int = atoi(WANMD);
if(1 == temp_int)
{
printf("<OPTION value=\"1\" selected>PPPoE</OPTION>\n");
printf("<OPTION value=\"2\">Gateway</OPTION>\n");
}
else
{
printf("<OPTION value=\"1\">PPPoE</OPTION>\n");
printf("<OPTION value=\"2\" selected>Gateway</OPTION>\n");
}
}
printf("</SELECT> </DIV></TD></tr></TBODY></TABLE>\n");
//GADNSFALG
printf("<TABLE style=\"BORDER-COLLAPSE: collapse\" borderColor=#dae3eb cellSpacing=0 cellPadding=0 width=\"100%\" border=1>\n");
printf("<TBODY><TR bgColor=#cccccc><TD colSpan=2><B>DNS服务器IP地址</B></TD></TR>\n");
printf("<tr><TD noWrap width=\"29%\">DNS获取方式</TD>\n");
printf("<TD align=middle width=\"71%\"><DIV align=left><SELECT name=GADNSFALG onchange=dns_auto(this.value)>\n");
if(GADNSFALG = getdata(ID_GADNSFALG, items, config_num))
{
temp_int = atoi(GADNSFALG);
if(1 == temp_int)
{
printf("<OPTION value=\"1\" selected>手动设置</OPTION>\n");
printf("<OPTION value=\"3\">PPPoE</OPTION>\n");
}
/*
else if(2 == temp_int)
{
printf("<OPTION value=\"1\">手动设置</OPTION>\n");
printf("<OPTION value=\"2\" selected>DHCP</OPTION>\n");
printf("<OPTION value=\"3\">PPPoE</OPTION>\n");
}*/
else
{
printf("<OPTION value=\"1\">手动设置</OPTION>\n");
printf("<OPTION value=\"3\" selected>PPPoE</OPTION>\n");
}
}
printf("</SELECT> </DIV></TD></tr>\n");
//DNSADD1
printf("<tr><TD noWrap width=\"29%\">主要DNS服务器IP地址</TD><TD align=middle width=\"71%\">\n");
if(DNSADD1 = getdata(ID_DNSADD1, items, config_num))
printf("<DIV align=left><INPUT size=15 maxlength=15 value=%s name=DNSADD1></DIV></TD></TR>\n", DNSADD1);
else
printf("<DIV align=left><INPUT size=15 maxlength=15 name=DNSADD1></DIV></TD></TR>\n");
//DNSADD2
printf("<TR><TD noWrap>次要DNS服务器IP地址</TD><TD align=middle>\n");
if(DNSADD2 = getdata(ID_DNSADD2, items, config_num))
printf("<DIV align=left><INPUT size=15 maxlength=15 name=DNSADD2 value=%s></DIV></TD></TR>\n", DNSADD2);
else
printf("<DIV align=left><INPUT size=15 maxlength=15 name=DNSADD2></DIV></TD></TR>\n");
printf("</TBODY></TABLE>\n");
//PPOEFLAG
printf("<TABLE style=\"BORDER-COLLAPSE: collapse\" borderColor=#dae3eb cellSpacing=0 cellPadding=0 width=\"100%\" border=1>\n");
printf("<TBODY><TR bgColor=#cccccc><TD colSpan=2 height=16><B>PPPoE</B></TD></TR>\n");
printf("<tr><TD noWrap width=\"29%\">网络连线模式</TD>\n");
printf("<TD align=middle width=\"71%\"><DIV align=left><SELECT name=PPOEFLAG>\n");
if(PPOEFLAG = getdata(ID_PPOEFLAG, items, config_num))
{
temp_int = atoi(PPOEFLAG);
if(1 == temp_int)
{
printf("<OPTION value=\"1\" selected>启用PPPoE</OPTION>\n");
printf("<OPTION value=\"0\">停用PPPoE</OPTION>\n");
}
else
{
printf("<OPTION value=\"1\">启用PPPoE</OPTION>\n");
printf("<OPTION value=\"0\" selected>停用PPPoE</OPTION>\n");
}
}
printf("</SELECT> </DIV></TD></tr>\n");
//PPOEUSR
printf("<tr><TD noWrap width=\"29%\">登录名称</TD><TD align=middle>\n");
if(PPOEUSR = getdata(ID_PPOEUSR, items, config_num))
printf("<DIV align=left><INPUT size=32 maxlength=32 name=PPOEUSR value=%s ></DIV></TD></TR>\n", PPOEUSR);
else
printf("<DIV align=left><INPUT size=32 maxlength=32 name=PPOEUSR></DIV></TD></TR>\n");
//PPOEUPW
printf("<tr><TD noWrap width=\"29%\">登录口令</TD><TD align=middle>\n");
if(PPOEUPW = getdata(ID_PPOEUPW, items, config_num))
printf("<DIV align=left><INPUT type=password size=32 maxlength=32 name=PPOEUPW value=%s ></DIV></TD></TR>\n", PPOEUPW);
else
printf("<DIV align=left><INPUT type=password size=32 maxlength=32 name=PPOEUPW></DIV></TD></TR>\n");
//PPOESER
printf("<tr><TD noWrap width=\"29%\">服务名称</TD><TD align=middle>\n");
if(PPOESER = getdata(ID_PPOESER, items, config_num))
printf("<DIV align=left><INPUT size=32 maxlength=32 value=%s name=PPOESER></DIV></TD></TR>\n", PPOESER);
else
printf("<DIV align=left><INPUT size=32 maxlength=32 name=PPOESER></DIV></TD></TR>\n");
printf("</TBODY></TABLE>\n");
//UPNPFLAG
printf("<TABLE style=\"BORDER-COLLAPSE: collapse\" borderColor=#dae3eb cellSpacing=0 cellPadding=0 width=\"100%\" border=1>\n");
printf("<TBODY><TR bgColor=#cccccc><TD colSpan=2><B>UPNP</B></TD></TR>\n");
printf("<tr><TD noWrap width=\"29%\">UPNP启用</FONT></TD><TD align=middle width=\"71%\">\n");
printf("<DIV align=left><SELECT size=1 name=UPNPFLAG>\n");
if(UPNPFLAG = getdata(ID_UPNPFLAG, items, config_num))
{
temp_int = atoi(UPNPFLAG);
if(1 == temp_int)
{
printf("<OPTION value=\"1\" selected>是</OPTION>\n");
printf("<OPTION value=\"0\">否</OPTION>\n");
}
else
{
printf("<OPTION value=\"1\">是</OPTION>\n");
printf("<OPTION value=\"0\" selected>否</OPTION>\n");
}
}
printf("</SELECT> </DIV></TD></tr>\n");
printf("</TBODY></TABLE>\n");
printf("<BR><FONT color=#ff0000>应用更改后,系统将自动重启。</FONT> \n");
printf("<P align=left><INPUT type=submit onclick=\"return tsettcpip();\" value=应用>\n");
printf("<INPUT type=reset value=重置>\n");
printf("<INPUT type=hidden value=chs name=lang> </P></TD></TR></TBODY></TABLE></FORM></BODY></HTML>\n");
// javascript layout
{
char jsp[]="
<script language=JavaScript>
<!--
function dhcp_enable(dhcp)
{
if (dhcp==\"1\") {
document.networking.IP.disabled = 0;
document.networking.SUBMASK.disabled = 0;
document.networking.GAWADD.disabled = 0;
}
else {
document.networking.IP.disabled = 1;
document.networking.SUBMASK.disabled = 1;
document.networking.GAWADD.disabled = 1;
}
}
function dns_auto(auto)
{
if(auto == \"1\")
{
document.networking.DNSADD1.disabled = 0;
document.networking.DNSADD2.disabled = 0;
}
else
{
document.networking.DNSADD1.disabled = 1;
document.networking.DNSADD2.disabled = 1;
}
}
function checinetaddrvalid(inetaddr)
{
var reg=/^(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$/
if(arr=inetaddr.match(reg)){
for(i=1;i<arr.length;i++)if(parseInt(arr[i])>255){return false;}
}
else {
return false;
}
return true;
}
function settcpip()
{
var element ;
element = document.getElementById('IP');
if(element.value == \"\" && document.networking.IP.disabled == 0)
{
alert(\"IP地址不能为空!\");
element.focus();
return false;
}
if(checinetaddrvalid(element.value) == false && document.networking.IP.disabled == 0)
{
alert(\"IP地址格式错误!\");
element.focus();
return false;
}
element = document.getElementById('SUBMASK');
if(element.value == \"\" && document.networking.SUBMASK.disabled == 0)
{
alert(\"子网掩码不能为空!\");
element.focus();
return false;
}
if(checinetaddrvalid(element.value) == false && document.networking.SUBMASK.disabled == 0)
{
alert(\"子网掩码地址格式错误!\");
element.focus();
return false;
}
element = document.getElementById('GAWADD');
if(element.value == \"\" && document.networking.GAWADD.disabled == 0)
{
alert(\"网关地址不能为空!\");
element.focus();
return false;
}
if(checinetaddrvalid(element.value) == false && document.networking.GAWADD.disabled == 0)
{
alert(\"网关地址格式错误!\");
element.focus();
return false;
}
element = document.getElementById('DNSADD1');
if(element.value == \"\" && document.networking.DNSADD1.disabled == 0)
{
alert(\"主DNS服务器IP地址不能为空!\");
element.focus();
return false;
}
if(checinetaddrvalid(element.value) == false && document.networking.DNSADD1.disabled == 0)
{
alert(\"主DNS服务器IP地址格式错误!\");
element.focus();
return false;
}
element = document.getElementById('DNSADD2');
if(element.value == \"\" && document.networking.DNSADD2.disabled == 0)
{
alert(\"次要DNS服务器IP地址不能为空!\");
element.focus();
return false;
}
if(checinetaddrvalid(element.value) == false && document.networking.DNSADD2.disabled == 0)
{
alert(\"次要DNS服务器IP地址格式错误!\");
element.focus();
return false;
}
return true;
}
function tsettcpip()
{
return settcpip();
}
//-->
</script>";
printf("%s\n", jsp);
}
free_config_item(items, config_num);
//close_read_fifo();
}
////////////////////////////////////////////////////////////////////////////
// Function: main
////////////////////////////////////////////////////////////////////////////
int main(void)
{
char **postvars = NULL; // POST request data repository
char **getvars = NULL; // GET request data repository
int form_method; // POST = 1, GET = 0
// CGI part start here
adminCheck();
form_method = getRequestMethod();
if(form_method == POST)
{
getvars = getGETvars();
postvars = getPOSTvars();
}
else if(form_method == GET)
{
getvars = getGETvars();
}
// CGI start here, set COM port
netset(postvars, form_method);
//htmlFooter();
cleanUp(form_method, getvars, postvars);
fflush(stdout);
exit(0);
} // end of main