亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? handler_http.c

?? 基于AT91SAM7x256的硬件平臺的WEB服務器源碼(A&shy DS版本, ucOS_II+LWIP+自己編寫的DNS查詢工具)
?? C
?? 第 1 頁 / 共 2 頁
字號:
//*------------------------------------------------------------------------------------------------
//* 文件名				: handler_http.c
//* 功能描述			: http協議處理函數庫
//* 作者    			: 焦海波
//* 版本				: 0.1
//* 建立日期、時間		: 2006/08/07 14:58
//* 最近修改日期、時間	: 
//* 修改原因			: 
//*------------------------------------------------------------------------------------------------
//*------------------------------------------ 頭文件 -----------------------------------------------
#include    "/uCOS_II/includes.h"
#include	"/at91sam7x256/drivers/flash/flash.h"
#include	"/at91sam7x256/include/AT91SAM7X256.h"
#include	"/LwIP/include/lwip/tcpip.h"
#include	"/LwIP/dns/dns_client.h"
#include	"/tools/stringExtAPI.h"
#include	"/tools/search.h"
//*------------------------------------ 變量、數據類型宏定義 ---------------------------------------
#define 	HTTP_HTML_HEADER		"HTTP/1.1 200 OK\r\nContent-type: text/html\r\n\r\n"
#define 	HTTP_POST_RESP_HEADER	"HTTP/1.1 100 Continue\r\n\r\n"

//* POST處理函數類型定義
typedef void(*pfunvPHandler)(ST_NETCONN*, ST_NETBUF*, BYTE*);

#define		POST_HANDLER_NAME_LEN	31

//* POST請求處理函數列表使用的結構類型定義
typedef struct {
	LONG			lNameLen;
	BYTE			szHandlerName[POST_HANDLER_NAME_LEN + 1];
	pfunvPHandler	pfunvPostHandler;
} ST_POST_HANDLER;

//*-------------------------------------- 函數原型聲明 ---------------------------------------------
static void __vSetNetCFGParam(ST_NETCONN *pstConn, ST_NETBUF *pstNetbuf, BYTE *pszParam);
static void __vDNToIP(ST_NETCONN *pstConn, ST_NETBUF *pstNetbuf, BYTE *pszParam);

//*---------------------------------------- 常量定義 ----------------------------------------------
#define	STA_PHANDLER_NB		2		//* POST請求處理函數個數
static const ST_POST_HANDLER  __staPHandlers[STA_PHANDLER_NB] = {{15, "vSetNetCFGParam", __vSetNetCFGParam}, 
												{7, "vDNToIP", __vDNToIP}};
#if	__DEBUG__ == 0												
	LONG lNeedReset = FALSE;
