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

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

?? dns.c

?? 在freescale 的ne64上開發的源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
 *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 dns.c
 *	\brief OpenTCP DNS client implementation
 *	\author
 *		\li Vladan Jovanovic (vladan.jovanovic@violasystems.com)
 *	\version 1.0
 *	\date 10.10.2002
 *	\bug
 *	\warning
 *	\todo
 *		\li Probably should implement sending different ID with
 *		requests.
 *		\li Maybe create similar cache as for ARP ?
 *		\li <b>Definitely</b> implement DNS's IP address use as a
 *		parameter to get_host_by_name function. This would allow more
 *		flexible manipulation
 *
 *	OpenTCP DNS client implementation. API functions, data structures
 *	and constants may be found in dns.h
 */

#include "debug.h"
#include "datatypes.h"
#include "globalvariables.h"
#include "system.h"
#include "timers.h"
#include "tcp_ip.h"
#ifdef DNS_WANTED
#include "dns.h"


#define DNS_STATE_READY 	0
#define DNS_STATE_BUSY		1
#define DNS_STATE_RESEND	2	/* retransmit request */

UINT8 dns_state; /**< Current DNS state. Used to prevent multiple requests, issue retransmissions,... See DNS_STATE_* for possible values. */
INT8 dns_socket; /**< UDP socket used by the DNS resolver */
UINT8 dns_timer; /**< DNS timer handle used for retransmissions */
UINT8 dns_retries; /**< DNS retry counter used for detecting timeouts */

UINT32 dns_tmp_ip; /**< Used in many ways: as an IP address holder, for issuing requests to authorative name servers,.. */

UINT8 *dns_hostptr;	/**< Pointer to hostname that is beeing resolved. Needed for retransmissions.*/


void (*dns_event_listener)(UINT8 event, UINT32 data);

/** \brief Initialize resources needed for the DNS client
 * 	\author
 *		\li Vladan Jovanovic (vladan.jovanovic@violasystems.com)
 *	\date 10.10.2002
 *
 *	Invoke this function at startup to properly initialize DNS resources.
 *
 */
void dns_init(void){

	dns_state = DNS_STATE_READY;

	dns_socket=udp_getsocket(0 , dns_eventlistener , UDP_OPT_SEND_CS | UDP_OPT_CHECK_CS);

	if(dns_socket == -1){
		DEBUGOUT("DNS: No free UDP sockets!! \r\n");
		return;
	}

	/* open socket */
	(void)udp_open(dns_socket,DNS_UDP_PORT);

	/* now the timer. This will be used for retransmitting the requests */
	dns_timer=get_timer();

	/* TODO: if GetTimer is modified so that it doesn't reset system if
		no timers available, check return value! */

	DEBUGOUT("Initialized DNS client\r\n");

}

/** \brief Retransmits requests towards the DNS server
 * 	\author
 *		\li Vladan Jovanovic (vladan.jovanovic@violasystems.com)
 *	\date 10.10.2002
 *
 *	This is internal function and IS NOT INTENDED to be invoked by the
 *	user application. It simply checks if retransmissions should be done
 *	(when retransmissions not used yet) and if yes, sends one.
 *	Otherwise timeout error is sent to the event listener.
 */
void dns_retransmit(void){
	if(dns_retries!=0){
		dns_state=DNS_STATE_RESEND;
		dns_retries--;
		(void)get_host_by_name(dns_hostptr,dns_event_listener);
		init_timer(dns_timer,DNS_RESEND_PERIOD*TIMERTIC);
	}else{

		/* timeout happened */
		dns_state=DNS_STATE_READY;

		dns_event_listener(DNS_EVENT_ERROR,DNS_ERROR_TIMEOUT);

	}

}

/** \brief DNS client main loop
 * 	\author
 *		\li Vladan Jovanovic (vladan.jovanovic@violasystems.com)
 *	\date 10.10.2002
 *
 *	Simple main loop that checks whether DNS requests should be sent or
 *	not (based on timer timeout). If yes, and DNS is in appropriate state,
 *	dns_retransmit() function is invoked.
 */
void dns_run(void){
	if((dns_state==DNS_STATE_BUSY)||(dns_state==DNS_STATE_RESEND)){
		/* checking retransmission timer */
		if(!check_timer(dns_timer)){

			DEBUGOUT("DNS: retransmitting the request \r\n");
			/* timeout, send another one */
			dns_retransmit();

		}
	}
}

/** \brief DNS client event listener
 * 	\author
 *		\li Vladan Jovanovic (vladan.jovanovic@violasystems.com)
 *	\date 10.10.2002
 *	\param cbhandle handle of the socket this packet is intended for.
 * 	\param event event that is notified. For UDP, only UDP_EVENT_DATA.
 * 	\param ipaddr IP address of remote host who sent the UDP datagram
 * 	\param port port number of remote host who sent the UDP datagram
 * 	\param buffindex buffer index in RTL8019AS
 *	\return
 *		\li - 1 - error in processing
 *		\li 0 - DNS reply successfully processed
 *	\note
 *		\li Event listeners are NOT to be invoked directly. They are
 *		callback functions invoked by the TCP/IP stack to notify events.
 *
 *	This, of course, is where responses from DNS server are processed and
 *	checked whether they contain the IP address we requested or if they
 *	contain authorative name server to which we should proceed.
 *
 *	If we received the IP address we requested, #DNS_EVENT_SUCCESS is
 *	reported to application DNS event listener. Otherwise #DNS_EVENT_ERROR
 *	is reported.
 */
