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

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

?? dhcp.c

?? 單片機c語言程序設計100例--基于PIC+PROTEUS
?? C
?? 第 1 頁 / 共 2 頁
字號:
   |                                                               |
   |                          sname   (64)                         |
   +---------------------------------------------------------------+
   |                                                               |
   |                          file    (128)                        |
   +---------------------------------------------------------------+
   |                                                               |
   |                          options (312)                        |
   +---------------------------------------------------------------+

 ********************************************************************/
static BYTE _DHCPReceive(void)
{
    BYTE v;
    BYTE i, j;
    BYTE type;
    BOOL lbDone;
    DWORD_VAL tempServerID;


    // Assume unknown message until proven otherwise.
    type = DHCP_UNKNOWN_MESSAGE;

    UDPGet(&v);                             // op
    
    // Make sure this is BOOT_REPLY.
    if ( v == BOOT_REPLY )
    {
        // Discard htype, hlen, hops, xid, secs, flags, ciaddr.
        for ( i = 0; i < 15u; i++ )
            UDPGet(&v);

		// Check to see if this is the first offer
		if(DHCPState.bits.bOfferReceived)
		{
	        // Discard offered IP address, we already have an offer
	        for ( i = 0; i < 4u; i++ )
	            UDPGet(&v);
		}
		else
		{
	        // Save offered IP address until we know for sure that we have it.
	        UDPGet(&tempIPAddress.v[0]);
	        UDPGet(&tempIPAddress.v[1]);
	        UDPGet(&tempIPAddress.v[2]);
	        UDPGet(&tempIPAddress.v[3]);
			ValidValues.bits.IPAddress = 1;
		}

        // Ignore siaddr, giaddr
        for ( i = 0; i < 8u; i++ )
            UDPGet(&v);

        // Check to see if chaddr (Client Hardware Address) belongs to us.
        for ( i = 0; i < 6u; i++ )
        {
            UDPGet(&v);
            if ( v != AppConfig.MyMACAddr.v[i])
                goto UDPInvalid;
        }


        // Ignore part of chaddr, sname, file, magic cookie.
        for ( i = 0; i < 206u; i++ )
            UDPGet(&v);

        lbDone = FALSE;
        do
        {
			// Get the Option number
			// Break out eventually in case if this is a malformed 
			// DHCP message, ie: missing DHCP_END_OPTION marker
			if(!UDPGet(&v))
			{
				lbDone = TRUE;
				break;
			}

            switch(v)
            {
            case DHCP_MESSAGE_TYPE:
                UDPGet(&v);                         // Skip len
                // Len must be 1.
                if ( v == 1u )
                {
                    UDPGet(&type);                  // Get type

					// Throw away the packet if we know we don't need it (ie: another offer when we already have one)
					if(DHCPState.bits.bOfferReceived && (type == DHCP_OFFER_MESSAGE))
					{
						goto UDPInvalid;
					}
                }
                else
                    goto UDPInvalid;
                break;

            case DHCP_SUBNET_MASK:
                UDPGet(&v);                     // Skip len
                // Len must be 4.
                if ( v == 4u )
                {
					// Check to see if this is the first offer
					if(DHCPState.bits.bOfferReceived)
					{
				        // Discard offered IP mask, we already have an offer
				        for ( i = 0; i < 4u; i++ )
				            UDPGet(&v);
					}
					else
					{
	                    UDPGet(&tempMask.v[0]);
	                    UDPGet(&tempMask.v[1]);
	                    UDPGet(&tempMask.v[2]);
	                    UDPGet(&tempMask.v[3]);
						ValidValues.bits.Mask = 1;
					}
                }
                else
                    goto UDPInvalid;
                break;

            case DHCP_ROUTER:
                UDPGet(&j);
                // Len must be >= 4.
                if ( j >= 4u )
                {
					// Check to see if this is the first offer
					if(DHCPState.bits.bOfferReceived)
					{
				        // Discard offered Gateway address, we already have an offer
				        for ( i = 0; i < 4u; i++ )
				            UDPGet(&v);
					}
					else
					{
	                    UDPGet(&tempGateway.v[0]);
	                    UDPGet(&tempGateway.v[1]);
	                    UDPGet(&tempGateway.v[2]);
	                    UDPGet(&tempGateway.v[3]);
						ValidValues.bits.Gateway = 1;
					}
                }
                else
                    goto UDPInvalid;

                // Discard any other router addresses.
                j -= 4;
                while(j--)
                    UDPGet(&v);
                break;

#if defined(STACK_USE_DNS)
            case DHCP_DNS:
                UDPGet(&j);
                // Len must be >= 4.
                if ( j >= 4u )
                {
					// Check to see if this is the first offer
					if(DHCPState.bits.bOfferReceived)
					{
				        // Discard offered DNS server address, we already have an offer
				        for ( i = 0; i < 4u; i++ )
				            UDPGet(&v);
					}
					else
					{
	                    UDPGet(&tempDNS.v[0]);
	                    UDPGet(&tempDNS.v[1]);
	                    UDPGet(&tempDNS.v[2]);
	                    UDPGet(&tempDNS.v[3]);
						ValidValues.bits.DNS = 1;
					}
                }
                else
                    goto UDPInvalid;

                // Discard any other DNS server addresses
                j -= 4;
                while(j--)
                    UDPGet(&v);
                break;
#endif

//            case DHCP_HOST_NAME:
//                UDPGet(&j);
//                // Len must be >= 4.
//                if(j < 1u)
//					goto UDPInvalid;
//
//				// Check to see if this is the first offer
//				if(DHCPState.bits.bOfferReceived)
//				{
//			        // Discard offered host name, we already have an offer
//	                while(j--)
//	                    UDPGet(&v);
//				}
//				else
//				{
//					for(i = 0; j, i < sizeof(tempHostName); i++, j--)
//					{
//						UDPGet(&tempHostName[i]);
//					}
//					while(j--)
//					{
//						UDPGet(&v);
//					}
//					ValidValues.bits.HostName = 1;
//				}
//
//                break;

            case DHCP_SERVER_IDENTIFIER:
                UDPGet(&v);                         // Get len
                // Len must be 4.
                if ( v == 4u )
                {
                    UDPGet(&tempServerID.v[3]);   // Get the id
                    UDPGet(&tempServerID.v[2]);
                    UDPGet(&tempServerID.v[1]);
                    UDPGet(&tempServerID.v[0]);
                }
                else
                    goto UDPInvalid;
                break;

            case DHCP_END_OPTION:
                lbDone = TRUE;
                break;

            case DHCP_IP_LEASE_TIME:
                UDPGet(&v);                         // Get len
                // Len must be 4.
                if ( v == 4u )
                {
					// Check to see if this is the first offer
					if(DHCPState.bits.bOfferReceived)
					{
				        // Discard offered lease time, we already have an offer
				        for ( i = 0; i < 4u; i++ )
				            UDPGet(&v);
					}
					else
					{
	                    UDPGet(&DHCPLeaseTime.v[3]);
	                    UDPGet(&DHCPLeaseTime.v[2]);
	                    UDPGet(&DHCPLeaseTime.v[1]);
	                    UDPGet(&DHCPLeaseTime.v[0]);

	                    // Due to possible timing delays, consider actual lease
	                    // time less by half hour.
	                    if ( DHCPLeaseTime.Val > HALF_HOUR )
	                        DHCPLeaseTime.Val = DHCPLeaseTime.Val - HALF_HOUR;
					}
                }
                else
                    goto UDPInvalid;
                break;

            default:
                // Ignore all unsupport tags.
                UDPGet(&j);                     // Get option len
                while( j-- )                    // Ignore option values
                    UDPGet(&v);
            }
        } while( !lbDone );
    }

    // If this is an OFFER message, remember current server id.
    if ( type == DHCP_OFFER_MESSAGE )
    {
        DHCPServerID.Val = tempServerID.Val;
		DHCPState.bits.bOfferReceived = TRUE;
    }
    else
    {
        // For other types of messages, make sure that received
        // server id matches with our previous one.
        if ( DHCPServerID.Val != tempServerID.Val )
            type = DHCP_UNKNOWN_MESSAGE;
    }

    UDPDiscard();                             // We are done with this packet
    return type;

UDPInvalid:
    UDPDiscard();
    return DHCP_UNKNOWN_MESSAGE;

}





