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

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

?? http.c

?? proteus avr單片米 tcp/ip 仿真
?? C
?? 第 1 頁 / 共 2 頁
字號:
//********************************************************************************************
//
// File : http.c implement for Hyper Text transfer Protocol
//
//********************************************************************************************
//
// Copyright (C) 2007
//
// This program is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free Software
// Foundation; either version 2 of the License, or (at your option) any later
// version.
// This program is distributed in the hope that it will be useful, but
//
// WITHOUT ANY WARRANTY;
//
// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
// PURPOSE. See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along with
// this program; if not, write to the Free Software Foundation, Inc., 51
// Franklin St, Fifth Floor, Boston, MA 02110, USA
//
// http://www.gnu.de/gpl-ger.html
//
//********************************************************************************************
#include "includes.h"
//********************************************************************************************
//
// Global variable for http.c
//
//********************************************************************************************
prog_int8_t web_title[] = "ATmega32 TCP/IP";
prog_int8_t tag_br[] = "<br>";
prog_int8_t tag_hr[] = "<hr width=\"100%\" size=\"1\"><br>";
prog_int8_t tag_form[] = "<form action=\"./?\" method=\"get\">";
//********************************************************************************************
//
// Function : http_webserver_process
// Description : Initial connection to web server
//
//********************************************************************************************
void http_webserver_process ( BYTE *rxtx_buffer, BYTE *dest_mac, BYTE *dest_ip )
{
	WORD dlength, dest_port;
	BYTE count_time_temp[3];
	BYTE generic_buf[64];
	
	dest_port = (rxtx_buffer[TCP_SRC_PORT_H_P]<<8)|rxtx_buffer[TCP_SRC_PORT_L_P];
	// tcp port 80 start for web server
	if ( rxtx_buffer [ IP_PROTO_P ] == IP_PROTO_TCP_V && rxtx_buffer[ TCP_DST_PORT_H_P ] == 0 && rxtx_buffer[ TCP_DST_PORT_L_P ] == 80 )
	{
		// received packet with flags "SYN", let's send "SYNACK"
		if ( (rxtx_buffer[ TCP_FLAGS_P ] & TCP_FLAG_SYN_V) )
		{
//			tcp_send_synack ( rxtx_buffer, dest_mac, dest_ip );
			tcp_send_packet (
				rxtx_buffer,
				(WORD_BYTES){dest_port},
				(WORD_BYTES){80},					// source port
				TCP_FLAG_SYN_V|TCP_FLAG_ACK_V,			// flag
				1,						// (bool)maximum segment size
				0,						// (bool)clear sequence ack number
				1,						// (bool)calculate new seq and seqack number
				0,						// tcp data length
				dest_mac,		// server mac address
				dest_ip );		// server ip address
			flag1.bits.syn_is_received = 1;
			return;
		}

		if ( (rxtx_buffer [ TCP_FLAGS_P ] & TCP_FLAG_ACK_V) )
		{
			// get tcp data length
			dlength = tcp_get_dlength( rxtx_buffer );
			if ( dlength == 0 )
			{
				// finack, answer with ack
				if ( (rxtx_buffer[TCP_FLAGS_P] & TCP_FLAG_FIN_V) )
				{
//					tcp_send_ack ( rxtx_buffer, dest_mac, dest_ip );
					tcp_send_packet (
						rxtx_buffer,
						(WORD_BYTES){dest_port},
						(WORD_BYTES){80},						// source port
						TCP_FLAG_ACK_V,			// flag
						0,						// (bool)maximum segment size
						0,						// (bool)clear sequence ack number
						1,						// (bool)calculate new seq and seqack number
						0,						// tcp data length
						dest_mac,		// server mac address
						dest_ip );		// server ip address
				}
				return;
			}
			// get avr ip address from request and set to new avr ip address			if ( http_get_variable ( rxtx_buffer, dlength, PSTR( "aip" ), generic_buf ) )
			{
				if ( http_get_ip ( generic_buf, (BYTE*)&avr_ip ) == 4 )
					eeprom_write_block ( &avr_ip, ee_avr_ip, 4 );
				eeprom_read_block ( &avr_ip, ee_avr_ip, 4 );
			}
			// get server ip address from request and set to new server ip address
			if ( http_get_variable ( rxtx_buffer, dlength, PSTR( "sip" ), generic_buf ) )
			{
				if ( http_get_ip ( generic_buf, (BYTE*)&server_ip ) == 4 )
					eeprom_write_block ( &server_ip, ee_server_ip, 4 );
				eeprom_read_block ( &server_ip, ee_server_ip, 4 );
			}
			// get LED1 on/of command
			if ( http_get_variable ( rxtx_buffer, dlength, PSTR( "l1" ), generic_buf ) )
			{
				if ( generic_buf[0] == '0' )
					LED_PORT |= _BV ( LED_PIN1 );
				else
					LED_PORT &= ~_BV ( LED_PIN1 );
			}
			// get LED1 on/of command
			if ( http_get_variable ( rxtx_buffer, dlength, PSTR( "l2" ), generic_buf ) )
			{
				if ( generic_buf[0] == '0' )
					LED_PORT |= _BV ( LED_PIN2 );
				else
					LED_PORT &= ~_BV ( LED_PIN2 );
			}
			// get LCD string and show on first line
			if ( http_get_variable ( rxtx_buffer, dlength, PSTR( "lcd1" ), generic_buf ) )
			{
				urldecode ( generic_buf );
				lcd_putc ( '\f' );
				lcd_print ( generic_buf );
				flag1.bits.lcd_busy = 1;
			}
			// get LCD string and show on second line
			if ( http_get_variable ( rxtx_buffer, dlength, PSTR( "lcd2" ), generic_buf ) )
			{
				urldecode ( generic_buf );
				lcd_putc ( '\n' );
				lcd_print ( generic_buf );
				flag1.bits.lcd_busy = 1;
			}
			// get send temparature to server configuration
			if ( http_get_variable ( rxtx_buffer, dlength, PSTR( "tc" ), generic_buf ) )
			{
				// enable or disable send temparature
				if ( http_get_variable ( rxtx_buffer, dlength, PSTR( "en" ), generic_buf ) )
					count_time_temp[0] = 1;
				else
					count_time_temp[0] = 0;
				// get hour
				if ( http_get_variable ( rxtx_buffer, dlength, PSTR( "h" ), generic_buf ) )
				{
					count_time_temp[1] = (generic_buf[0] - '0') * 10;
					count_time_temp[1] = count_time_temp[1] + (generic_buf[1] - '0');
				}
				// get minute
				if ( http_get_variable ( rxtx_buffer, dlength, PSTR( "m" ), generic_buf ) )
				{
					count_time_temp[2] = (generic_buf[0] - '0') * 10;
					count_time_temp[2] = count_time_temp[2] + (generic_buf[1] - '0');
				}
				// write config to eeprom
				eeprom_write_block ( count_time_temp, ee_count_time, 3 );
				eeprom_read_block ( count_time, ee_count_time, 3 );
				count_time[3] = 0;
			}

			// print webpage
			dlength = http_home( rxtx_buffer );
			// send ack before send data
//			tcp_send_ack ( rxtx_buffer, dest_mac, dest_ip );
			tcp_send_packet (
						rxtx_buffer,
						(WORD_BYTES){dest_port},
						(WORD_BYTES){80},						// source port
						TCP_FLAG_ACK_V,			// flag
						0,						// (bool)maximum segment size
						0,						// (bool)clear sequence ack number
						1,						// (bool)calculate new seq and seqack number
						0,						// tcp data length
						dest_mac,		// server mac address
						dest_ip );		// server ip address
			// send tcp data
//			tcp_send_data ( rxtx_buffer, dest_mac, dest_ip, dlength );
			tcp_send_packet (
						rxtx_buffer,
						(WORD_BYTES){dest_port},
						(WORD_BYTES){80},						// source port
						TCP_FLAG_ACK_V | TCP_FLAG_PSH_V | TCP_FLAG_FIN_V,			// flag
						0,						// (bool)maximum segment size
						0,						// (bool)clear sequence ack number
						0,						// (bool)calculate new seq and seqack number
						dlength,				// tcp data length
						dest_mac,		// server mac address
						dest_ip );		// server ip address
			flag1.bits.syn_is_received = 0;
		}		
	}
}
//********************************************************************************************
//
// Function : http_get_ip
// Description : Get IP address from buffer (stored after call http_get_variable function)
// example after call http_get_variable function ip address (ascii) has been stored in buffer
// 10.1.1.1 (ascii), http_get_ip function convert ip address in ascii to binary and stored
// in BYTE *dest
//
//********************************************************************************************
unsigned char http_get_ip ( unsigned char *buf, BYTE *dest )
{
	unsigned char i, ch, digit, temp;

	i = 0;
	digit = 1;
	temp = 0;

	while ( 1 )
	{
		ch = *buf++;

		if ( ch >= '0' && ch <= '9' )
		{
			ch = ch - '0';
			temp = (temp * digit) + ch;
			digit *= 10;
		}
		else if ( ch == '.' || ch == '\0' )
		{
			dest[ i ] = temp;
			i++;
			digit = 1;
			temp = 0;
		}
		else
		{
			return 0;
		}
		if ( i == 4 )
			return i;
	}
}
//********************************************************************************************
//
// Function : http_get_variable
// Description : Get http variable from GET method, example http://10.1.1.1/?pwd=123456
//		when you call http_get_variable with val_key="pwd", then function stored "123456"
//		to dest buffer.
//
//********************************************************************************************
BYTE http_get_variable ( BYTE *rxtx_buffer, WORD dlength, PGM_P val_key, BYTE *dest )

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩一区二区在线观看 | 99r国产精品| 久久成人麻豆午夜电影| 久久精品国产**网站演员| 全国精品久久少妇| 麻豆一区二区三区| 久久国产精品区| 狠狠色狠狠色综合| 国产裸体歌舞团一区二区| 国产精品一区二区男女羞羞无遮挡| 激情文学综合网| 国产精品自在欧美一区| 国产另类ts人妖一区二区| 国产成人免费在线观看| 成人h动漫精品一区二区| 成人午夜激情影院| 97aⅴ精品视频一二三区| 99国产精品国产精品久久| 欧美综合久久久| 7777精品伊人久久久大香线蕉| 欧美日本视频在线| 欧美成人精品福利| 亚洲国产精品成人综合 | 国产91精品在线观看| 成人激情午夜影院| 色婷婷综合五月| 欧美日韩电影在线| 久久男人中文字幕资源站| 欧美国产欧美综合| 亚洲国产另类精品专区| 免费在线视频一区| 丁香亚洲综合激情啪啪综合| 在线免费视频一区二区| 欧美精品乱码久久久久久| 欧美精品一区二区三区高清aⅴ| 久久久99精品免费观看不卡| 亚洲欧洲国产日韩| 午夜精品久久久久影视| 国产成人在线网站| 欧美亚州韩日在线看免费版国语版| 9191成人精品久久| 中文乱码免费一区二区| 亚洲sss视频在线视频| 国产一区二三区| 一本大道av一区二区在线播放| 6080亚洲精品一区二区| 国产欧美va欧美不卡在线| 一区二区三区四区视频精品免费 | 蜜臀av一区二区三区| 国产麻豆9l精品三级站| 欧美伊人精品成人久久综合97 | 亚洲成人精品一区二区| 国产精一区二区三区| 欧美日韩亚洲综合一区| 欧美—级在线免费片| 日韩不卡一二三区| 色综合久久88色综合天天6| 精品国产乱码久久久久久图片 | 精品成人一区二区三区四区| 亚洲色大成网站www久久九九| 麻豆视频一区二区| 一本色道久久综合狠狠躁的推荐| 精品久久久久久久一区二区蜜臀| 亚洲视频 欧洲视频| 精品亚洲成a人在线观看| 欧日韩精品视频| 国产精品无码永久免费888| 秋霞电影一区二区| 欧美在线free| 国产精品视频一二三| 久久99精品一区二区三区三区| 色国产精品一区在线观看| 欧美韩国日本不卡| 国产一区二区精品久久91| 欧美日本高清视频在线观看| 国产精品久久国产精麻豆99网站| 免费久久99精品国产| 欧美系列一区二区| 日韩码欧中文字| 国产成人一级电影| 久久综合久久鬼色中文字| 青青草国产精品97视觉盛宴| 欧美日韩一区小说| 一区二区三区加勒比av| av资源站一区| 国产精品三级av| 国产河南妇女毛片精品久久久| 日韩精品在线网站| 麻豆一区二区99久久久久| 欧美剧情电影在线观看完整版免费励志电影| 中文字幕一区二区三区视频| 国产精品影视网| 2024国产精品| 狠狠色丁香久久婷婷综| 日韩午夜三级在线| 麻豆精品国产91久久久久久| 日韩一区二区在线看| 日本特黄久久久高潮| 91精品国产综合久久久久久| 五月天久久比比资源色| 欧美日韩免费一区二区三区| 一区二区在线电影| 91久久免费观看| 亚洲成人在线网站| 欧美精品国产精品| 免费观看一级欧美片| 欧美成人激情免费网| 国产一区二区三区免费在线观看| 精品国产凹凸成av人网站| 极品少妇xxxx偷拍精品少妇| 久久免费美女视频| 成人激情小说网站| 亚洲精品伦理在线| 欧美日韩视频专区在线播放| 日韩av不卡一区二区| 精品国产3级a| 国产成人av福利| 亚洲欧美一区二区在线观看| 日本乱码高清不卡字幕| 亚洲图片欧美一区| 欧美一级免费观看| 国产专区综合网| 欧美国产激情一区二区三区蜜月| a亚洲天堂av| 五月婷婷激情综合| 26uuu欧美| 不卡av在线网| 亚洲国产综合人成综合网站| 91精品国产美女浴室洗澡无遮挡| 蜜桃一区二区三区四区| 国产欧美日韩激情| 欧美制服丝袜第一页| 免费一级欧美片在线观看| 久久久精品2019中文字幕之3| 99久久久久久| 天天做天天摸天天爽国产一区| 精品国产一区二区三区久久影院| 成人av资源在线| 午夜婷婷国产麻豆精品| 久久男人中文字幕资源站| 91麻豆免费观看| 免费一级欧美片在线观看| 国产精品乱码久久久久久| 欧美午夜一区二区| 国产麻豆午夜三级精品| 亚洲欧美日韩国产成人精品影院 | 久久伊99综合婷婷久久伊| 99久久婷婷国产| 蜜桃在线一区二区三区| 国产精品美女一区二区三区| 911国产精品| a美女胸又www黄视频久久| 麻豆一区二区三| 亚洲免费观看高清完整版在线| 欧美岛国在线观看| 在线中文字幕不卡| 国产一区二区三区四区五区美女 | 欧美影院一区二区三区| 国产中文字幕精品| 亚洲午夜精品久久久久久久久| 久久综合久久综合亚洲| 欧美日韩精品一区二区三区| 粉嫩13p一区二区三区| 日韩中文字幕av电影| 一区视频在线播放| 国产欧美日韩久久| 欧美日韩精品一区二区三区蜜桃 | www.欧美精品一二区| 免费看日韩精品| 一区二区在线观看免费| 国产欧美一区二区三区沐欲| 51精品秘密在线观看| 色女孩综合影院| 国产成人99久久亚洲综合精品| 三级欧美韩日大片在线看| 亚洲欧美视频在线观看| 国产女同性恋一区二区| 欧美大片国产精品| 欧美疯狂性受xxxxx喷水图片| 成人高清av在线| 九色|91porny| 美女一区二区三区| 亚洲成人你懂的| 亚洲猫色日本管| 国产精品电影一区二区三区| 久久久天堂av| 久久伊人蜜桃av一区二区| 欧美一区二区免费观在线| 欧美亚洲国产bt| 欧美中文字幕一二三区视频| 91尤物视频在线观看| 成人午夜碰碰视频| 国产传媒一区在线| 国产精品538一区二区在线| 麻豆精品新av中文字幕| 日本在线播放一区二区三区| 午夜a成v人精品| 日日夜夜免费精品| 午夜精品一区二区三区免费视频| 亚洲一区电影777|