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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? tcp.c

?? 此為ATMEGA32+ENC28J60以太網(wǎng)通信很好的代碼,含液晶 按鍵 HTTP WENB頁(yè)面顯示 已經(jīng)調(diào)試通過(guò).
?? C
字號(hào):
//********************************************************************************************
//
// File : tcp.c implement for Transmission Control 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"
//********************************************************************************************
//
// +------------+-----------+------------+----------+
// + MAC header + IP header + TCP header + Data ::: +
// +------------+-----------+------------+----------+
//
// TCP Header
//
// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
// +00+01+02+03+04+05+06+07+08+09+10+11+12+13+14+15+16+17+18+19+20+21+22+23+24+25+26+27+28+29+30+31+
// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
// +               Source Port                     +                Destination Port               +
// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
// +                                        Sequence Number                                        +
// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
// +                                     Acknowledgment Number                                     +
// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
// +Data Offset+reserved+   ECN  +  Control Bits   +                  Window size                  +
// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
// +                 Checksum                      +                Urgent Pointer                 +
// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
// +                                   Options and padding :::                                     +
// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
// +                                             Data :::                                          +
// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
//
//********************************************************************************************

// global variables ***********************************************************************
static BYTE seqnum=0xa; // my initial tcp sequence number
//static DWORD_BYTES tcp_sequence_number;

//*****************************************************************************************
//
// Function : tcp_get_dlength
// Description : claculate tcp received data length
//
//*****************************************************************************************
WORD tcp_get_dlength ( BYTE *rxtx_buffer )
{
	int dlength, hlength;

	dlength = ( rxtx_buffer[ IP_TOTLEN_H_P ] <<8 ) | ( rxtx_buffer[ IP_TOTLEN_L_P ] );
	dlength -= sizeof(IP_HEADER);
	hlength = (rxtx_buffer[ TCP_HEADER_LEN_P ]>>4) * 4; // generate len in bytes;
	dlength -= hlength;
	if ( dlength <= 0 )
		dlength=0;
	
	return ((WORD)dlength);
}
//*****************************************************************************************
//
// Function : tcp_get_hlength
// Description : claculate tcp received header length
//
//*****************************************************************************************
BYTE tcp_get_hlength ( BYTE *rxtx_buffer )
{
	return ((rxtx_buffer[ TCP_HEADER_LEN_P ]>>4) * 4); // generate len in bytes;
}
//********************************************************************************************
//
// Function : tcp_puts_data_p
// Description : puts data from program memory to tx buffer
//
//********************************************************************************************
WORD tcp_puts_data_p ( BYTE *rxtx_buffer, PGM_P data, WORD offset )
{
	BYTE ch;
		while( (ch = pgm_read_byte(data++)) )	{		rxtx_buffer[ TCP_DATA_P + offset ] = ch;
		offset++;	}

	return offset;
}
//********************************************************************************************
//
// Function : tcp_puts_data
// Description : puts data from RAM to tx buffer
//
//********************************************************************************************
WORD tcp_puts_data ( BYTE *rxtx_buffer, BYTE *data, WORD offset )
{
	while( *data )	{		rxtx_buffer[ TCP_DATA_P + offset ] = *data++;
		offset++;	}

	return offset;
}
//********************************************************************************************
//
// Function : tcp_send_packet
// Description : send tcp packet to network.
//
//********************************************************************************************
void tcp_send_packet (
	BYTE *rxtx_buffer,
	WORD_BYTES dest_port,
	WORD_BYTES src_port,
	BYTE flags,
	BYTE max_segment_size,
	BYTE clear_seqack,
	WORD next_ack_num,
	WORD dlength,
	BYTE *dest_mac,
	BYTE *dest_ip )
{
	BYTE i, tseq;
	WORD_BYTES ck;
	
	// generate ethernet header
	eth_generate_header ( rxtx_buffer, (WORD_BYTES){ETH_TYPE_IP_V}, dest_mac );		

	// sequence numbers:
	// add the rel ack num to SEQACK
	if ( next_ack_num )
	{
		for( i=4; i>0; i-- )
		{
			next_ack_num = rxtx_buffer [ TCP_SEQ_P + i - 1] + next_ack_num;
			tseq = rxtx_buffer [ TCP_SEQACK_P + i - 1];
			rxtx_buffer [ TCP_SEQACK_P + i - 1] = 0xff & next_ack_num;

			// copy the acknum sent to us into the sequence number
			rxtx_buffer[ TCP_SEQ_P + i - 1 ] = tseq;

			next_ack_num >>= 8;
		}
	}
	
	// initial tcp sequence number
	// setup maximum segment size
	// require to setup first packet is receive or transmit only
	if ( max_segment_size )
	{
		// initial sequence number
		rxtx_buffer[ TCP_SEQ_P + 0 ] = 0;		rxtx_buffer[ TCP_SEQ_P + 1 ] = 0;		rxtx_buffer[ TCP_SEQ_P + 2 ] = seqnum;		rxtx_buffer[ TCP_SEQ_P + 3 ] = 0;		seqnum += 2;

		// setup maximum segment size		rxtx_buffer[ TCP_OPTIONS_P + 0 ] = 2;
		rxtx_buffer[ TCP_OPTIONS_P + 1 ] = 4;
		rxtx_buffer[ TCP_OPTIONS_P + 2 ] = HIGH(1408);
		rxtx_buffer[ TCP_OPTIONS_P + 3 ] = LOW(1408);
		// setup tcp header length 24 bytes: 6*32/8 = 24		rxtx_buffer[ TCP_HEADER_LEN_P ] = 0x60;
		dlength += 4;
	}
	else
	{
		// no options: 20 bytes: 5*32/8 = 20		rxtx_buffer[ TCP_HEADER_LEN_P ] = 0x50;
	}

	// generate ip header and checksum
	ip_generate_header ( rxtx_buffer, (WORD_BYTES){(sizeof(IP_HEADER) + sizeof(TCP_HEADER) + dlength)}, IP_PROTO_TCP_V, dest_ip );
	
	// clear sequence ack number before send tcp SYN packet
	if ( clear_seqack )
	{
		rxtx_buffer[ TCP_SEQACK_P + 0 ] = 0;		rxtx_buffer[ TCP_SEQACK_P + 1 ] = 0;		rxtx_buffer[ TCP_SEQACK_P + 2 ] = 0;		rxtx_buffer[ TCP_SEQACK_P + 3 ] = 0;
	}
		
	// setup tcp flags
	rxtx_buffer [ TCP_FLAGS_P ] = flags;
	
	// setup destination port
	rxtx_buffer [ TCP_DST_PORT_H_P ] = dest_port.byte.high;
	rxtx_buffer [ TCP_DST_PORT_L_P ] = dest_port.byte.low;

	// setup source port
	rxtx_buffer [ TCP_SRC_PORT_H_P ] = src_port.byte.high;
	rxtx_buffer [ TCP_SRC_PORT_L_P ] = src_port.byte.low;

	// setup maximum windows size
	rxtx_buffer [ TCP_WINDOWSIZE_H_P ] = HIGH((MAX_RX_BUFFER-sizeof(IP_HEADER)-sizeof(ETH_HEADER)));
	rxtx_buffer [ TCP_WINDOWSIZE_L_P ] = LOW((MAX_RX_BUFFER-sizeof(IP_HEADER)-sizeof(ETH_HEADER)));
	
	// setup urgend pointer (not used -> 0)
	rxtx_buffer[ TCP_URGENT_PTR_H_P ] = 0;
	rxtx_buffer[ TCP_URGENT_PTR_L_P ] = 0;

	// clear old checksum and calculate new checksum
	rxtx_buffer[ TCP_CHECKSUM_H_P ] = 0;
	rxtx_buffer[ TCP_CHECKSUM_L_P ] = 0;
	// This is computed as the 16-bit one's complement of the one's complement 
	// sum of a pseudo header of information from the 
	// IP header, the TCP header, and the data, padded 
	// as needed with zero bytes at the end to make a multiple of two bytes. 
	// The pseudo header contains the following fields:
	//
	// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
	// +00+01+02+03+04+05+06+07+08+09+10+11+12+13+14+15+16+17+18+19+20+21+22+23+24+25+26+27+28+29+30+31+
	// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
	// +                                       Source IP address                                       +
	// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
	// +                                     Destination IP address                                    +
	// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
	// +           0           +      IP Protocol      +                    Total length               +
	// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
	ck.word = software_checksum( &rxtx_buffer[IP_SRC_IP_P], sizeof(TCP_HEADER)+dlength+8, IP_PROTO_TCP_V + sizeof(TCP_HEADER) + dlength );
	rxtx_buffer[ TCP_CHECKSUM_H_P ] = ck.byte.high;
	rxtx_buffer[ TCP_CHECKSUM_L_P ] = ck.byte.low;

	// send packet to ethernet media
	enc28j60_packet_send ( rxtx_buffer, sizeof(ETH_HEADER)+sizeof(IP_HEADER)+sizeof(TCP_HEADER)+dlength );
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99视频超级精品| 7777精品伊人久久久大香线蕉的| 亚洲精品国产视频| 欧美大胆人体bbbb| 色婷婷综合久色| 国产成人午夜精品5599| 亚洲一区自拍偷拍| 国产精品热久久久久夜色精品三区| 色婷婷亚洲婷婷| 国产福利91精品| 日本亚洲免费观看| 亚洲午夜一区二区| 国产精品久久毛片a| 久久亚洲综合色| 日韩欧美一区二区不卡| 欧日韩精品视频| 一本久道中文字幕精品亚洲嫩| 久久av中文字幕片| 日本午夜一本久久久综合| 亚洲精品日韩一| 亚洲视频免费看| 国产精品免费看片| 中文字幕欧美激情一区| 精品久久久久久久久久久久包黑料| 欧美少妇一区二区| 色婷婷av一区二区三区gif| 成人性生交大片免费| 国产精品资源网| 国产综合久久久久影院| 久久草av在线| 国产在线一区二区综合免费视频| 日韩在线a电影| 天天操天天色综合| 偷拍亚洲欧洲综合| 午夜精品久久久久久久99水蜜桃| 伊人一区二区三区| 一区二区三区 在线观看视频 | 久久综合狠狠综合久久激情| 在线不卡欧美精品一区二区三区| 色哦色哦哦色天天综合| 色婷婷激情综合| 欧美日韩黄色影视| 欧美日韩一区国产| 欧美一区国产二区| 欧美一区二区在线观看| 欧美一区二区三区四区在线观看| 欧美精品在线观看播放| 一区在线观看免费| 国产精品久久久99| 亚洲精品国产第一综合99久久| 一区二区三区四区在线| 亚洲国产视频网站| 免费日韩伦理电影| 国产一区二区三区国产| 成人一区二区视频| 91浏览器在线视频| 欧美日韩一区二区三区视频| 欧美美女视频在线观看| 日韩欧美亚洲另类制服综合在线| 日韩一级片在线播放| 久久综合九色欧美综合狠狠| 国产农村妇女精品| 亚洲精品国产成人久久av盗摄 | 玖玖九九国产精品| 国产福利不卡视频| 在线免费观看日本一区| 欧美一区二区三区小说| 久久精品人人做人人综合 | 国产一区二区三区四区五区美女 | 91黄视频在线| 在线播放/欧美激情| 久久免费精品国产久精品久久久久| 久久久.com| 夜夜嗨av一区二区三区四季av| 丝袜国产日韩另类美女| 国产精品一二一区| 91国偷自产一区二区开放时间 | 欧美午夜精品一区| 精品国产免费一区二区三区香蕉| 欧美激情一区不卡| 午夜免费久久看| 国产精品99久久久久久似苏梦涵| 色婷婷av一区二区三区大白胸| 欧美一区二区三区免费观看视频| 欧美国产禁国产网站cc| 午夜精品久久久久久久久久| 国产福利一区二区| 欧美剧情电影在线观看完整版免费励志电影 | 国产福利91精品一区二区三区| 成人精品鲁一区一区二区| 在线一区二区观看| 久久久久久久久蜜桃| 亚洲国产日产av| 国产成a人亚洲精| 欧美日韩中文字幕一区| 国产三级欧美三级日产三级99 | 亚洲另类在线一区| 激情欧美一区二区三区在线观看| 91年精品国产| 国产亚洲成aⅴ人片在线观看| 亚洲国产精品自拍| 99久久精品国产精品久久| 日韩欧美高清一区| 亚洲超碰精品一区二区| 成人免费的视频| 欧美成人官网二区| 香蕉久久一区二区不卡无毒影院| av资源站一区| 久久精品一区二区三区av| 日本v片在线高清不卡在线观看| aaa亚洲精品一二三区| 欧美精品一区二区三| 秋霞成人午夜伦在线观看| 91黄色激情网站| 国产精品国产三级国产三级人妇| 久久福利资源站| 欧美一区二区成人6969| 亚洲福利视频三区| 91久色porny | 欧美日韩一级二级| 亚洲欧美电影一区二区| fc2成人免费人成在线观看播放| 久久综合色8888| 久久精品国产免费看久久精品| 欧美私模裸体表演在线观看| 亚洲欧美日韩国产综合| 成人一区二区三区在线观看| 久久综合网色—综合色88| 精品一区在线看| 亚洲成人精品一区| 欧美性xxxxxxxx| 亚洲福利国产精品| 欧美日韩国产免费一区二区| 亚洲一区二区欧美日韩| 欧美最新大片在线看| 亚洲一区二区视频在线观看| 色哟哟国产精品| 亚洲综合图片区| 欧美日本韩国一区二区三区视频| 亚洲影视在线观看| 欧美另类久久久品| 奇米影视一区二区三区| 91麻豆精品国产91久久久 | 亚洲影院久久精品| 欧美老年两性高潮| 久久国内精品自在自线400部| 日韩一二三区视频| 精品一区二区三区久久久| 精品理论电影在线观看 | 国产亚洲一区字幕| 成人小视频免费在线观看| 国产精品久久久久影院老司| 91女神在线视频| 婷婷久久综合九色综合伊人色| 欧美精品久久99| 久久99精品视频| 欧美激情一区二区三区四区| 91美女蜜桃在线| 午夜精品成人在线| 精品久久一区二区三区| 国产精品一二三四区| 1024成人网色www| 欧美日韩国产在线观看| 美女精品一区二区| 中文字幕不卡在线播放| 色婷婷久久一区二区三区麻豆| 五月综合激情婷婷六月色窝| 欧美tk—视频vk| 99精品视频免费在线观看| 亚洲成av人片在www色猫咪| 日韩免费高清av| 99re这里都是精品| 青娱乐精品在线视频| 日本一区二区免费在线| 欧美丝袜自拍制服另类| 久久成人精品无人区| 国产精品国产三级国产普通话蜜臀 | 裸体在线国模精品偷拍| 国产欧美日韩三区| 欧美日韩成人高清| 国产麻豆精品在线观看| 亚洲成人777| 欧美激情一区二区三区全黄| 在线看不卡av| 国产福利精品一区| 午夜av一区二区三区| 中文字幕国产一区| 日韩欧美精品在线| 色欧美88888久久久久久影院| 国内精品不卡在线| 五月天欧美精品| 亚洲视频图片小说| 久久你懂得1024| 69堂成人精品免费视频| 99国产精品久久久久久久久久 | 天天色图综合网| 亚洲少妇30p| 久久久精品国产免大香伊| 欧美三级电影在线看| 99热这里都是精品|