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

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

?? tftps.c

?? 在freescale 的ne64上開發的源代碼
?? C
字號:
/*
 *Copyright (c) 2000-2002 Viola Systems Ltd.
 *All rights reserved.
 *
 *Redistribution and use in source and binary forms, with or without
 *modification, are permitted provided that the following conditions
 *are met:
 *
 *1. Redistributions of source code must retain the above copyright
 *notice, this list of conditions and the following disclaimer.
 *
 *2. Redistributions in binary form must reproduce the above copyright
 *notice, this list of conditions and the following disclaimer in the
 *documentation and/or other materials provided with the distribution.
 *
 *3. The end-user documentation included with the redistribution, if
 *any, must include the following acknowledgment:
 *	"This product includes software developed by Viola
 *	Systems (http://www.violasystems.com/)."
 *
 *Alternately, this acknowledgment may appear in the software itself,
 *if and wherever such third-party acknowledgments normally appear.
 *
 *4. The names "OpenTCP" and "Viola Systems" must not be used to
 *endorse or promote products derived from this software without prior
 *written permission. For written permission, please contact
 *opentcp@opentcp.org.
 *
 *5. Products derived from this software may not be called "OpenTCP",
 *nor may "OpenTCP" appear in their name, without prior written
 *permission of the Viola Systems Ltd.
 *
 *THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
 *WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 *MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 *IN NO EVENT SHALL VIOLA SYSTEMS LTD. OR ITS CONTRIBUTORS BE LIABLE
 *FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 *CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 *SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
 *BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 *WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
 *OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 *EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *====================================================================
 *
 *OpenTCP is the unified open source TCP/IP stack available on a series
 *of 8/16-bit microcontrollers, please see <http://www.opentcp.org>.
 *
 *For more information on how to network-enable your devices, or how to
 *obtain commercial technical support for OpenTCP, please see
 *<http://www.violasystems.com/>.
 */

/** \file tftps.c
 *	\brief OpenTCP TFTP server implementation
 *	\author
 *		\li Jari Lahti (jari.lahti@violasystems.com)
 *	\version 1.0
 *	\date 7.10.2002
 *	\bug
 *	\warning
 *	\todo
 *		\li Offer callback functions for TFTP server
 *
 *	OpenTCP implementation of TFTP server application. For interface
 *	functions declarations see tftps.h.
 */


#include "datatypes.h"
#include "globalvariables.h"
#include "system.h"
#include "timers.h"
#include "tcp_ip.h"
#ifdef TFTP_WANTED
#include "tftps.h"

UINT8 tftpsapp_init = 0; /**< Defines whether tftps_init has already been invoked or not */


/* TFTPS states			*/

#define TFTPS_STATE_ENABLED		1
#define TFTPS_STATE_CONNECTED	2



/* TFTP Error codes		*/

#define	TFTPS_NOTDEFINED			0	/* Not Definite Error 		*/
#define	TFTPS_ACCESSVIOLATION	2	/* Access Violation	Error	*/
#define	TFTPS_ILLEGALOPERATION	4	/* Not supported Opcode		*/


/* TFTP Opcodes		*/

#define	TFTPS_OPCODE_WRQ			2	/* Packet is Write Request	*/
#define	TFTPS_OPCODE_DATA		3	/* Data Packet				*/
#define TFTPS_OPCODE_ACK			4	/* ACK Packet				*/
#define TFTPS_OPCODE_ERROR		5	/* Error Packet				*/

/**
 * 	\brief TFTP server state information
 *
 *	tftps variable holds various information that the tftp server
 *  needs for proper operation. These include server state, socket handle,
 *	timer handle, remote IP address and port number of the host we're
 *	communicating with, retransmit counter and TFTP block number.
 */
struct
{
	UINT8 	state;
	INT8	sochandle;
	UINT16	tmrhandle;
	UINT32 	remip;
	UINT16 	remport;
	UINT16	blocknumber;
	UINT32 	bytecount;
	UINT8 	retries;

} tftps;



