📄 cgi.c
字号:
/*** BeginHeader */
#ifndef _CGI_FUNC_
#define _CGI_FUNC_
/*** EndHeader */
/*** BeginHeader DefparaCgi */
nodebug xmem int DefparaCgi(HttpState* state);
/*** EndHeader */
nodebug xmem int DefparaCgi(HttpState* state)
{
if(state->length)
{
/* buffer to write out */
if(state->offset < state->length)
{
state->offset += sock_fastwrite(&state->s,
state->buffer + (int)state->offset,
(int)state->length - (int)state->offset);
}
else
{
state->offset = 0;
state->length = 0;
}
}
else
{
switch(state->substate)
{
case 0:
CgiStep0(state);
break;
case 1:
CgiStep1(state);
break;
case 2:
CgiReturn(state,9);
DefParaInit(UserIndx,1) ;
StoreData( );
//RestartSystem();
break;
default:
state->substate = 0;
return 1;
}
}
return 0;
}
/*** BeginHeader AdRetCgi */
nodebug xmem int AdRetCgi(HttpState* state);
/*** EndHeader */
nodebug xmem int AdRetCgi(HttpState* state)
{
int i;
unsigned char ucTmp;
unsigned int uiTmp1;
unsigned int uiTmp2;
if(state->length)
{
/* buffer to write out */
if(state->offset < state->length) {
state->offset += sock_fastwrite(&state->s,
state->buffer + (int)state->offset,
(int)state->length - (int)state->offset);
} else {
state->offset = 0;
state->length = 0;
}
}
else
{
switch(state->substate)
{
case 0:
CgiStep0(state);
break;
case 1:
CgiStep1(state);
break;
case 2:
/* init the data */
for(i=0;i<10;++i)
{
FormData[i].value[0] = '\0';
}
i=0;
FormData[i++].name="SelOem";//i=0
FormData[i++].name="MaAddr";
FormData[i++].name="FrmId";
FormData[i++].name="Flag";
FormData[i++].name="CfgTtl";
FormData[i++].name="IP_pro";
FormData[i++].name="SrcPort";
FormData[i++].name="DstPort";
FormData[i++].name="Filter";
FormData[i++].name="LogoS";
state->p = state->buffer;
state->substate++;
break;
case 3:
if(ParseForm(state,10))
{
//sprintf(state->buffer, "MAC:<p>%s\r\n",FormData[1].value);
//state->length = strlen(state->buffer);
if(!(strcmp(FormData[0].value,"web1")))
{
UserIndx=0;
}
else if(!(strcmp(FormData[0].value,"web2")))
{
UserIndx=1;
}
else if(!(strcmp(FormData[0].value,"web3")))
{
UserIndx=2;
}
else if(!(strcmp(FormData[0].value,"Others")))
{
UserIndx=3;
memcpy(LogoPic,FormData[9].value,100);
}
StrtoMac();
g_AddrInfo[UserIndx].uiFrmType = StrtoHex(2);
ucTmp=atoi(FormData[4].value);
for(i=0;i<MAX_CHANNEL;++i)
{
g_AddrInfo[UserIndx].SecdE1Para[i].Ttl=ucTmp;
}
g_AddrInfo[UserIndx].uiUDPPort = StrtoHex(6);
ucTmp=StrtoTos(5);
uiTmp1=StrtoHex(3);
uiTmp2=StrtoHex(7);
for(i=0;i<MAX_CHANNEL;++i)
{
g_AddrInfo[UserIndx].SecdE1Para[i].SegFlag=uiTmp1;
g_AddrInfo[UserIndx].FirE1Para[i].Proto=ucTmp;
}
g_AddrInfo[UserIndx].TirdE1Para.Filter = atoi(FormData[8].value);
//inet_ethtoa(g_DispAddrInfo.macaddress,g_AddrInfo[UserIndx].ucMacAddr);
//ConvertDisp();
//CfgFpga();
StoreData( );
//Restore( );
//ucTmp=StrtoTos(9);
//Status.Los=ucTmp&0x0F;
//Status.Ais=(ucTmp>>4);
//sprintf(state->buffer, "UserIndx:<p>%d\r\n",UserIndx);
//state->length = strlen(state->buffer);
}
else
{
//CgiErr(state);
CgiReturn(state,8);
}
state->substate++;
break;
case 4:
CgiReturn(state,7);
break;
/*case 5:
RestartSystem();
break;*/
default:
state->substate = 0;
return 1;
}
}
return 0;
}
/*** BeginHeader ParseForm */
nodebug xmem int ParseForm(HttpState* state,int Length);
/*** EndHeader */
nodebug xmem int ParseForm(HttpState* state,int Length)
{
int retval;
int i;
retval = sock_aread(&state->s, state->p,
(state->content_length < HTTP_MAXBUFFER-1)?
(int)state->content_length:HTTP_MAXBUFFER-1);
if (retval < 0) {
// Error--just bail out
return 1;
}
// Using the subsubstate to keep track of how much data we have received
state->subsubstate += retval;
if (state->subsubstate >= state->content_length) {
// NULL-terminate the content buffer
state->buffer[(int)state->content_length] = '\0';
// Scan the received POST information into the FORMSpec structure
for(i=0; i<Length; i++)
{
http_scanpost(FormData[i].name, state->buffer, FormData[i].value, MAX_FORMSIZE);
}
// Finished processing--returning 1 indicates that we are done
return 1;
}
// Processing not finished--return 0 so that we can be called again
return 0;
}
/*** BeginHeader CgiStep0 */
nodebug xmem void CgiStep0(HttpState* state);
/*** EndHeader */
nodebug xmem void CgiStep0(HttpState* state)
{
//strcpy(state->buffer, "HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n");
Getstring(CgiOfStr, 0, state->buffer, 100);
state->length = strlen(state->buffer);
state->offset = 0;
state->substate++;
}
/*** BeginHeader CgiStep1 */
nodebug xmem void CgiStep1(HttpState* state);
/*** EndHeader */
nodebug xmem void CgiStep1(HttpState* state)
{
//strcpy(state->buffer, "<html><head><title>Results</title></head><body>\r\n");
Getstring(CgiOfStr, 1, state->buffer, 100);
state->length = strlen(state->buffer);
state->substate++;
}
/*** BeginHeader CgiSuccess */
nodebug xmem void CgiSuccess(HttpState* state);
/*** EndHeader */
nodebug xmem void CgiSuccess(HttpState* state)
{
//sprintf(state->buffer, "<p>All settings will be applied after you reboot system!\r\n");
Getstring(CgiOfStr, 2, state->buffer, 100);
state->length += strlen(state->buffer);
state->substate++;
}
/*** BeginHeader CgiReturn */
nodebug xmem void CgiReturn(HttpState* state,unsigned char index);
/*** EndHeader */
nodebug xmem void CgiReturn(HttpState* state,unsigned char index)
{
if(index==0)
{
//strcpy(state->buffer, "<p><a href=""/SetE1Lb.htm"">Return</a></body></html>\r\n");
Getstring(CgiOfStr, 3, state->buffer, 100);
}
else if(index==1)
{
Getstring(CgiOfStr, 4, state->buffer, 100);
//strcpy(state->buffer, "<p><a href=""/SetEthinfo.htm"">Return</a></body></html>\r\n");
}
else if(index==2)
{
Getstring(CgiOfStr, 5, state->buffer, 100);
//strcpy(state->buffer, "<p><a href=""/SetE1info.htm"">Return</a></body></html>\r\n");
}
else if(index==3)
{
Getstring(CgiOfStr, 6, state->buffer, 100);
//strcpy(state->buffer, "<p><a href=""/EqInfo.shtml"">Return</a></body></html>\r\n");
}
else if(index==4)
{
Getstring(CgiOfStr, 7, state->buffer, 100);
//sprintf(state->buffer, "<p>Reboot success! \r\n");
}
else if(index==5)
{
Getstring(CgiOfStr, 8, state->buffer, 100);
//sprintf(state->buffer, "<p>Loopback set Success!\r\n");
}
else if(index==6)
{
sprintf(state->buffer, "<p>Please remember the network configuration!\r\n\
<p> All settings will be applied after you reboot system.\r\n\
<p>IP Address: %s<p>\r\n<p>Submask: %s<p>\r\n<p>Gateway IP Address: %s<p>\r\n",g_DispAddrInfo.ip,g_DispAddrInfo.netmask,g_DispAddrInfo.gateway);
}
else if(index==7)
{
//sprintf(state->buffer, "<p>Advance set Success!\r\n");
Getstring(CgiOfStr, 9, state->buffer, 200);
}
else if(index==8)
{
//strcpy(state->buffer, "Parse form errro!\r\n" );
Getstring(CgiOfStr, 10, state->buffer, 100);
}
else if(index==9)
{
//sprintf(state->buffer, "<p>Deffault Parameter Recovery Success! Please Reboot!\r\n<p><a href=""/Reboot.htm"">Return</a></body></html>\r\n");
Getstring(CgiOfStr, 11, state->buffer, 200);
}
state->length = strlen(state->buffer);
state->substate++;
}
/*** BeginHeader SetEthCgi */
nodebug xmem int SetEthCgi(HttpState* state);
/*** EndHeader */
nodebug xmem int SetEthCgi(HttpState* state)
{
int i;
unsigned long IpAddr;
unsigned long Mask;
unsigned long Gateway;
if(state->length)
{
/* buffer to write out */
if(state->offset < state->length) {
state->offset += sock_fastwrite(&state->s,
state->buffer + (int)state->offset,
(int)state->length - (int)state->offset);
} else {
state->offset = 0;
state->length = 0;
}
}
else
{
switch(state->substate)
{
case 0:
CgiStep0(state);
break;
case 1:
CgiStep1(state);
break;
case 2:
/* init the data */
for(i=0;i<12;++i)
{
FormData[i].value[0] = '\0';
}
FormData[0].name="IP1";
FormData[1].name="IP2";
FormData[2].name="IP3";
FormData[3].name="IP4";
FormData[4].name="Mask1";
FormData[5].name="Mask2";
FormData[6].name="Mask3";
FormData[7].name="Mask4";
FormData[8].name="Gate1";
FormData[9].name="Gate2";
FormData[10].name="Gate3";
FormData[11].name="Gate4";
state->p = state->buffer;
state->substate++;
break;
case 3:
/* parse the POST information */
if(ParseForm(state,12))
{
IpAddr=0;
Mask=0;
Gateway=0;
for(i=0;i<4;++i)
{
IpAddr+=atoi(FormData[i].value);
Mask+=atoi(FormData[i+4].value);
Gateway+=atoi(FormData[i+8].value);
if(i<3)
{
IpAddr<<=8;
Mask<<=8;
Gateway<<=8;
}
}
g_AddrInfo[UserIndx].ulIpAddr = IpAddr;
g_AddrInfo[UserIndx].ulIpMask = Mask;
g_AddrInfo[UserIndx].ulGateway = Gateway;
FormDispIP();
SetSrcIP( );
CgiReturn(state,6);
}
else
{
//CgiErr(state);
CgiReturn(state,8);
}
break;
case 4:
CgiReturn(state,1);
break;
default:
state->substate = 0;
return 1;
}
}
return 0;
}
/*** BeginHeader SetLbCgi */
nodebug xmem int SetLbCgi(HttpState* state);
/*** EndHeader */
nodebug xmem int SetLbCgi(HttpState* state)
{
int i;
unsigned char ucTmp;
if(state->length)
{
/* buffer to write out */
if(state->offset < state->length) {
state->offset += sock_fastwrite(&state->s,
state->buffer + (int)state->offset,
(int)state->length - (int)state->offset);
} else {
state->offset = 0;
state->length = 0;
}
}
else
{
switch(state->substate)
{
case 0:
CgiStep0(state);
break;
case 1:
CgiStep1(state);
break;
case 2:
/* init the data */
for(i=0;i<8;++i)
{
FormData[i].value[0] = '\0';
}
i=0;
FormData[i++].name="LB0";//i=0
FormData[i++].name="LB1";
FormData[i++].name="LB2";
FormData[i++].name="LB3";
FormData[i++].name="RB0";
FormData[i++].name="RB1";
FormData[i++].name="RB2";
FormData[i++].name="RB3";
state->p = state->buffer;
state->substate++;
break;
case 3:
if(ParseForm(state,8))
{
ucTmp=0;
for(i=0;i<4;i++)
{
if(!(strcmp(FormData[i].value,"on")))//Llb
{
ucTmp|=0x02;
memcpy(E1State[i].CtrlL,"checked\0",8);
memcpy(E1State[i].CtrlR,"\0",8);
}
else if(!(strcmp(FormData[i+4].value,"on")))//Rlb
{
ucTmp|=0x01;
memcpy(E1State[i].CtrlR,"checked\0",8);
memcpy(E1State[i].CtrlL,"\0",8);
}
else
{
memcpy(E1State[i].CtrlL,"\0",8);
memcpy(E1State[i].CtrlR,"\0",8);
}
if(i<3)
{
ucTmp<<=2;
}
}
WrPortE(LB_REG,NULL,ucTmp);
CgiReturn(state,5);
}
else
{
//CgiErr(state);
CgiReturn(state,8);
}
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -