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

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

?? dns.c

?? pic18f66j60單片機tcp/ip協議中的dns協議程序
?? C
字號:
/*********************************************************************
 *
 *	DNS Client Module for Microchip TCP/IP Stack
 *	 -Provides DNS resolution (client)
 *
 *********************************************************************
 * FileName:        DNS.c
 * Dependencies:    UDP, ARP, Tick
 * Processor:       PIC18, PIC24F, PIC24H, dsPIC30F, dsPIC33F
 * Complier:        Microchip C18 v3.02 or higher
 *					Microchip C30 v2.01 or higher
 * Company:         Microchip Technology, Inc.
 *
 * Software License Agreement
 *
 * This software is owned by Microchip Technology Inc. ("Microchip") 
 * and is supplied to you for use exclusively as described in the 
 * associated software agreement.  This software is protected by 
 * software and other intellectual property laws.  Any use in 
 * violation of the software license may subject the user to criminal 
 * sanctions as well as civil liability.  Copyright 2006 Microchip
 * Technology Inc.  All rights reserved.
 *
 * This software is provided "AS IS."  MICROCHIP DISCLAIMS ALL 
 * WARRANTIES, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, NOT LIMITED 
 * TO MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND 
 * INFRINGEMENT.  Microchip shall in no event be liable for special, 
 * incidental, or consequential damages.
 *
 *
 * Author               Date    Comment
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * Howard Schlunder     7/31/06	Original
 ********************************************************************/
#define THIS_IS_DNS

#include "..\Include\Compiler.h"
#include "..\Include\UDP.h"
#include "..\Include\Tick.h"
#include "..\Include\ARP.h"
#include "..\Include\ARPTsk.h"
#include "..\Include\DNS.h"
#include "..\Include\Helpers.h"

#if defined(STACK_USE_DNS)

#define DNS_PORT		53
#define DNS_TIMEOUT		(TICK_SECOND*2)


static BYTE *DNSHostName;
static enum
{
	DNS_HOME = 0,
	DNS_RESOLVE_ARP,
	DNS_OPEN_SOCKET,
	DNS_QUERY,
	DNS_GET_RESULT,
	DNS_DONE
} smDNS = DNS_DONE;

typedef struct _DNS_HEADER
{
	WORD_VAL TransactionID;
	WORD_VAL Flags;
	WORD_VAL Questions;
	WORD_VAL Answers;
	WORD_VAL AuthoritativeRecords;
	WORD_VAL AdditionalRecords;
} DNS_HEADER;

typedef struct _DNS_ANSWER_HEADER
{
	WORD_VAL	ResponseName;
	WORD_VAL	ResponseType;
	WORD_VAL	ResponseClass;
	DWORD_VAL	ResponseTTL;
	WORD_VAL	ResponseLen;
} DNS_ANSWER_HEADER;

static void DNSPutString(BYTE *String);
static void DNSGetString(BYTE *String);

/*********************************************************************
 * Function:        void DNSResolve(BYTE *Hostname)
 *
 * PreCondition:    Stack is initialized()
 *
 * Input:           *Hostname: Null terminated string specifying the 
 *							   host address to resolve to an IP 
 *							   address.
 *
 * Output:          None
 *
 * Side Effects:    None
 *
 * Overview:        Call DNSIsResolved() until the host is resolved.
 *
 * Note:            A UDP socket must be available before this 
 *					function is called.  It is freed at the end of 
 *					the resolution.  MAX_UDP_SOCKETS may need to be 
 *					increased if other modules use UDP sockets.
 *
 *					You must not modify *Hostname until DNSIsResolved() 
 *					returns TRUE.
 ********************************************************************/
void DNSResolve(BYTE *Hostname)
{
	DNSHostName = Hostname;
	smDNS = DNS_HOME;
}


/*********************************************************************
 * Function:        BOOL DNSIsResolved(IP_ADDR *HostIP)
 *
 * PreCondition:    DNSResolve() was called.
 *
 * Input:           HostIP: Pointer to IP_ADDR structure to store the 
 *							returned host IP address when DNS 
 *							resolution is complete.
 *
 * Output:          *HostIP, 4 byte IP address
 *
 * Side Effects:    None
 *
 * Overview:        Call DNSIsResolved() until the host is resolved.
 *
 * Note:            You cannot start two DNS resolution proceedures 
 *					concurrently.
 *
 *					You must not modify *Hostname until DNSIsResolved() 
 *					returns TRUE.
 ********************************************************************/
BOOL DNSIsResolved(IP_ADDR *HostIP)
{
	static UDP_SOCKET	MySocket;
	static NODE_INFO	Remote;
	static TICK			StartTime;
	BYTE 				i;
	WORD_VAL			w;
	DNS_HEADER			DNSHeader;
	DNS_ANSWER_HEADER	DNSAnswerHeader;

	switch(smDNS)
	{
		case DNS_HOME:
			ARPResolve(&AppConfig.PrimaryDNSServer);
			StartTime = TickGet();
			smDNS++;
			break;
		case DNS_RESOLVE_ARP:
			if(!ARPIsResolved(&AppConfig.PrimaryDNSServer, &Remote.MACAddr))
			{
				if(TickGet() - StartTime > DNS_TIMEOUT)
				{
					smDNS--;
				}
				break;
			}
			Remote.IPAddr.Val = AppConfig.PrimaryDNSServer.Val;
			smDNS++;
			// No need to break, we can immediately start resolution

		case DNS_OPEN_SOCKET:
			MySocket = UDPOpen(0, &Remote, DNS_PORT);
			if(MySocket == INVALID_UDP_SOCKET)
				break;

			smDNS++;
			// No need to break, we can immediately start resolution
			
		case DNS_QUERY:
			if(!UDPIsPutReady(MySocket))
				break;
			
			// Put DNS query here
			UDPPut(0x12);		// User chosen ID
			UDPPut(0x34);
			UDPPut(0x01);		// Standard query with recursion
			UDPPut(0x00);	
			UDPPut(0x00);		// 0x0001 questions
			UDPPut(0x01);
			UDPPut(0x00);		// 0x0000 answers
			UDPPut(0x00);
			UDPPut(0x00);		// 0x0000 name server resource records
			UDPPut(0x00);
			UDPPut(0x00);		// 0x0000 additional records
			UDPPut(0x00);

			// Put hostname string to resolve
			DNSPutString(DNSHostName);

			UDPPut(0x00);		// Type: A (host address)
			UDPPut(0x01);
			UDPPut(0x00);		// Class: IN (Internet)
			UDPPut(0x01);

			UDPFlush();
			StartTime = TickGet();
			smDNS++;
			break;

		case DNS_GET_RESULT:
			if(!UDPIsGetReady(MySocket))
			{
				if(TickGet() - StartTime > DNS_TIMEOUT)
				{
					smDNS--;
				}
				break;
			}

			// Retrieve the DNS header and de-big-endian it
			UDPGet(&DNSHeader.TransactionID.v[1]);
			UDPGet(&DNSHeader.TransactionID.v[0]);
			UDPGet(&DNSHeader.Flags.v[1]);
			UDPGet(&DNSHeader.Flags.v[0]);
			UDPGet(&DNSHeader.Questions.v[1]);
			UDPGet(&DNSHeader.Questions.v[0]);
			UDPGet(&DNSHeader.Answers.v[1]);
			UDPGet(&DNSHeader.Answers.v[0]);
			UDPGet(&DNSHeader.AuthoritativeRecords.v[1]);
			UDPGet(&DNSHeader.AuthoritativeRecords.v[0]);
			UDPGet(&DNSHeader.AdditionalRecords.v[1]);
			UDPGet(&DNSHeader.AdditionalRecords.v[0]);

			// Remove all questions
			while(DNSHeader.Questions.Val--)
			{
				DNSGetString(NULL);
				UDPGet(&w.v[1]);		// Question type
				UDPGet(&w.v[0]);
				UDPGet(&w.v[1]);		// Question class
				UDPGet(&w.v[0]);
			}
			
			// Scan through answers
			while(DNSHeader.Answers.Val--)
			{
				UDPGet(&DNSAnswerHeader.ResponseName.v[1]);		// Response name
				UDPGet(&DNSAnswerHeader.ResponseName.v[0]);
				UDPGet(&DNSAnswerHeader.ResponseType.v[1]);		// Response type
				UDPGet(&DNSAnswerHeader.ResponseType.v[0]);
				UDPGet(&DNSAnswerHeader.ResponseClass.v[1]);	// Response class
				UDPGet(&DNSAnswerHeader.ResponseClass.v[0]);
				UDPGet(&DNSAnswerHeader.ResponseTTL.v[3]);		// Time to live
				UDPGet(&DNSAnswerHeader.ResponseTTL.v[2]);
				UDPGet(&DNSAnswerHeader.ResponseTTL.v[1]);
				UDPGet(&DNSAnswerHeader.ResponseTTL.v[0]);
				UDPGet(&DNSAnswerHeader.ResponseLen.v[1]);		// Response length
				UDPGet(&DNSAnswerHeader.ResponseLen.v[0]);

				// Make sure that this is a 4 byte IP address, response type A, class 1
				// Check if this is Type A
				if(	DNSAnswerHeader.ResponseType.Val	== 0x0001 && 
					DNSAnswerHeader.ResponseClass.Val	== 0x0001 && // Internet class
					DNSAnswerHeader.ResponseLen.Val		== 0x0004)
				{
					UDPGet(&HostIP->v[0]);
					UDPGet(&HostIP->v[1]);
					UDPGet(&HostIP->v[2]);
					UDPGet(&HostIP->v[3]);
					break;
				}
				else
				{
					while(DNSAnswerHeader.ResponseLen.Val--)
					{
						UDPGet(&i);
					}
				}
			}

			UDPDiscard();
			UDPClose(MySocket);
			MySocket = INVALID_UDP_SOCKET;
			smDNS++;
			// No need to break, we are done and need to return TRUE

		case DNS_DONE:
			return TRUE;
	}
	
	return FALSE;
}