/** \brief Initializes TFTP server
 * 	\author
 *		\li Jari Lahti (jari.lahti@violasystems.com)
 *	\date 19.07.2002
 *	\return
 *		\li -1 - Error
 *		\li >=0 - OK, server intialized
 *
 *	This function should be called before the TFTP Server application
 *	is used to set the operating parameters of it
 */
INT8 tftps_init (void){
	/* Already initialized?	*/

	if(tftpsapp_init)
		return(1);

	/* Get socket handle		*/

	tftps.sochandle = udp_getsocket(0, tftps_eventlistener, UDP_OPT_SEND_CS | UDP_OPT_CHECK_CS);

	if(tftps.sochandle < 0)
		return(-1);

	/* Put it to listening mode	*/

	if( udp_open(tftps.sochandle, TFTPS_SERVERPORT) < 0 )
		return(-1);

	/* Get timer handle			*/

	tftps.tmrhandle = get_timer();

	tftps.state = TFTPS_STATE_ENABLED;
	tftps.remip = 0;
	tftps.remport = 0;
	tftps.retries = 0;
	tftps.blocknumber = 0;
	tftps.bytecount = 0;
	tftpsapp_init = 1;

	return(1);

}

/********************************************************************************
Function:		tftps_run

Parameters:		void

Return val:		void

Date:			7.10.2002

Desc:			The main thread of TFTP server that should be called periodically
*********************************************************************************/

void tftps_run (void)
{
	if(tftpsapp_init == 0)
		return;

	/* Check for timeouts	*/

	if(tftps.state == TFTPS_STATE_CONNECTED) {
		if(check_timer((UINT8)(tftps.tmrhandle)) == 0)
			tftps_deletesocket();
	}

}