INT32 dns_eventlistener(INT8 cbhandle, UINT8 event, UINT32 ipaddr, UINT16 port, UINT16 buffindex, UINT16 datalen){
	UINT8 tmp_byte;
	UINT16 tmp_int;
	UINT8 *tmp_ptr;
	UINT8 count;
	/* it will fit in 8bits most of the time but... */
	UINT16 dns_ancount;
	UINT16 dns_nscount;
  buffindex=0;
  port=0;
  count=0;

	if(cbhandle!=dns_socket){
		DEBUGOUT("DNS: not my handle!!!!");
		return (-1);
	}

	if(ipaddr!=dns_tmp_ip){
		DEBUGOUT("DNS: received DNS but IP addr not OK!\r\n");
	}

	switch(event){
		case UDP_EVENT_DATA:
			/* only process data while not in ready state */
			if(dns_state==DNS_STATE_READY){
				DEBUGOUT("DNS: Received answer in wrong state\r\n");
				return (-1);
			}

			/* inital size checking. Every DNS reply will be bigger
				than 16 bytes */
			if(datalen<16){
				DEBUGOUT("DNS: UDP packet way to short for DNS!\r\n");
				return (-1);
			}

			/* some data received, check if it's what we're waiting for */
			tmp_int=RECEIVE_NETWORK_B();
			tmp_int=(tmp_int<<8)+RECEIVE_NETWORK_B();
			if(tmp_int!=0xaaaa){
				DEBUGOUT("DNS: ERROR: ID wrong!\r\n");
				return (-1);
			}

			tmp_byte=RECEIVE_NETWORK_B();

			if(!(tmp_byte&0x80)){
				DEBUGOUT("DNS: THIS IS NOT AN ANSWER! WE'RE NOT A DNS SERVER!\r\n");
				return (-1);
			}

			/* opcode or truncated ? */
			if(tmp_byte&0x7a){
				DEBUGOUT("DNS: Opcode not zero or message truncated. \r\n");
				dns_event_listener(DNS_EVENT_ERROR,DNS_ERROR_GENERAL);
				return (-1);
			}

			tmp_byte=RECEIVE_NETWORK_B();

			/* check RCODE */
			if((tmp_byte&0x7f)&&(tmp_byte&0x80)){
				/* RCODE not zero, and recursion is available	*/
				/* There was an error. Inform listener 			*/
				DEBUGOUT("DNS: RCODE not zero and recursion available! \r\n");
				dns_event_listener(DNS_EVENT_ERROR,tmp_byte&0x7f);
				return (-1);
			}

			/* question count == 1 ? */
			tmp_int=(((UINT16)RECEIVE_NETWORK_B())<<8);
			tmp_int+=RECEIVE_NETWORK_B();
			if(tmp_int != 1){
				DEBUGOUT("DNS: we only sent one question and received a couple of answers!!\r\n");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一卡二卡在线观看| 亚洲欧美二区三区| 久久精品一区二区三区不卡| 国产精品热久久久久夜色精品三区 | 久久综合狠狠综合| 亚洲一区二区三区四区五区黄 | 国产欧美精品一区| 亚洲精选视频在线| 久久久久久久综合狠狠综合| 亚洲激情六月丁香| 国产jizzjizz一区二区| 欧美成人a∨高清免费观看| 一区二区在线电影| 成人av电影在线网| 国产日韩影视精品| 久久99热这里只有精品| 91麻豆精品国产91久久久久| 亚洲激情成人在线| 91麻豆蜜桃一区二区三区| 国产人妖乱国产精品人妖| 久久激情五月激情| 精品日韩av一区二区| 理论片日本一区| 日韩三级免费观看| 极品瑜伽女神91| 26uuu亚洲| 精品一区二区在线观看| 日韩欧美色电影| 欧美精品视频www在线观看| 亚洲欧美电影一区二区| 成人综合日日夜夜| 欧美激情一区二区在线| 国产ts人妖一区二区| 国产蜜臀97一区二区三区| 国产精品乡下勾搭老头1| 亚洲精品一区在线观看| 黄色日韩网站视频| 国产午夜精品福利| jlzzjlzz欧美大全| 亚洲欧美在线观看| 欧美撒尿777hd撒尿| 免费看日韩精品| 精品福利一区二区三区 | 亚洲综合色网站| 欧美无砖专区一中文字| 蜜桃精品视频在线观看| 久久久青草青青国产亚洲免观| 国产一区二区三区免费在线观看| 国产精品亚洲第一区在线暖暖韩国 | 欧美最猛黑人xxxxx猛交| 亚洲日韩欧美一区二区在线| 99久精品国产| 图片区小说区区亚洲影院| 日韩女优av电影在线观看| 国产精品白丝jk白祙喷水网站| 国产精品你懂的在线欣赏| 91女厕偷拍女厕偷拍高清| 一个色综合av| 日韩免费高清视频| 91丨porny丨户外露出| 一区二区免费在线播放| 精品国产91久久久久久久妲己| 成人三级伦理片| 日日夜夜精品视频天天综合网| 欧美精品一区二区三区久久久 | 国产清纯白嫩初高生在线观看91 | 国产三级一区二区三区| 91网上在线视频| 麻豆一区二区99久久久久| 中文字幕在线免费不卡| 欧美精品日韩精品| 国产精品一二三四区| 亚洲影院免费观看| 久久久综合网站| 欧美亚洲尤物久久| 国产精品亚洲视频| 天堂成人国产精品一区| 欧美国产日韩一二三区| 91精品国产一区二区| 9人人澡人人爽人人精品| 免费一级欧美片在线观看| 亚洲女爱视频在线| 国产午夜精品美女毛片视频| 91精品国产高清一区二区三区 | 日韩国产欧美在线视频| 中文字幕在线一区免费| 日韩一区国产二区欧美三区| 91黄色免费版| 成人听书哪个软件好| 美国三级日本三级久久99| 一区二区三区在线不卡| 中文字幕第一区| 久久久精品人体av艺术| 日韩午夜中文字幕| 8x8x8国产精品| 欧美婷婷六月丁香综合色| 97精品久久久久中文字幕| 国产99久久久国产精品潘金网站| 日本网站在线观看一区二区三区| 亚洲一区二区三区四区五区黄 | 成人亚洲一区二区一| 久久精品72免费观看| 日韩电影在线观看一区| 亚洲一区二区在线免费看| 亚洲人成网站在线| 国产精品热久久久久夜色精品三区| 久久女同精品一区二区| 日韩一级二级三级| 91精品国产综合久久久久久久久久| 在线欧美日韩精品| 在线中文字幕一区二区| 色猫猫国产区一区二在线视频| 国产suv精品一区二区三区| 国产91精品免费| 不卡一区二区在线| 91无套直看片红桃| 一本一本久久a久久精品综合麻豆| 国产成人综合亚洲91猫咪| 国产91富婆露脸刺激对白| 成人午夜激情视频| 日本韩国一区二区三区| 欧美日韩免费高清一区色橹橹| 欧美日韩一区二区三区不卡| 欧美一区二区三区免费在线看| 在线播放一区二区三区| 日韩免费电影网站| 国产性色一区二区| 亚洲欧洲成人精品av97| 亚洲第一久久影院| 奇米色一区二区| 国产专区欧美精品| 成人美女在线视频| 91久久人澡人人添人人爽欧美| 欧美日产在线观看| 久久午夜色播影院免费高清| 亚洲欧美日韩综合aⅴ视频| 亚洲福中文字幕伊人影院| 青椒成人免费视频| 成人一级片网址| 欧美精品第1页| 国产亚洲一区二区在线观看| 综合电影一区二区三区| 日韩二区在线观看| 成人夜色视频网站在线观看| 91成人在线精品| 精品国产3级a| 一区二区三区四区在线免费观看| 日韩国产欧美在线视频| 国产成人免费在线观看| 91国偷自产一区二区开放时间| 欧美一级二级三级蜜桃| 亚洲人成影院在线观看| 久久综合综合久久综合| 91一区在线观看| 精品久久久久久综合日本欧美| 国产精品久久久久aaaa| 麻豆精品视频在线观看免费| 91一区一区三区| 国产日韩欧美不卡在线| 亚瑟在线精品视频| av高清不卡在线| 久久综合给合久久狠狠狠97色69| 亚洲图片欧美激情| 精品一区免费av| 777久久久精品| 亚洲欧美一区二区三区久本道91 | 欧美日韩精品免费| 中文av字幕一区| 精品一区二区三区香蕉蜜桃| 色婷婷av一区二区三区大白胸| 久久蜜桃av一区二区天堂| 午夜久久福利影院| 99re亚洲国产精品| 2021中文字幕一区亚洲| 日韩黄色在线观看| 91一区二区三区在线观看| 久久久久久麻豆| 精品亚洲欧美一区| 欧美一卡二卡三卡四卡| 亚洲国产综合人成综合网站| 97精品久久久午夜一区二区三区| 国产欧美日韩另类一区| 狠狠色丁香久久婷婷综合丁香| 欧美一区二区大片| 日韩和欧美一区二区三区| 色噜噜狠狠成人中文综合| 亚洲色图20p| 99精品桃花视频在线观看| 国产视频不卡一区| 懂色av一区二区夜夜嗨| 国产午夜精品理论片a级大结局| 狠狠狠色丁香婷婷综合激情| 精品日韩av一区二区| 国产综合色精品一区二区三区| 日韩午夜在线影院| 精品在线视频一区| 国产日产欧美一区| 狠狠狠色丁香婷婷综合激情| 色婷婷av久久久久久久| 亚洲免费在线视频|