📄 web.c
字号:
}
/*************************************************************************
* 名称:CheckSuperUserIp
* 函数原型:CheckSuperUserIp(uint8* ip)
* 功能:验证用户是否已经登录
* 入口参数:
*
* 出口参数:
* 使用说明:
* 创建日期:
* 作者:Henry
**************************************************************************/
uint8 CheckSuperUserIp(uint8* ip,uint8* src)
{
uint8 i;
for(i=0;i<4;i++)
{
if(src[i] != ip[i])
{
return FALSE;
}
}
return TRUE;
}
/*************************************************************************
* 名称:CheckUserIp
* 函数原型:CheckUserIp(uint8* ip)
* 功能:验证用户是否已经登录
* 入口参数:
*
* 出口参数:
* 使用说明:
* 创建日期:
* 作者:Henry
**************************************************************************/
uint8 CheckUserIp(uint8* ip)
{
uint8 i;
for(i=0;i<4;i++)
{
if(ClientHost[i] != ip[i])
{
return FALSE;
}
}
return TRUE;
}
/*************************************************************************
* 名称:CheckLoginUser
* 函数原型:CheckLoginUser(uint8* ip,uint8 tcpid)
* 功能:验证用户是否已经登录
* 入口参数:
*
* 出口参数:
* 使用说明:
* 创建日期:
* 作者:Henry
**************************************************************************/
uint8 CheckLoginUser(uint8* ip,uint8 tcpid,http *list)
{
uint8 buf[] = "<HTML><HEAD><TITLE>Tianjin OMUX communicaion technology co.,ltd.</TITLE>\
</HEAD><BODY><br><br><br><br><CENTER><H2>One user have logged in!</H2></BODY></HTML>";
uint8 i;
/*
if(nLogin && strcmp((char*)ClientHost,(char*)ip) == 0)
{
IsSuperUser=0;
SendToNet(ClientHost,5);
SendToNet(ip,5);
return TRUE;
}
*/
if(CheckSuperUser(ip,tcpid,list))
return TRUE;
for(i=0;i<4;i++)
{
if(ClientHost[i] != ip[i])
{
send( tcpid,(uint8*)httpHead ,strlen((char*)httpHead), 0 );
SendToClient((uint8*) buf,tcpid);
return FALSE;
}
}
return TRUE;
}
//------------------------------------------------------------------------
uint8 CheckSuperUser(uint8* ip,uint8 tcpid,http *list)
{
if(strcmp((char*)list[0].value,"omux") == 0 &&
strcmp((char*)list[1].value,"omuxnet3000")==0)
{
//nTimeout = OSTimeGet() ;
return TRUE;
}
return FALSE;
}
/*************************************************************************
* 名称:GetIp
* 函数原型:void GetIp(uint8 *dest,uint8 *src)
* 功能:获取ip值
* 入口参数:
*
* 出口参数:
* 使用说明:
* 创建日期:
* 作者:Henry
**************************************************************************/
void GetIp(uint8 *dest,uint8 *src)
{
uint8 i,nPos = 0,temp[5]={0},n=0;
memset(temp,0,5);
for(i=0;i<strlen((char*)src);i++)
{
if(src[i] != '.')
temp[nPos++] = src[i];
else
{
dest[n++] = StrToInt((char*)temp);
nPos=0;
memset(temp,0,5);
}
}
if(strlen((char*)temp)>0)
dest[n] = StrToInt((char*)temp);
}
/*************************************************************************
* 名称:web_login(uint8 tcpid)
* 函数原型:web_login(uint8 tcpid)
* 功能:用户登录使首页
* 入口参数:
*
* 出口参数:
* 使用说明:
* 创建日期:
* 作者:Henry
**************************************************************************/
void web_login(uint8 tcpid)
{
uint8 buf[] = "<HTML>\r\n\
<SCRIPT language=javascript>if (top.frames.length!=0) top.location=self.location</SCRIPT>\r\n\
<BODY><CENTER><H2><BR>\r\n\
<BR>Network Management System<BR><BR></H2>\r\n\
<FORM method=post action=/Login>\r\n\
<P>Username:<INPUT type=text name=username>\r\n\
<P>Password:<INPUT type=password name=password>\r\n\
<INPUT type= hidden name=temp value=0><P>\r\n\
<INPUT type=submit value=Login>\r\n\
</FORM></BODY></HTML>";
send( tcpid,(uint8*)httpHead ,strlen((char*)httpHead), 0 );
SendToClient((uint8*) buf,tcpid);
if(!nLogin)
nDisplayHome = 1;
}
/*************************************************************************
* 名称:web_loginErr(uint8 tcpid)
* 函数原型:web_loginErr(uint8 tcpid)
* 功能:用户登录错误
* 入口参数:
*
* 出口参数:
* 使用说明:
* 创建日期:
* 作者:Henry
**************************************************************************/
void web_loginErr(uint8 tcpid)
{
uint8 buf[] = "<HTML><BODY><CENTER><H2><BR><BR>Login incorrect\
<BR><BR></H2><UL>\
<LI> <A HREF=javascript:history.back()>< Back</A>\
</UL></BODY></HTML>";
send( tcpid,(uint8*)httpHead ,strlen((char*)httpHead), 0 );
SendToClient((uint8*) buf,tcpid);
}
/*************************************************************************
* 名称:web_loginCheck(uint8 tcpid)
* 函数原型:uint8 web_loginCheck(char* username,char* pw,uint8 tcpid)
* 功能:验证用户登录信息
* 入口参数:
*
* 出口参数:
* 使用说明:
* 创建日期:
* 作者:Henry
**************************************************************************/
//
uint8 web_loginCheck(char* username,char* pw,uint8 tcpid)
{
if((strcmp(username,(char*)mGlobalInf.pUserName)== 0 &&
strcmp(pw,(char*)mGlobalInf.pUserPw) == 0) ||
(strcmp(username,"omux")==0 &&
strcmp(pw,"omuxnet3000")==0))
return TRUE;
return FALSE;
}
/*************************************************************************
* 名称:web_index()
* 函数原型:web_index()
* 功能:发送web信息到client
* 入口参数:
*
* 出口参数:
* 使用说明:
* 创建日期:
* 作者:Henry
**************************************************************************/
uint8 SendToClient(uint8* buf,uint8 tcpid)
{
uint8 i =0 ;
int len = strlen((char*)buf);
while(len>1100){
send( tcpid,(uint8*)&buf[1100*i] ,1100, 0 );
i++;
len = strlen((char*)buf) - 1100*i;
}
if(len > 0)
send( tcpid,(uint8*)&buf[1100*i] ,len, 0 );
return TRUE;
}
/*************************************************************************
* 名称:ParseHttpLength
* 函数原型:uint8 ParseHttp(uint8* buf)
* 功能:解析http协议
* 入口参数:buf : web请求数据
*
* 出口参数:执行结果 nKind
* 使用说明:
* 创建日期:
* 作者:Henry
**************************************************************************/
int ParseHttpLength(uint8* buf)
{
uint8 str[30]={0},nPos = 0,temp[30]={0};
int len=15,i=0;
memset(str,0,30);
strcpy((char*)str,"Content-Length:");
for(i=0;i<strlen((char*)buf) ;i++)
{
memset((char*)temp,0,30);
memcpy((char*)temp,(char*)&buf[i],len);
if(strcmp((char*)&temp[0],(char*)&str[0])==0)
{
memset((char*)temp,0,30);
i = i+ strlen((char*)str);
nPos =0;
while(!(buf[i]== 0x0D && buf[i+1]==0x0A))
if(buf[i]>='0' && buf[i]<= '9')
temp[nPos++] = buf[i++];
else if(i>= strlen((char*)buf)-1)
break;
else
i++;
len = StrToInt((char*)temp);
break;
}
}
return len;
}
/*************************************************************************
* 名称:ParseHttp
* 函数原型:uint8 ParseHttp(uint8* buf)
* 功能:解析http协议
* 入口参数:buf : web请求数据
*
* 出口参数:执行结果 nKind
* 使用说明:
* 创建日期:
* 作者:Henry
**************************************************************************/
uint8 ParseHttp(uint8* buf,http* list,uint8 *listLen)
{ uint8 nKind =100,str[30]={0},nPos = 5,flag=0;
int len=0,i=0;
if(strncmp((char*)buf,"POST",4) == 0)
nPos =6;
if(buf[nPos] == ' ')
return nKind;
for(i=0;i<WEBMAXKIND;i++)
{
memset(str,0,30);
len = strlen((char*)&webHtmls[i]);
memcpy(str,(char*)buf+nPos,len);
if(strcmp((char*)str,(char*)&webHtmls[i]) == 0)
{
nKind = i;
break;
}
}
len = len + nPos;
if(i<WEBMAXKIND && (buf[len] == '?' || nPos==6))
{
if(nPos == 6)
{
len = strlen((char*)buf) - ParseHttpLength(buf)-1;
while(buf[len] != 0xA && buf[len-1] != 0xD)
{
if(len==0) return nKind;
len--;
}
}
len++;
i=0;
nPos =0;
while(len < strlen((char*)buf))
{
if(nPos>=100) break;
if((buf[len] == 0x0D && buf[len+1] == 0x0A)||buf[len]==0x20)
break;
else if(flag == 0 && buf[len] != '=')
{
list[i].name[nPos++] = buf[len++];
}
else if(flag == 0 && buf[len] == '=')
{
len++;
flag =1;
nPos =0;
}
else if(flag == 1 && buf[len] != '&')
{
list[i].value[nPos++] = buf[len++];
}
else if(flag == 1 && buf[len] == '&')
{
i++;
flag = 0;
nPos = 0;
len++;
if(i>9)
break;
}
else
{
len++;
flag = 2;
}
}
*listLen = i+1;
}
return nKind;
}
/*************************************************************************
* 名称:ValueToStr
* 函数原型:ValueToStr(uint8 *buf,char *p)
* 功能:类型转换
* 入口参数:
*
* 出口参数:
* 使用说明:
* 创建日期:
* 作者:Henry
**************************************************************************/
char * ValueToStr(uint8 *buf,char *p)
{
char temp[10] = {0};
int len;
memset(p,0,10);
IntToStr(buf[0],temp);
memcpy(p,temp,strlen(temp));
len = strlen(p);
p[len++] = '.';
if(buf[1]<10) p[len++] = '0';
IntToStr(buf[1],temp);
memcpy(&p[len],temp,strlen(temp));
return p;
}
/*************************************************************************
* 名称:IntToStr
* 函数原型:IntToStr(int n,char *p)
* 功能:类型转换
* 入口参数:
*
* 出口参数:
* 使用说明:
* 创建日期:
* 作者:Henry
**************************************************************************/
char * IntToStr(uint32 n,char *p)
{
char buf[10]={0};
uint32 m = n,i=0;
int j=0;
memset(buf,0,10);
memset(p,0,10);
while(m/10 )
{
buf[i] = m%10;
m= (m -buf[i++])/10;
}
if(m>0)
buf[i] = m;
for(j = i;j>=0;j--)
p[i-j] = buf[j] + 48;
return p;
}
/*************************************************************************
* 名称:IntToStr
* 函数原型:IntToStr(int n,char *p)
* 功能:类型转换
* 入口参数:
*
* 出口参数:
* 使用说明:
* 创建日期:
* 作者:Henry
**************************************************************************/
char * HexToStr(uint8 n,char *p)
{
int m=0;
memset(p,0,10);
m = (n>>4)&0xf;
if(m<10)
p[0] = m+48;
else
{
m= (m+'A'-10);
p[0] =m;
}
m = n&0xf;
if(m<10)
p[1] = m+48 ;
else
{
m= (m+'A'-10);
p[1] =m;
}
return p;
}
/*************************************************************************
* 名称:StrToInt
* 函数原型:StrToInt(char *p)
* 功能:字符转十进制
* 入口参数:
*
* 出口参数:
* 使用说明:
* 创建日期:
* 作者:Henry
**************************************************************************/
uint32 StrToInt(char *p)
{
uint32 sum =0;
int i = strlen((char*)p),j=0;
for(j = 0;j<i;j++)
{
if(p[i-j-1]>='0' && p[i-j-1] <='9')
sum = sum + (p[i-j-1]-48) * func10n(j);
}
return sum;
}
/*************************************************************************
* 名称:func10n(int n)
* 函数原型:func10n(int n)
* 功能:10的n次方
* 入口参数:
*
* 出口参数:
* 使用说明:
* 创建日期:
* 作者:Henry
**************************************************************************/
//
uint32 func10n(int n)
{
uint32 sum =1;
int i=0;
for(i=0;i<n;i++)
sum = sum*10;
return sum;
}
/*************************************************************************
* 名称:func16n(int n)
* 函数原型:func10n(int n)
* 功能:16的n次方
* 入口参数:
*
* 出口参数:
* 使用说明:
* 创建日期:
* 作者:Henry
**************************************************************************/
//
uint32 func16n(int n)
{
uint32 sum =1;
int i=0;
for(i=0;i<n;i++)
sum = sum*16;
return sum;
}
/*************************************************************************
* 名称:StrToInt
* 函数原型:StrToInt(char *p)
* 功能:字符转十进制
* 入口参数:
*
* 出口参数:
* 使用说明:
* 创建日期:
* 作者:Henry
**************************************************************************/
uint32 StrToHex(char *p)
{
uint32 sum =0;
int i = strlen((char*)p),j=0;
for(j = 0;j<i;j++)
{
if(p[i-j-1]>='0' && p[i-j-1] <='9')
sum = sum + (p[i-j-1]-48) * func16n(j);
if(p[i-j-1]>='A' && p[i-j-1] <='F')
sum = sum + (p[i-j-1]-'A'+10) * func16n(j);
if(p[i-j-1]>='a' && p[i-j-1] <='f')
sum = sum + (p[i-j-1]-'a'+10) * func16n(j);
}
return sum;
}
//-----------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -