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

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

?? tcp.c

?? D:My DocumentszqARM壓縮包OpenSource_49.rar
?? C
字號:
//********************************************************************************************
//
// 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 );
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区三区黄视频 | 久久女同互慰一区二区三区| 2020国产精品久久精品美国| 136国产福利精品导航| 精品在线播放免费| 欧美亚男人的天堂| 日韩毛片精品高清免费| 国产精品一区免费视频| 3atv一区二区三区| 一区二区三区.www| 91色乱码一区二区三区| 久久蜜桃av一区精品变态类天堂 | 一色屋精品亚洲香蕉网站| 精品一区二区影视| 3atv在线一区二区三区| 亚洲黄色av一区| a级高清视频欧美日韩| 久久久亚洲高清| 欧美aⅴ一区二区三区视频| 欧美性猛片xxxx免费看久爱| 综合激情成人伊人| www.亚洲人| 中文字幕中文在线不卡住| 国产91在线看| 国产欧美日韩麻豆91| 国产精品66部| 中文字幕成人在线观看| 成人深夜在线观看| 国产午夜亚洲精品羞羞网站| 国产高清不卡一区| 日本一区二区久久| 国产91精品欧美| 中文字幕在线播放不卡一区| 91丨九色porny丨蝌蚪| 一区二区三区在线免费播放| 在线免费精品视频| 午夜av电影一区| 91精品蜜臀在线一区尤物| 奇米综合一区二区三区精品视频| 欧美精品久久一区| 久久精品99国产精品| 久久综合久久综合久久| 国产精品69毛片高清亚洲| 国产精品国产三级国产普通话三级 | 日韩久久久久久| 国产一区二区三区四区五区入口 | 91国在线观看| 亚洲成人1区2区| 欧美一二三四区在线| 久久99久久久欧美国产| 久久综合久久久久88| 成人午夜av影视| 一二三区精品福利视频| 日韩欧美在线不卡| 成人中文字幕合集| 一区二区成人在线视频| 日韩欧美www| 99精品热视频| 天天色 色综合| 国产一区二区中文字幕| 国产精品久久久久影院亚瑟 | 免费在线观看成人| 26uuu成人网一区二区三区| 国产凹凸在线观看一区二区| 综合在线观看色| 日韩欧美一级片| 9i看片成人免费高清| 亚洲第一狼人社区| 久久日韩粉嫩一区二区三区| av在线不卡观看免费观看| 日日欢夜夜爽一区| 中文文精品字幕一区二区| 在线观看国产日韩| 国产一区二区在线观看免费| 亚洲精品国产精品乱码不99| 日韩免费看的电影| 91美女片黄在线| 麻豆精品精品国产自在97香蕉| 中文字幕一区视频| 日韩西西人体444www| 色美美综合视频| 国产成人免费视频网站高清观看视频 | 亚洲第一成年网| 国产精品理论在线观看| 精品免费国产一区二区三区四区| 在线视频欧美精品| 成人av在线一区二区三区| 看国产成人h片视频| 亚洲成a天堂v人片| 亚洲天堂网中文字| 国产欧美日韩综合精品一区二区| 91精品国产乱| 欧美色综合天天久久综合精品| 国产精品综合一区二区三区| 免费亚洲电影在线| 爽好久久久欧美精品| 一区二区三区视频在线观看| 中文字幕一区免费在线观看| 国产欧美一区二区精品性| 久久人人爽人人爽| 精品国产成人系列| 精品国产一区二区精华| 日韩一区二区在线观看| 欧美日韩一区二区三区四区五区 | 精品日本一线二线三线不卡| 欧美精选一区二区| 欧美另类变人与禽xxxxx| 91日韩一区二区三区| 97精品久久久久中文字幕 | 夫妻av一区二区| 国产成人免费在线观看| 国产成人啪午夜精品网站男同| 激情六月婷婷久久| 国产一区二区三区四| 韩国av一区二区三区四区| 激情综合网最新| 久久国产欧美日韩精品| 国内成人精品2018免费看| 国产一区二区三区在线观看免费 | 欧美午夜片在线看| 91成人国产精品| 欧美亚洲一区三区| 欧美猛男gaygay网站| 911精品产国品一二三产区| 欧美精品 日韩| 精品久久一区二区| 欧美激情中文字幕| 亚洲靠逼com| 亚洲777理论| 免费成人你懂的| 从欧美一区二区三区| 91在线免费看| 91麻豆精品国产91久久久使用方法 | 色综合色综合色综合色综合色综合| 91麻豆国产福利在线观看| 欧美色手机在线观看| 欧美一级夜夜爽| 国产欧美精品日韩区二区麻豆天美| 国产精品网友自拍| 亚洲一区二区三区四区在线| 美女视频免费一区| 成人开心网精品视频| 色女孩综合影院| 欧美xingq一区二区| 《视频一区视频二区| 天堂av在线一区| 国产盗摄一区二区三区| 欧美最猛性xxxxx直播| 精品国产乱码久久久久久浪潮| 亚洲欧洲av另类| 免费成人深夜小野草| aaa国产一区| 日韩精品一区二区三区在线播放| 欧美国产日本视频| 亚洲va欧美va人人爽| 国产激情精品久久久第一区二区| 91色视频在线| 久久综合999| 日韩精品色哟哟| 北条麻妃国产九九精品视频| 日韩欧美自拍偷拍| 亚洲精品国产高清久久伦理二区| 紧缚奴在线一区二区三区| 色婷婷激情综合| 欧美激情综合五月色丁香小说| 五月开心婷婷久久| 99久久国产综合精品女不卡| 精品久久久久一区二区国产| 亚洲午夜电影在线| 99视频超级精品| 久久久99精品久久| 久久精品国产第一区二区三区| 色综合色综合色综合色综合色综合 | 国产色产综合色产在线视频| 亚洲成a人v欧美综合天堂下载 | 欧美日韩在线不卡| 国产精品乱码一区二区三区软件| 激情综合一区二区三区| 欧美精品vⅰdeose4hd| 亚洲精品中文在线观看| 成人福利视频在线| 久久午夜羞羞影院免费观看| 免费看精品久久片| 91麻豆精品国产91久久久久| 亚洲国产综合人成综合网站| 一本大道av伊人久久综合| 欧美高清在线一区二区| 国产伦精品一区二区三区免费迷 | 毛片基地黄久久久久久天堂| 欧美亚洲高清一区二区三区不卡| 亚洲欧洲国产专区| av中文字幕不卡| 日韩一区在线看| 成人av在线影院| 亚洲色图丝袜美腿| 色婷婷香蕉在线一区二区| 一区二区三区鲁丝不卡| 欧美在线啊v一区| 天堂久久一区二区三区| 91精品综合久久久久久|