⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 web.c

📁 采用ajax技术
💻 C
📖 第 1 页 / 共 4 页
字号:
	
}
/*************************************************************************
* 名称: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()>&lt; 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 + -