INT32 tftps_eventlistener (INT8 cbhandle, UINT8 event, UINT32 remip, UINT16 remport, UINT16 bufindex, UINT16 dlen)
{
	UINT16 opcode;
	UINT16 i;
	UINT8 ch;
	UINT16 u16temp;
	UINT8 fname[TFTPS_FILENAME_MAXLEN];

  event++;

	if(tftpsapp_init == 0)
		return(-1);

	if(cbhandle != tftps.sochandle)
		return(-1);

	/* If we are on other state than enabled, check that we are talking with the same gyu	*/

	if(	tftps.state != TFTPS_STATE_ENABLED)	{
		if(remip != tftps.remip)
			return(-1);
		if(remport != tftps.remport)
			return(-1);
	}

	if(dlen < 2)
		return(-1);

	/* Bind socket	*/

	tftps.remip = remip;
	tftps.remport = remport;

	/* Get information	*/

	NETWORK_RECEIVE_INITIALIZE(bufindex);

	opcode = RECEIVE_NETWORK_B();
	opcode <<= 8;
	opcode |= RECEIVE_NETWORK_B();

	dlen -= 2;

	/* Process it	*/

	switch(opcode) {
		case TFTPS_OPCODE_WRQ:							/* Write request?	*/

			/* Get filename	*/

			fname[0] = '\0';

			for(i=0; i<dlen; i++) {
				if(i >= TFTPS_FILENAME_MAXLEN) {
					tftps_senderror(TFTPS_NOTDEFINED);
					tftps_deletesocket();
					return(1);
				}

				ch = RECEIVE_NETWORK_B();

				fname[i] = ch;

				if(ch == '\0') {
					i++;
					break;
				}
			}

			dlen -= i;
			/* !!!!!!!!!!!!!!!!!!!!!!!!	*/
			/* Check here the filename	*/
			/* if NOT OK, RETURN 		*/
			/* !!!!!!!!!!!!!!!!!!!!!!!! */

			/* Check mode, only octet mode is supported	*/

			if(dlen < 6) {
				tftps_senderror(TFTPS_NOTDEFINED);
				tftps_deletesocket();
				return(1);
			}

			if( (RECEIVE_NETWORK_B() != 'o') || (RECEIVE_NETWORK_B() != 'c') || (RECEIVE_NETWORK_B() != 't') ||
				(RECEIVE_NETWORK_B() != 'e') || (RECEIVE_NETWORK_B() != 't') || (RECEIVE_NETWORK_B() != '\0')	) {
				tftps_senderror(TFTPS_NOTDEFINED);
				tftps_deletesocket();
				return(1);
			}

			/* All OK, send ACK	*/

			tftps.state = TFTPS_STATE_CONNECTED;
			tftps.blocknumber = 0;
			tftps.bytecount = 0;
			tftps.retries = TFTPS_DEF_RETRIES;
			init_timer((UINT8)(tftps.tmrhandle), TFTPS_TIMEOUT*TIMERTIC);

			tftps_sendack();

			tftps.blocknumber++;

			return(1);


		case TFTPS_OPCODE_DATA:											/* Data Packet ? */

			if(tftps.state != TFTPS_STATE_CONNECTED) {
				tftps_senderror(TFTPS_NOTDEFINED);
				tftps_deletesocket();
				return(1);
			}

			if(dlen < 2) {
				tftps_senderror(TFTPS_NOTDEFINED);
				tftps_deletesocket();
				return(1);
			}

			/* Get block number	*/

			u16temp = RECEIVE_NETWORK_B();
			u16temp <<= 8;
			u16temp |= RECEIVE_NETWORK_B();

			dlen -= 2;

			if( (u16temp < tftps.blocknumber) && (tftps.blocknumber > 0) ) {
				/* Duplicate msg, send ACK again	*/

				if( tftps.retries > 0 ) {
					tftps.retries--;
					tftps.blocknumber--;
					tftps_sendack();
					tftps.blocknumber++;
				} else {
					tftps_senderror(TFTPS_NOTDEFINED);
					tftps_deletesocket();
				}

				return(1);
			}

			if( u16temp != tftps.blocknumber ) {
				/* Something really wrong */

				tftps_senderror(TFTPS_NOTDEFINED);
				tftps_deletesocket();
				return(1);
			}

			/* !!!!!!!!!!!!!!!!!!!!!!!!	*/
			/* Read the data here		*/
			/* !!!!!!!!!!!!!!!!!!!!!!!!	*/

			if( dlen < 512 ) {
				/* Other side Wants to close */

				tftps_sendack();
				tftps_deletesocket();
				return(1);
			}

			/* All OK	*/

			tftps.retries = TFTPS_DEF_RETRIES;
			init_timer((UINT8)(tftps.tmrhandle), TFTPS_TIMEOUT*TIMERTIC);
			tftps_sendack();
			tftps.blocknumber++;

			return(1);

		case TFTPS_OPCODE_ERROR:

			tftps_deletesocket();

			return(1);

		default:

			/* Unsupported Opcode, Send error */

			tftps_senderror(TFTPS_ILLEGALOPERATION);
			tftps_deletesocket();

			return(1);
	}

}


void tftps_sendack (void)
{
	/* Send a TFTP ACK packet */

	net_buf[UDP_APP_OFFSET + 0] = 0;		/* Opcode	*/
	net_buf[UDP_APP_OFFSET + 1] = 4;
	net_buf[UDP_APP_OFFSET + 2] = (UINT8)(tftps.blocknumber >> 8);
	net_buf[UDP_APP_OFFSET + 3] = (UINT8)tftps.blocknumber;

	(void)udp_send(tftps.sochandle, tftps.remip, tftps.remport, &net_buf[UDP_APP_OFFSET], NETWORK_TX_BUFFER_SIZE - UDP_APP_OFFSET, 4);


}