#endif
//*================================================================================================
//*											函	數	區
//*================================================================================================
//*------------------------------------------------------------------------------------------------
//* 函數名稱 : __vHTTPRespInfo
//* 功能描述 : 向瀏覽器返回一個HTTP請求的響應信息
//* 入口參數 :     <pstConn>[in] 指向ST_NETCONN結構的指針,該結構保存當前的連接信息
//*          : <pszRespInfo>[in] 指向響應信息的指針
//*          :        <lLen>[IN] 響應信息長度
//* 出口參數 : 無
//*------------------------------------------------------------------------------------------------
static void __vHTTPRespInfo(ST_NETCONN *pstConn, BYTE *pszRespInfo, LONG lLen)
{
	netconn_write(pstConn, HTTP_HTML_HEADER, strlenExt(HTTP_HTML_HEADER), NETCONN_COPY);
	netconn_write(pstConn, pszRespInfo, lLen, NETCONN_NOCOPY);
}
//*------------------------------------------------------------------------------------------------
//* 函數名稱 : __vHTTPError
//* 功能描述 : 向瀏覽器返回一個HTTP請求錯誤
//* 入口參數 : <pstConn>[in] 指向ST_NETCONN結構的指針
//* 出口參數 : 無
//*------------------------------------------------------------------------------------------------
static void __vHTTPError(ST_NETCONN *pstConn)
{
	__vHTTPRespInfo(pstConn, 
					"<boady><br><br><h1>錯誤的資源請求!<a href='#'  onclick='history.back();'>返回</a></h1></body>", 
					strlenExt("<boady><br><br><h1>錯誤的資源請求!<a href='#'  onclick='history.back();'>返回</a></h1></body>"));
}
//*------------------------------------------------------------------------------------------------
//* 函數名稱 : Handler_HTTPGet
//* 功能描述 : 處理HTTP協議的GET請求
//* 入口參數 : <pstConn>[in] 指向ST_NETCONN結構的指針
//* 出口參數 : 無
//*------------------------------------------------------------------------------------------------
static void __Handler_HTTPGet(ST_NETCONN *pstConn)
{
	BYTE			__szNetCFGParam[192];

	netconn_write(pstConn, HTTP_HTML_HEADER, strlenExt(HTTP_HTML_HEADER), NETCONN_COPY);
	netconn_write(pstConn, (BYTE*)(SET_HTML_STORE_ADDR + 4), *((LONG*)SET_HTML_STORE_ADDR), NETCONN_COPY);
	memset(__szNetCFGParam, 0, sizeof(__szNetCFGParam));
	strcatExt(__szNetCFGParam, sizeof(__szNetCFGParam), "<p>IP:", 7);
	vReadASCIIIP(__szNetCFGParam + strlenExt(__szNetCFGParam));
	strcatExt(__szNetCFGParam, sizeof(__szNetCFGParam), "<br>子網掩碼:", 14);
	vReadASCIINetMask(__szNetCFGParam + strlenExt(__szNetCFGParam));
	strcatExt(__szNetCFGParam, sizeof(__szNetCFGParam), "<br>網關:", 10);
	vReadASCIIGateway(__szNetCFGParam + strlenExt(__szNetCFGParam));
	netconn_write(pstConn, __szNetCFGParam, strlenExt(__szNetCFGParam), NETCONN_COPY);
	netconn_write(pstConn, (BYTE*)(SET1_HTML_STORE_ADDR + 4), *((LONG*)SET1_HTML_STORE_ADDR), NETCONN_COPY);
}
//*------------------------------------------------------------------------------------------------
//* 函數名稱 : __ulParseIP
//* 功能描述 : 解析IP格式的數據
//* 入口參數 :  <pszVal>[in] 指向參數值的指針
//*          : <lValLen>[in] 參數長度
//* 出口參數 : 無
//*------------------------------------------------------------------------------------------------
static ULONG __ulParseIP(BYTE *pszVal, LONG lValLen)
{
	BYTE	*__pszNext = pszVal, *__pszStart;
	ULONG 	__ulIP = 0x00000000;
	
	__pszNext = memstrExt(__pszNext, ".", 1, 4);
	__ulIP = ConvertStringToOneByte_Hex(pszVal, __pszNext - pszVal);
	
	__pszStart = __pszNext + 1;
	__pszNext = memstrExt(__pszStart, ".", 1, 4);
	__ulIP |= (0x0000FF00 & (ConvertStringToOneByte_Hex(__pszStart, __pszNext - __pszStart) << 8));
	
	__pszStart = __pszNext + 1;
	__pszNext = memstrExt(__pszStart, ".", 1, 4);
	__ulIP |= (0x00FF0000 & (ConvertStringToOneByte_Hex(__pszStart, __pszNext - __pszStart) << 16));
	
	__pszStart = __pszNext + 1;
	__ulIP |= (0xFF000000 & (ConvertStringToOneByte_Hex(__pszStart, lValLen - (LONG)(__pszStart - pszVal)) << 24));
	
	return __ulIP;
}
//*------------------------------------------------------------------------------------------------
//* 函數名稱 : __vSetNetCFGParam
//* 功能描述 : 設置網絡參數
//* 入口參數 :   <pstConn>[in] 指向ST_NETCONN結構的指針
//*          : <pstNetbuf>[in] 指向ST_NETBUF結構的指針
//*          :  <pszParam>[in] 指向參數開始位置的指針
//* 出口參數 : 無
//*------------------------------------------------------------------------------------------------
static void __vSetNetCFGParam(ST_NETCONN *pstConn, ST_NETBUF *pstNetbuf, BYTE *pszParam)
{
	extern void ResetSoft();
	
	BYTE	*__pszNext, *__pszStart;
	ULONG	__ulIP, __ulNetMask, __ulGateway;
	LONG	__lValLen, __lParamTotLen;
	BYTE	__szParam[64];

#if OS_CRITICAL_METHOD == 3                     
    OS_CPU_SR  		cpu_sr = 0;
#endif

	/* 注意:作為原理性代碼,這里采用最簡單的方式取值,沒有進行必要的容錯 */
	
	memset(__szParam, 0, sizeof(__szParam));
	
	__lValLen = (LONG)(pszParam - (BYTE*)pstNetbuf->ptr->payload);
	__lParamTotLen = (LONG)pstNetbuf->ptr->len - __lValLen;
	memcpy(__szParam, pszParam, __lParamTotLen);
	
	if(pstNetbuf->ptr->tot_len > pstNetbuf->ptr->len)
		netbuf_copy(pstNetbuf, __szParam + pstNetbuf->ptr->len, sizeof(__szParam) - 1 - __lParamTotLen);
		
	__lParamTotLen = pstNetbuf->ptr->tot_len - __lValLen;
	if(__lParamTotLen > sizeof(__szParam) - 1)
	{
		__Handler_HTTPGet(pstConn);
		return;
	}

	__pszStart = __szParam + 3;
	__pszNext = memstrExt(__pszStart, "&", 1, __lParamTotLen);
	__lValLen = (LONG)(__pszNext - __pszStart);
	__ulIP = __ulParseIP(__pszStart, __lValLen);
	
	__pszStart = __pszNext + 4;
	__pszNext = memstrExt(__pszStart, "&", 1, __lParamTotLen - (LONG)(__pszStart - __szParam));
	__lValLen = (LONG)(__pszNext - __pszStart);
	__ulNetMask = __ulParseIP(__pszStart, __lValLen);
	
	__pszStart = __pszNext + 4;
	__lValLen = __lParamTotLen - (LONG)(__pszStart - __szParam);
	__ulGateway = __ulParseIP(__pszStart, __lValLen);
	
	ubSetNetCFGParam(__ulIP, __ulNetMask, __ulGateway);
	
	netconn_write(pstConn, HTTP_POST_RESP_HEADER, strlenExt(HTTP_POST_RESP_HEADER), NETCONN_COPY);
	
	__Handler_HTTPGet(pstConn);
	
#if	__DEBUG__ == 0
	OS_ENTER_CRITICAL()
	{
		lNeedReset = TRUE;
	}	
	OS_EXIT_CRITICAL()
#endif
}
//*------------------------------------------------------------------------------------------------
//* 函數名稱 : __illPacketDNSQuestion
//* 功能描述 : 按照DNS格式封裝查詢參數
//* 入口參數 :      <pszParam>[in]  指向查詢參數的指針
//*          :     <lParamLen>[in]  參數長度
//*          :   <pszQuestion>[in]  指向接收緩沖區(在這里保存封裝好的包)的指針
//*          : <lQuestionSize>[out] 接收封裝包的緩沖區長度
//* 出口參數 : 返回封裝后的包長度
//*------------------------------------------------------------------------------------------------
__inline LONG __illPacketDNSQuestion(BYTE *pszParam, LONG lParamLen, BYTE *pszQuestion, LONG lQuestionSize)
{
	LONG	__lValLen, __lTotLenToParsed = 0;
	BYTE	*__pszNext, *__pszStart;
	
	memset(pszQuestion, 0, lQuestionSize);
	
	//* 按照DNS格式封裝查詢參數
	__pszStart = pszParam + 3;
	do{
		__pszNext = memstrExt(__pszStart, ".", 1, lParamLen - (LONG)(__pszStart - pszParam));
		if(__pszNext != NULL)
			__lValLen = (LONG)(__pszNext - __pszStart);
		else
			__lValLen = lParamLen - (LONG)(__pszStart - pszParam);
				
		*(pszQuestion + __lTotLenToParsed) = __lValLen;
		memcpy(pszQuestion + __lTotLenToParsed + 1, __pszStart, __lValLen);
		
		__lTotLenToParsed += (__lValLen + 1);
		
		__pszStart = __pszNext + 1;
	}while(__pszNext != NULL);	
	
	return __lTotLenToParsed + 1;
}
//*------------------------------------------------------------------------------------------------
//* 函數名稱 : __ilvSendIP
//* 功能描述 : 發送IP地址

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩午夜影院| 久久综合久久鬼色中文字| 色婷婷激情综合| 制服丝袜一区二区三区| 国产亚洲欧洲一区高清在线观看| 国产精品麻豆久久久| 视频一区欧美日韩| 99久久伊人网影院| 精品国产髙清在线看国产毛片| 亚洲男人都懂的| 国产经典欧美精品| 7777女厕盗摄久久久| 夜夜爽夜夜爽精品视频| 不卡av在线免费观看| 久久久久久久久免费| 免费在线成人网| 欧美另类久久久品| 亚洲成人黄色小说| 欧美性色欧美a在线播放| 国产视频在线观看一区二区三区| 五月综合激情日本mⅴ| 色综合久久88色综合天天| 欧美大片日本大片免费观看| 视频一区二区三区入口| 在线亚洲人成电影网站色www| 国产亚洲精品bt天堂精选| 奇米四色…亚洲| 91精品免费在线观看| 视频一区在线视频| 欧美精品xxxxbbbb| 天天影视网天天综合色在线播放| 色成年激情久久综合| 一区二区三区中文在线| 91国内精品野花午夜精品| 亚洲综合另类小说| 欧美日韩国产一区二区三区地区| 亚洲国产色一区| 91精品国产91热久久久做人人| 亚洲1区2区3区视频| 欧美一区二区二区| 国产一二精品视频| 欧美激情中文字幕一区二区| 91在线云播放| 亚洲视频 欧洲视频| 欧美三片在线视频观看| 日韩福利电影在线| 精品播放一区二区| 成人福利电影精品一区二区在线观看 | 亚洲欧洲www| 在线视频一区二区免费| 日韩精品亚洲专区| 精品国产欧美一区二区| 国产精品亚洲人在线观看| 中文字幕高清不卡| 色8久久精品久久久久久蜜| 亚洲欧美日韩国产综合| 欧美日韩精品一区二区| 久久精品国产一区二区三| 中文字幕精品在线不卡| 欧美性猛片aaaaaaa做受| 久久国产精品区| 国产精品福利一区| 884aa四虎影成人精品一区| 国产麻豆日韩欧美久久| 亚洲精选视频免费看| 欧美一区二区视频在线观看2022| 激情成人午夜视频| 亚洲精品成人精品456| 91麻豆精品国产91久久久使用方法 | 精品国产一二三| av激情成人网| 国产在线精品一区二区| 一区二区三国产精华液| 欧美大胆一级视频| 99久久久久久99| 久久国产精品露脸对白| 亚洲天堂福利av| 精品乱人伦小说| 欧美中文一区二区三区| 国产在线麻豆精品观看| 亚洲欧美日韩一区二区三区在线观看| 制服丝袜亚洲网站| 92国产精品观看| 国产精品中文字幕欧美| 亚洲一区二区三区四区五区中文| 日韩欧美区一区二| 欧洲视频一区二区| www.亚洲精品| 国产高清久久久久| 狠狠狠色丁香婷婷综合激情| 午夜欧美在线一二页| 亚洲欧美另类小说视频| 欧美成人综合网站| 91精品国产综合久久久久久久久久| 成人午夜视频在线| 岛国精品在线播放| 国产精品一区二区不卡| 午夜视频一区在线观看| 一区二区三区四区中文字幕| 国产婷婷色一区二区三区| 欧美成人在线直播| 精品三级在线观看| 久久综合九色综合97婷婷| 日韩一区二区三区电影 | 日本韩国欧美在线| 成人av免费在线观看| 国产高清不卡二三区| 久久99精品久久久久久国产越南 | 欧美一区二区三区人| 欧美午夜精品久久久久久孕妇 | 一区二区三区在线影院| 国产精品白丝在线| 自拍偷拍欧美激情| 日韩久久一区二区| 亚洲天堂久久久久久久| 一区二区三区中文在线| 亚洲综合成人网| 亚洲国产欧美日韩另类综合| 亚洲一区二区三区国产| 亚洲福利视频导航| 热久久久久久久| 美女视频一区在线观看| 精品一区二区三区免费观看| 国产美女在线精品| 大桥未久av一区二区三区中文| 成人18精品视频| 色婷婷精品大在线视频| 欧美日韩日本视频| 日韩一区二区三区视频在线观看 | 中文字幕一区二区三中文字幕 | 国产欧美精品一区二区色综合朱莉 | 亚洲精品中文在线| 亚洲福利视频一区二区| 久久精品国产**网站演员| 国产精品一卡二| 色综合久久综合中文综合网| 69p69国产精品| 久久久久99精品一区| ...xxx性欧美| 全国精品久久少妇| 国产精品亚洲一区二区三区在线| 床上的激情91.| 国产视频一区二区三区在线观看 | 亚洲一区二区欧美日韩| 蜜桃视频一区二区三区在线观看| 国产精品99久久久久久久女警 | 精品国产乱码久久久久久蜜臀| 久久精品一区八戒影视| 亚洲精品视频免费观看| 免费在线观看不卡| 91丨九色porny丨蝌蚪| 欧美一区二区三区啪啪| 亚洲欧美国产毛片在线| 蜜桃久久av一区| 91麻豆蜜桃一区二区三区| 制服丝袜亚洲精品中文字幕| 国产精品久久久久影院亚瑟| 天天色天天爱天天射综合| 国产成人av在线影院| 欧美区在线观看| 国产精品成人免费精品自在线观看| 日欧美一区二区| 91热门视频在线观看| 亚洲精品一区在线观看| 一区二区三区蜜桃网| 国产一区二区三区四区五区美女 | 午夜欧美电影在线观看| 成人在线综合网| 欧美sm美女调教| 午夜视频在线观看一区| 色综合视频一区二区三区高清| 精品久久人人做人人爰| 亚洲成人1区2区| 95精品视频在线| 国产日韩欧美精品一区| 久久国产人妖系列| 欧美精品1区2区3区| 亚洲激情网站免费观看| 成人av影视在线观看| 精品国产乱码久久久久久久久 | 三级影片在线观看欧美日韩一区二区| 粉嫩绯色av一区二区在线观看| 在线电影欧美成精品| 亚洲制服欧美中文字幕中文字幕| 国产超碰在线一区| 久久久久99精品国产片| 国产露脸91国语对白| 欧美成人女星排行榜| 麻豆精品一区二区av白丝在线| 欧美色倩网站大全免费| 亚洲午夜久久久久久久久电影网| 97久久精品人人爽人人爽蜜臀 | 三级影片在线观看欧美日韩一区二区| 一本色道亚洲精品aⅴ| 最新国产の精品合集bt伙计| av电影天堂一区二区在线观看| 中文字幕av一区二区三区| 国产成人精品免费视频网站| 国产性色一区二区| 成人性生交大片免费看中文|