static void _DHCPSend(BYTE messageType)
{
    BYTE i;


    UDPPut(BOOT_REQUEST);                       // op
    UDPPut(HW_TYPE);                            // htype
    UDPPut(LEN_OF_HW_TYPE);                     // hlen
    UDPPut(0);                                  // hops
    UDPPut(0x12);                               // xid[0]
    UDPPut(0x23);                               // xid[1]
    UDPPut(0x34);                               // xid[2]
    UDPPut(0x56);                               // xid[3]
    UDPPut(0);                                  // secs[0]
    UDPPut(0);                                  // secs[1]
    UDPPut(0x80);                               // flags[0] with BF set
    UDPPut(0);                                  // flags[1]

    // If this is DHCP REQUEST message, use previously allocated IP address.
#if 0
    if ( messageType == DHCP_REQUEST_MESSAGE )
    {
        UDPPut(tempIPAddress.v[0]);
        UDPPut(tempIPAddress.v[1]);
        UDPPut(tempIPAddress.v[2]);
        UDPPut(tempIPAddress.v[3]);
    }
    else
#endif
    {
        UDPPut(0x00);
        UDPPut(0x00);
        UDPPut(0x00);
        UDPPut(0x00);
    }

    // Set yiaddr, siaddr, giaddr as zeros,
    for ( i = 0; i < 12u; i++ )
        UDPPut(0x00);

    // Load chaddr - Client hardware address.
    UDPPut(AppConfig.MyMACAddr.v[0]);
    UDPPut(AppConfig.MyMACAddr.v[1]);
    UDPPut(AppConfig.MyMACAddr.v[2]);
    UDPPut(AppConfig.MyMACAddr.v[3]);
    UDPPut(AppConfig.MyMACAddr.v[4]);
    UDPPut(AppConfig.MyMACAddr.v[5]);

    // Set chaddr[6..15], sname and file as zeros.
    for ( i = 0; i < 202u; i++ )
        UDPPut(0);

    // Load magic cookie as per RFC 1533.
    UDPPut(99);
    UDPPut(130);
    UDPPut(83);
    UDPPut(99);

    // Load message type.
    UDPPut(DHCP_MESSAGE_TYPE);
    UDPPut(DHCP_MESSAGE_TYPE_LEN);
    UDPPut(messageType);

	if(messageType == DHCP_DISCOVER_MESSAGE)
	{
		// Reset offered flag so we know to act upon the next valid offer
		DHCPState.bits.bOfferReceived = FALSE;
	}


    if ( messageType != DHCP_DISCOVER_MESSAGE && tempIPAddress.Val != 0x0000u )
    {
         // DHCP REQUEST message may include server identifier,
         // to identify the server we are talking to.
         // DHCP ACK may include it too.  To simplify logic,
         // we will include server identifier in DHCP ACK message too.
         // _DHCPReceive() would populate "serverID" when it
         // receives DHCP OFFER message. We will simply use that
         // when we are replying to server.
         // If this is a renwal request, do not include server id.
         UDPPut(DHCP_SERVER_IDENTIFIER);
         UDPPut(DHCP_SERVER_IDENTIFIER_LEN);
         UDPPut(DHCPServerID.v[3]);
         UDPPut(DHCPServerID.v[2]);
         UDPPut(DHCPServerID.v[1]);
         UDPPut(DHCPServerID.v[0]);
     }

    // Load our interested parameters
    // This is hardcoded list.  If any new parameters are desired,
    // new lines must be added here.
    UDPPut(DHCP_PARAM_REQUEST_LIST);
    UDPPut(DHCP_PARAM_REQUEST_LIST_LEN);
    UDPPut(DHCP_SUBNET_MASK);
    UDPPut(DHCP_ROUTER);
	UDPPut(DHCP_DNS);
	UDPPut(DHCP_HOST_NAME);

     // Add requested IP address to DHCP Request Message
    if ( messageType == DHCP_REQUEST_MESSAGE )
    {
        UDPPut(DHCP_PARAM_REQUEST_IP_ADDRESS);
        UDPPut(DHCP_PARAM_REQUEST_IP_ADDRESS_LEN);

        UDPPut(tempIPAddress.v[0]);
        UDPPut(tempIPAddress.v[1]);
        UDPPut(tempIPAddress.v[2]);
        UDPPut(tempIPAddress.v[3]);
    }

    // Add any new paramter request here.

    // End of Options.
    UDPPut(DHCP_END_OPTION);

    UDPFlush();
}


#endif	//#if defined(STACK_USE_DHCP)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
18涩涩午夜精品.www| 国产成人a级片| 国产成人在线看| 欧美日韩在线观看一区二区| 国产精品无圣光一区二区| 日本午夜一本久久久综合| 成人av第一页| 久久尤物电影视频在线观看| 五月婷婷色综合| 色综合久久综合| 国产精品妹子av| 韩国三级在线一区| 日韩色在线观看| 亚洲大片在线观看| 在线精品国精品国产尤物884a| 久久精品一级爱片| 精品亚洲欧美一区| 日韩一级二级三级| 肉色丝袜一区二区| 欧美日韩二区三区| 亚洲成av人片一区二区三区| 91精品福利视频| 一区二区三区久久| 色婷婷久久99综合精品jk白丝| 国产精品久久久久久久久动漫| 国产成人av电影在线播放| 久久只精品国产| 国产精品自拍网站| 国产三级欧美三级| 国产91精品欧美| 国产欧美日韩在线观看| 成人精品亚洲人成在线| 亚洲国产精品精华液ab| 不卡一区在线观看| 亚洲婷婷国产精品电影人久久| 北岛玲一区二区三区四区| 国产精品日韩精品欧美在线| 成人性生交大片| 亚洲视频免费在线| 欧美在线观看一区| 日韩av在线免费观看不卡| 精品国产一区二区三区久久久蜜月| 美女视频黄久久| 久久久精品一品道一区| 高清国产一区二区三区| 亚洲精品日日夜夜| 欧美日韩aaa| 毛片不卡一区二区| 久久久青草青青国产亚洲免观| 国产一区二区影院| 亚洲欧美中日韩| 欧美日韩国产首页| 激情偷乱视频一区二区三区| 中文字幕电影一区| 欧美日韩中文字幕一区| 美女网站一区二区| 国产精品丝袜一区| 欧美色图第一页| 国产一区二区精品在线观看| 中文字幕一区二区三区四区不卡 | 欧美大胆人体bbbb| 国产馆精品极品| 亚洲同性同志一二三专区| 欧美视频在线一区二区三区 | 日本一区二区三区在线观看| 色婷婷国产精品久久包臀 | 亚洲影院久久精品| 日韩欧美国产成人一区二区| 99精品视频一区二区三区| 亚洲最大的成人av| 亚洲精品在线电影| 欧美三级在线视频| 成人午夜在线视频| 青青草原综合久久大伊人精品| 国产精品视频你懂的| 欧美视频一区二区三区在线观看| 国产一区免费电影| 午夜久久电影网| 亚洲欧洲三级电影| 精品国产91九色蝌蚪| 欧美视频日韩视频在线观看| 国产成人av一区| 免费久久精品视频| 一区二区三区四区亚洲| 国产欧美一区二区三区网站| 欧美精品99久久久**| 91社区在线播放| 国产精品一区二区久久不卡| 视频一区二区三区中文字幕| 亚洲靠逼com| 亚洲国产成人在线| 精品国产人成亚洲区| 欧美日韩黄色影视| 日本精品免费观看高清观看| 福利一区二区在线观看| 久久国产乱子精品免费女| 亚洲国产综合人成综合网站| 亚洲天堂2016| 国产精品天天摸av网| 久久精品视频一区二区| 日韩欧美的一区| 欧美精品在线一区二区| 色狠狠色狠狠综合| 91麻豆免费在线观看| 波多野洁衣一区| 成人精品小蝌蚪| 成人精品免费看| 成人免费黄色在线| 丁香天五香天堂综合| 国产91精品一区二区麻豆亚洲| 国产精品综合二区| 成人免费看片app下载| 国产91在线观看丝袜| 成人性色生活片免费看爆迷你毛片| 国产成人精品网址| 成人精品一区二区三区中文字幕| 成人黄色大片在线观看| 97se亚洲国产综合自在线观| 色综合天天综合在线视频| 在线免费亚洲电影| 欧美伊人久久久久久久久影院| 91国产丝袜在线播放| 欧美怡红院视频| 91精品国模一区二区三区| 日韩欧美在线1卡| 久久综合精品国产一区二区三区| 国产亚洲欧洲一区高清在线观看| 国产偷国产偷精品高清尤物| 国产精品欧美一级免费| 一区二区三区在线影院| 日韩精品高清不卡| 国产揄拍国内精品对白| 不卡电影免费在线播放一区| 在线观看免费一区| 日韩视频免费观看高清完整版 | 性欧美大战久久久久久久久| 蜜桃精品视频在线| 成人影视亚洲图片在线| 欧美精品v国产精品v日韩精品 | 日韩免费视频线观看| 国产日韩视频一区二区三区| 亚洲女与黑人做爰| 日韩中文字幕一区二区三区| 国产精品影视网| 色综合久久久久久久久久久| 欧美一区二区三区视频免费| 日本一区二区三区高清不卡| 亚洲午夜在线电影| 久久爱另类一区二区小说| 丁香桃色午夜亚洲一区二区三区| 在线观看三级视频欧美| 精品久久国产老人久久综合| 亚洲欧美电影院| 美日韩黄色大片| 色综合久久九月婷婷色综合| 精品日韩成人av| 亚洲乱码中文字幕综合| 国内偷窥港台综合视频在线播放| 色婷婷av一区二区三区大白胸| 欧美电影精品一区二区| 亚洲免费在线观看视频| 国产精品一品二品| 欧美精品 日韩| 亚洲色图欧洲色图婷婷| 极品少妇一区二区三区精品视频| 日本高清无吗v一区| 久久久久久久久久久久久久久99 | 亚洲欧美综合网| 韩国一区二区三区| 欧美精品tushy高清| 亚洲六月丁香色婷婷综合久久| 国产精品一区二区你懂的| 欧美精品高清视频| 亚洲精品成a人| 成人一区二区三区视频| 精品国产一区久久| 午夜精品久久久久久| 91麻豆自制传媒国产之光| 中文一区二区在线观看| 精品一区二区三区免费观看| 欧美三级三级三级| 亚洲精品精品亚洲| 99精品在线免费| 国产精品理论片| 国产91精品一区二区麻豆亚洲| 欧美成人乱码一区二区三区| 亚洲成人免费电影| 在线免费一区三区| 亚洲综合另类小说| 日本丶国产丶欧美色综合| 亚洲精品国产精品乱码不99| 91丨九色丨尤物| 亚洲黄色免费网站| 色婷婷综合在线| 有码一区二区三区| 欧美亚洲禁片免费| 亚洲一级二级在线| 欧美日韩国产中文| 美洲天堂一区二卡三卡四卡视频| 日韩一区二区三区电影|