void tftps_senderror (UINT8 errno )
{
	/* Send TFTP Error -packet */

	net_buf[UDP_APP_OFFSET + 0] = 0;		/* Opcode	*/
	net_buf[UDP_APP_OFFSET + 1] = 5;
	net_buf[UDP_APP_OFFSET + 2] = (UINT8)(tftps.blocknumber >> 8);
	net_buf[UDP_APP_OFFSET + 3] = (UINT8)tftps.blocknumber;
	net_buf[UDP_APP_OFFSET + 4] = errno;
	net_buf[UDP_APP_OFFSET + 5] = '\0';
	net_buf[UDP_APP_OFFSET + 6] = 0;

	(void)udp_send(tftps.sochandle, tftps.remip, tftps.remport, &net_buf[UDP_APP_OFFSET], NETWORK_TX_BUFFER_SIZE - UDP_APP_OFFSET, 7);

}

void tftps_deletesocket (void)
{
	/* Clear Socket Data */

	tftps.blocknumber = 0;
	tftps.state = TFTPS_STATE_ENABLED;
	tftps.retries = 0;
	tftps.remip = 0;
	tftps.remport = 0;


}
#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区视频网站| 热久久久久久久| 国产一区二区三区香蕉| 国产精品亲子乱子伦xxxx裸| 欧美性大战久久久久久久| 日本亚洲电影天堂| 亚洲天堂网中文字| 在线观看视频欧美| 成人在线视频一区二区| 午夜伊人狠狠久久| 中文字幕不卡三区| 欧美一区二区三区免费在线看| 久久激情五月婷婷| 亚洲综合免费观看高清完整版 | 91最新地址在线播放| 久色婷婷小香蕉久久| 在线观看国产日韩| 亚洲黄色免费网站| 欧美亚洲一区二区在线观看| 蜜桃视频第一区免费观看| 中文字幕日韩精品一区| 久久久久久久久久久久久久久99 | 日韩欧美精品在线视频| 一本久久a久久精品亚洲| 国产91精品精华液一区二区三区| 无吗不卡中文字幕| 亚洲成a人片在线不卡一二三区| 国产精品久久99| 国产日韩av一区二区| 久久综合视频网| 久久先锋资源网| 久久综合色播五月| xfplay精品久久| 国产网站一区二区| 欧美激情一区二区三区不卡 | 亚洲成人中文在线| 一区二区三区四区高清精品免费观看 | 国产日韩欧美高清| 337p日本欧洲亚洲大胆精品| 精品国产伦一区二区三区观看体验| 色素色在线综合| 8v天堂国产在线一区二区| 欧美日韩和欧美的一区二区| 99久久免费精品高清特色大片| 99久久国产综合精品女不卡| 91在线观看视频| 欧美老年两性高潮| 久久一区二区三区国产精品| 中文成人av在线| 一区二区视频免费在线观看| 日韩黄色免费电影| 成人免费视频视频在线观看免费| www.亚洲色图| 91精品国产综合久久福利软件| 久久精品视频免费| 亚洲主播在线观看| 青青草97国产精品免费观看| 床上的激情91.| 91精品欧美久久久久久动漫| 精品久久99ma| 亚洲第一狼人社区| 91在线视频免费91| 久久网站热最新地址| 毛片av一区二区三区| 欧美喷潮久久久xxxxx| 亚洲永久精品大片| 91激情在线视频| 亚洲免费在线视频一区 二区| 国产黑丝在线一区二区三区| 精品国产青草久久久久福利| 日本午夜精品一区二区三区电影 | 国产女主播在线一区二区| 免费观看日韩电影| 欧美一级高清片| 蜜臀精品久久久久久蜜臀 | 日韩电影一区二区三区| 欧美日韩国产美女| 图片区小说区国产精品视频| 欧美网站一区二区| 日韩中文欧美在线| 日韩欧美中文字幕精品| 久久国产剧场电影| 精品国产一区a| 国产一区二区三区综合| 国产日韩综合av| 色综合久久中文字幕| 亚洲免费观看高清完整版在线观看熊 | 亚洲国产视频直播| 欧美一区2区视频在线观看| 久久超碰97人人做人人爱| 久久亚洲综合av| 91原创在线视频| 日韩1区2区3区| 久久久国产午夜精品| 一本色道亚洲精品aⅴ| 日日摸夜夜添夜夜添亚洲女人| 日韩视频一区二区在线观看| 激情综合色综合久久| 亚洲女人****多毛耸耸8| 在线播放中文一区| 91网页版在线| 精品一区二区三区在线观看| 亚洲精品日韩专区silk| 久久午夜国产精品| 欧美精品丝袜中出| 成人高清伦理免费影院在线观看| 日韩中文字幕区一区有砖一区| 国产精品久久久久永久免费观看| 在线免费观看日韩欧美| 国产91富婆露脸刺激对白 | 日韩国产成人精品| 亚洲欧美一区二区三区久本道91| 欧美成人激情免费网| 在线观看日韩国产| av电影在线观看一区| 久久国产精品第一页| 日韩在线一二三区| 丝袜国产日韩另类美女| 亚洲国产精品精华液网站| 1024国产精品| 最新成人av在线| 亚洲男同性恋视频| 一色屋精品亚洲香蕉网站| 日本一区二区三区久久久久久久久不 | 中文字幕电影一区| 日韩欧美卡一卡二| 日韩精品一区二| 4438x亚洲最大成人网| 欧美精品免费视频| 日韩一二在线观看| 久久久久久免费毛片精品| 精品久久人人做人人爰| 久久综合久久综合亚洲| 国产午夜精品久久久久久久 | 色综合中文字幕国产| 国产69精品久久久久777| 99久久婷婷国产综合精品| 91视频一区二区三区| 欧美天堂一区二区三区| 欧美一区日本一区韩国一区| 欧美成人一区二区三区| 中文字幕精品一区二区三区精品| 中文字幕一区二区三区蜜月| 亚洲第四色夜色| 国产麻豆精品久久一二三| 国产综合久久久久影院| 一区二区三区欧美在线观看| 国产精品情趣视频| 国产欧美日本一区视频| 亚洲成人综合视频| 国产精品一区专区| 欧美日韩中文一区| 国产亚洲精品久| 亚洲五码中文字幕| 国产91丝袜在线播放0| 91精品久久久久久久91蜜桃| 久久久精品综合| 日日摸夜夜添夜夜添国产精品| 粉嫩绯色av一区二区在线观看| 9191精品国产综合久久久久久| 精品成人一区二区三区| 日韩成人一区二区| 色综合天天综合在线视频| 久久色成人在线| 久久99精品久久久| 欧美一区二区在线不卡| 亚洲欧美电影院| 成人高清av在线| 亚洲国产电影在线观看| 国产在线看一区| 久久久久一区二区三区四区| 蜜臀av一区二区| 日韩午夜精品视频| 全部av―极品视觉盛宴亚洲| 欧美日免费三级在线| 天天av天天翘天天综合网 | 国产91精品入口| 中文字幕久久午夜不卡| www.亚洲国产| 亚洲欧美激情插| 精品视频色一区| 免费观看成人av| 国产亚洲欧美激情| 高清日韩电视剧大全免费| 国产精品入口麻豆九色| www.性欧美| 午夜影院久久久| 精品国产乱码久久久久久浪潮 | 欧美视频日韩视频在线观看| 亚洲一二三专区| 精品国产亚洲在线| 97aⅴ精品视频一二三区| 亚洲午夜久久久久久久久电影网 | 日韩不卡一区二区| 国产性天天综合网| 欧美在线观看禁18| 蜜桃一区二区三区在线| 国产精品私人自拍| 欧美肥妇free| 91在线精品一区二区三区|