static void DNSPutString(BYTE *String)
{
	BYTE *RightPtr;
	BYTE i;
	BYTE Len;

	RightPtr = String;

	while(1)
	{
		do
		{
			i = *RightPtr++;
		} while((i != 0x00) && (i != '.') && (i != '/'));
	
		// Put the length parameter
		Len = (BYTE)(RightPtr-String-1);
		UDPPut(Len);
		while(Len--)
		{
			UDPPut(*String++);
		}
		if(i == 0x00 || i == '/')
			break;

		// Skip over the '.' in the input string
		String++;
	}
	
	// Put the string terminator character
	UDPPut(0x00);
}

static void DNSGetString(BYTE *String)
{
	BYTE i;
	BYTE j;

	if(String == NULL)
	{
		UDPGet(&i);
		while(i)
		{
			while(i--)
			{
				UDPGet(&j);
			}
			UDPGet(&i);
		}
	}
	else
	{
		UDPGet(&i);
		while(i)
		{
			while(i--)
			{
				UDPGet(String);
				String++;
			}
			UDPGet(&i);
		}
	}
}


#endif	//#if defined(STACK_USE_DNS)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
|精品福利一区二区三区| 久久精品国产在热久久| 亚洲成人黄色小说| 国产一区二区三区久久久 | 国产精品久久久久久久久久免费看| aaa欧美大片| 欧美一区二区视频网站| 欧美国产成人精品| 狂野欧美性猛交blacked| 在线观看一区不卡| 国产精品久99| 成人av网址在线观看| 精品黑人一区二区三区久久| 亚洲麻豆国产自偷在线| 国产福利一区在线| 日韩精品在线看片z| 亚洲一区二区不卡免费| 国产精品99久久久| 在线观看国产日韩| 欧美色精品在线视频| 91精品福利视频| 在线播放一区二区三区| 国产精品不卡一区| 国产精品综合av一区二区国产馆| 亚洲观看高清完整版在线观看| 亚洲精品一区二区三区福利| 亚洲va天堂va国产va久| 日本精品一区二区三区高清| 国产精品国产精品国产专区不蜜 | 欧美亚洲国产一区二区三区| 中文字幕视频一区| www.av亚洲| 亚洲欧洲国产日本综合| 91女厕偷拍女厕偷拍高清| 中文字幕在线不卡一区二区三区| 日韩亚洲欧美成人一区| 一区二区高清免费观看影视大全| 亚洲精品老司机| 成年人网站91| 日韩美女精品在线| 成人av资源在线观看| 亚洲欧美激情在线| 91麻豆成人久久精品二区三区| 日本久久电影网| 亚洲午夜久久久久久久久电影网| 最新久久zyz资源站| 成人国产精品免费观看动漫| 国产校园另类小说区| 99在线热播精品免费| 亚洲女爱视频在线| 欧美精品 日韩| 九九国产精品视频| 国产精品国产三级国产普通话蜜臀| 日韩三级精品电影久久久| 蜜桃一区二区三区在线| 国产成人亚洲综合a∨猫咪| 国产日韩欧美亚洲| 色先锋资源久久综合| 一区二区三区四区蜜桃| 日韩欧美一区中文| 国产精品69毛片高清亚洲| 自拍偷拍欧美精品| 欧美裸体bbwbbwbbw| 国产麻豆91精品| 国产精品每日更新在线播放网址| 亚洲精品免费视频| 欧美mv和日韩mv的网站| 成人亚洲一区二区一| 亚洲欧美区自拍先锋| 精品国产乱码久久久久久老虎| 亚洲午夜视频在线| 精品av久久707| 99久久综合99久久综合网站| 午夜精品国产更新| 国产精品久久久久影院老司| 欧美精选一区二区| 国产不卡在线一区| 天堂资源在线中文精品| 久久久精品中文字幕麻豆发布| 三级在线观看一区二区 | 2020国产精品自拍| 成人黄色电影在线| 美日韩一级片在线观看| 亚洲品质自拍视频| 精品欧美一区二区在线观看| 在线免费观看日韩欧美| 国产一区二区不卡在线| 丝袜亚洲另类欧美| 亚洲人成网站精品片在线观看| 国产在线日韩欧美| 五月综合激情网| 欧美激情在线一区二区三区| 欧美一区二区美女| 欧美视频一区二区三区四区 | 国产成人精品网址| 日本中文一区二区三区| 亚洲午夜精品一区二区三区他趣| 成人精品一区二区三区四区| 蜜桃精品在线观看| 亚洲国产毛片aaaaa无费看| 国产精品视频看| 精品福利二区三区| 欧美一区二区网站| 欧美日韩国产高清一区二区三区| 天涯成人国产亚洲精品一区av| 色婷婷av一区二区三区软件| 国产成人精品www牛牛影视| 国内成人免费视频| 日韩av网站在线观看| 亚洲综合激情另类小说区| 亚洲婷婷综合色高清在线| 中文无字幕一区二区三区| 久久精品日产第一区二区三区高清版 | 精品剧情在线观看| 欧美人xxxx| 欧美视频三区在线播放| 欧美日韩国产影片| 欧美日韩久久不卡| 欧美三级电影在线看| 欧美亚洲一区三区| 欧美精品v日韩精品v韩国精品v| 青青国产91久久久久久 | 国产一区二区三区最好精华液| 国产视频在线观看一区二区三区| 成人午夜免费视频| 成人a免费在线看| 91免费看`日韩一区二区| 91伊人久久大香线蕉| 日本韩国一区二区| 欧美日韩一区不卡| 日韩欧美在线网站| 欧美韩日一区二区三区| 亚洲黄一区二区三区| 日韩av不卡在线观看| 精油按摩中文字幕久久| 成人av网站在线| 欧美日韩免费电影| 精品99一区二区三区| 综合网在线视频| 日本欧美一区二区在线观看| 国产精品综合一区二区| 99视频国产精品| 91精品欧美福利在线观看| 欧美成人精品福利| 亚洲国产精品成人综合| 亚洲美女视频一区| 精品一区免费av| 一本色道久久综合亚洲精品按摩| 国产米奇在线777精品观看| caoporen国产精品视频| 欧美精品久久99| 国产精品入口麻豆九色| 日韩精品国产精品| 国产一区在线观看视频| 9l国产精品久久久久麻豆| 欧美一区二区三区视频在线观看| 99精品黄色片免费大全| 欧美日韩国产一二三| 欧美激情一区二区在线| 日韩成人午夜精品| 99久久伊人久久99| 欧美成人福利视频| 亚洲国产一区二区视频| 东方aⅴ免费观看久久av| 欧美日韩国产一级片| 国产精品美女久久久久久| 久久精品国产精品亚洲红杏| 欧美视频中文一区二区三区在线观看| bt欧美亚洲午夜电影天堂| 日韩三级在线观看| 18欧美乱大交hd1984| 精品一区二区三区在线播放视频 | 亚洲成人免费视| a亚洲天堂av| 久久久久99精品国产片| 免费三级欧美电影| 在线观看视频一区二区欧美日韩| 97精品视频在线观看自产线路二| gogo大胆日本视频一区| 26uuu亚洲| 视频一区欧美日韩| 91国内精品野花午夜精品| |精品福利一区二区三区| 国产福利一区二区三区| 26uuu久久天堂性欧美| 精彩视频一区二区三区| 日韩视频在线你懂得| 午夜久久久久久久久| 欧洲一区二区三区免费视频| 日韩美女久久久| 一本久久a久久免费精品不卡| 欧美日韩高清一区二区三区| 国产精品不卡一区| 成人性色生活片免费看爆迷你毛片| 一本久久a久久精品亚洲| 国产精品女主播av| 成人精品国产一区二区4080| 国产精品美女www爽爽爽| av电影在线观看完整版一区二区 | 99视频精品全部免费在线|