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

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

?? autonet.c

?? wince3.0的源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*****************************************************************************/
/**                   Microsoft Windows                                     **/
/**   Copyright (c) 1999-2000 Microsoft Corporation.  All rights reserved.  **/
/*****************************************************************************/

/*
    autonet.c

  DESCRIPTION:
    Automatic IP configuration functions


*/

#include "dhcpp.h"
#include "dhcp.h"
#include "protocol.h"
#include "icmpif.h"

#define DHCP_IPAUTOCONFIGURATION_ATTEMPTS   20

void ProcessAutoIP(DhcpInfo *pDhcp);
extern DhcpInfo **_FindDhcp(DhcpInfo *pDhcp, PTSTR pName);  // dhcp.c
extern void FreeDhcpInfo(DhcpInfo *pDhcp);          // dhcp.c
extern void CloseDhcpSocket(DhcpInfo *pDhcp);       // dhcp.c
extern STATUS SetDhcpConfig(DhcpInfo *pDhcp);       // dhcp.c
extern STATUS PutNetUp(DhcpInfo *pDhcp);            // dhcp.c
extern BOOL CanUseCachedLease(DhcpInfo * pDhcp);    // dhcp.c
extern void NotifyXxxChange(HANDLE hEvent);           // dhcp.c
extern HANDLE	g_hAddrChangeEvent;                 // dhcp.c

#define DHCP_ICMP_WAIT_TIME     1000
#define DHCP_ICMP_RCV_BUF_SIZE  0x1000
#define DHCP_ICMP_SEND_MESSAGE  "DHCPC"

typedef ULONG (* PFN_VXDECHOREQUEST)(void  * InBuf, ulong * InBufLen, void  * OutBuf, ulong * OutBufLen);

//
// Ping the specified IP address with "DHCPC".
//
BOOL
PingDhcp(
    DWORD dwIPAddr
    )
{
    DWORD inlen;
    DWORD outlen;
    DWORD status;
    BYTE ReqBuffer[sizeof(ICMP_ECHO_REQUEST)+8];
    PICMP_ECHO_REQUEST pReq;
    BYTE ReplyBuffer[DHCP_ICMP_RCV_BUF_SIZE];
    PICMP_ECHO_REPLY EchoReplies;
    PFN_VXDECHOREQUEST pfnEchoRequest;
    HANDLE hTcpstk;
    BOOL bRet;
#ifdef DEBUG
    TCHAR Addr[32];
    TCHAR Reply[32];
#endif

    DEBUGMSG(ZONE_FUNCTION|ZONE_AUTOIP, (L"DHCP:+PingDhcp\n"));

    hTcpstk = LoadLibrary(L"tcpstk.dll");
    if (hTcpstk == NULL) {
        DEBUGMSG(ZONE_FUNCTION|ZONE_AUTOIP, (L"DHCP:-PingDhcp: LoadLibrary(tcpstk.dll) failed\n"));
        return FALSE;
    }

    bRet = FALSE;
    pfnEchoRequest = (PFN_VXDECHOREQUEST)GetProcAddress(hTcpstk, L"VXDEchoRequest");
    if (pfnEchoRequest == NULL) {
        DEBUGMSG(ZONE_FUNCTION|ZONE_AUTOIP, (L"DHCP:PingDhcp: GetProcAddress(VXDEchoRequest) failed\n"));
        goto pd_exit;
    }

    pReq = (PICMP_ECHO_REQUEST)ReqBuffer;
    pReq->Address = dwIPAddr;
    pReq->Timeout = DHCP_ICMP_WAIT_TIME;
    pReq->DataOffset = sizeof(ICMP_ECHO_REQUEST);
    pReq->DataSize = strlen(DHCP_ICMP_SEND_MESSAGE);
    strcpy(ReqBuffer+sizeof(ICMP_ECHO_REQUEST), DHCP_ICMP_SEND_MESSAGE);
    pReq->OptionsValid = 0;
    pReq->Ttl = 1;
    pReq->Tos = 0;
    pReq->Flags = 0;
    pReq->OptionsOffset = 0;
    pReq->OptionsSize = 0;

    inlen = sizeof(ReqBuffer);
    outlen = sizeof(ReplyBuffer);

    status = pfnEchoRequest(
                (void *)ReqBuffer,
                &inlen,
                (void *)ReplyBuffer,
                &outlen
                );

    if (status) {
        DEBUGMSG(ZONE_AUTOIP, (L"DHCP:PingDhcp: VXDEchoRequest failed %d\n", status));
        goto pd_exit;
    }

    EchoReplies = (PICMP_ECHO_REPLY)ReplyBuffer;
    if (EchoReplies->Status) {
        DEBUGMSG(ZONE_AUTOIP, (L"DHCP:PingDhcp: Echo status = %d\n", EchoReplies->Status));
        goto pd_exit;
    }

    if (EchoReplies->Address != dwIPAddr) {
        DEBUGMSG(ZONE_AUTOIP, (L"DHCP:PingDhcp: Echo IPAddr(%s) != Request IPAddr(%s)\n",
            AddrToString(EchoReplies->Status, Reply), AddrToString(dwIPAddr, Addr)));
        goto pd_exit;
    }

    bRet = TRUE;

pd_exit:
    FreeLibrary(hTcpstk);
    DEBUGMSG(ZONE_FUNCTION|ZONE_AUTOIP, (L"DHCP:-PingDhcp returning %s\n", bRet ? L"TRUE" : L"FALSE"));
    return bRet;
}   // PingDhcp

//
// If there were no DHCP servers and this interface has a leased IP addr, then ping
// the default gateway to make sure we are on the same subnet. This will avoid going
// to auto IP prematurely.
//
// This function will bring up the interface and leave it up if the default gateway
// could be ping'd.
//
BOOL
CouldPingGateway(
    DhcpInfo * pDhcp
    )
{
#ifdef DEBUG
    TCHAR Addr[32];
    TCHAR Gateway[32];
#endif

    DEBUGMSG(ZONE_FUNCTION|ZONE_AUTOIP, (L"DHCP:+CouldPingGateway\n"));

    if ((pDhcp->IPAddr == 0) || (pDhcp->Gateway == 0)) {
        DEBUGMSG(ZONE_FUNCTION|ZONE_AUTOIP, (L"DHCP:-CouldPingGateway: IPAddr = %s, Gateway = %s\n",
            AddrToString(pDhcp->IPAddr, Addr), AddrToString(pDhcp->Gateway, Gateway)));
        return FALSE;
    }

    if (!CanUseCachedLease(pDhcp)) {
        DEBUGMSG(ZONE_FUNCTION|ZONE_AUTOIP, (L"DHCP:-CouldPingGateway: In T2 stage!\n"));
        return FALSE;
    }

    //CallNetMsgBox(NULL, NMB_FL_OK, NETUI_GETNETSTR_CACHED_LEASE);

    if (PutNetUp(pDhcp) != DHCP_SUCCESS) {
        DEBUGMSG(ZONE_FUNCTION|ZONE_AUTOIP, (L"DHCP:-CouldPingGateway: PutNetUp(%s) failed\n",
            AddrToString(pDhcp->IPAddr, Addr)));
        return FALSE;
    }

    if (PingDhcp(pDhcp->Gateway)) {
        DEBUGMSG(ZONE_FUNCTION|ZONE_AUTOIP, (L"DHCP:-CouldPingGateway: Received response from default gateway\n"));
        return TRUE;
    }

    DEBUGMSG(ZONE_FUNCTION|ZONE_AUTOIP, (L"DHCP:-CouldPingGateway: No response to ping\n"));    
    TakeNetDown(pDhcp, FALSE, TRUE);      // retain IPAddr
    return FALSE;

}   // CouldPingGateway


//
// Schedule a CTE timer so ProcessAutoIP can look for a DHCP server again.
//
void
StartAutoIPTimer(
    DhcpInfo * pDhcp
    )
{
    FILETIME Ft;
    FILETIME CurTime;

    Ft.dwLowDateTime = pDhcp->AutoInterval;
    Ft.dwHighDateTime = 0;
    mul64_32_64(&Ft, TEN_M, &Ft);

    GetCurrentFT(&CurTime);
    add64_64_64(&CurTime, &Ft, &Ft);

    CTEStartFTimer(&pDhcp->Timer, Ft, (CTEEventRtn)ProcessAutoIP, pDhcp);
    DEBUGMSG(ZONE_AUTOIP, (L"DHCP:StartAutoIPTimer - AutoIP event scheduled\n"));
}

//
// When we autoconfigure our IP address we must continuously look for a DHCP server appearing on our net.
// The default interval is 5 minutes.
//
void
ProcessAutoIP(
    DhcpInfo *pDhcp
    )
{
    int		cPkt;
    STATUS	Status;
    DhcpPkt	Pkt;
    uint	IPAddr;
	DhcpInfo	**ppDhcp;

    DEBUGMSG(ZONE_FUNCTION|ZONE_AUTOIP, (L"DHCP:+ProcessAutoIP\n"));

    Status = DHCP_SUCCESS;
	if (*(ppDhcp = _FindDhcp(pDhcp, NULL))) {
        if (SetDHCPNTE(pDhcp)) {
            if (DHCP_SUCCESS == (Status = DhcpInitSock(pDhcp, 0))) {
    
                //
                // Save current auto config IP address and set dhcp IP address to 0, to follow spec.
                // Neither ciaddr nor DHCP_REQ_IP_OP should reflect the auto config IP address; they
                // should both be 0.
                //
                IPAddr = pDhcp->IPAddr;
                pDhcp->IPAddr = 0;
                BuildDhcpPkt(pDhcp, &Pkt, DHCPDISCOVER, NEW_PKT_FL, pDhcp->ReqOptions, &cPkt);
                pDhcp->IPAddr = IPAddr;
        
                Status = SendDhcpPkt(pDhcp, &Pkt, cPkt, DHCPOFFER, ONCE_FL|BCAST_FL);
                if (DHCP_SUCCESS == Status) {
                    //
                    // If the OFFER is from a DHCP allocator, then we should request our auto config IP address
                    // It is a DHCP allocator if it is on the same subnet as auto config.
                    //
                    if ((pDhcp->IPAddr & pDhcp->SubnetMask) == pDhcp->AutoSubnet) {
                        pDhcp->IPAddr = IPAddr;
                        BuildDhcpPkt(pDhcp, &Pkt, DHCPREQUEST, RIP_PKT_FL, pDhcp->ReqOptions, &cPkt);
                        Status = SendDhcpPkt(pDhcp, &Pkt, cPkt, DHCPACK, 
							BCAST_FL | DFT_LOOP_FL);
                        
						if (DHCP_SUCCESS == Status) {
                            DEBUGMSG(ZONE_AUTOIP, (L"DHCP:ProcessAutoIP - Leased auto cfg IP addr with ICS DHCP allocater/server.\n"));
                            ClearDHCPNTE(pDhcp);
                            CloseDhcpSocket(pDhcp);
                            CTEFreeLock(&pDhcp->Lock, 0);
                            return;

                        } else {
                            Status = DHCP_SUCCESS;  // Error, fall through to switch-over case
                            DEBUGMSG(ZONE_AUTOIP, (L"DHCP:ProcessAutoIP - Trouble with ICS DHCP allocater/server.\n"));
                        }
                    }
                }

                ClearDHCPNTE(pDhcp);
                CloseDhcpSocket(pDhcp);
        
                if (DHCP_SUCCESS == Status) {
                    //
                    // A DHCP server has appeared on the net. We need to discard the auto IP address and DHCP for one.
                    //
                    DEBUGMSG(ZONE_AUTOIP, (L"DHCP:ProcessAutoIP - Saw a DHCP server, discarding auto IP\n"));
    

					*ppDhcp = pDhcp->pNext;
					CTEFreeLock(&v_GlobalListLock, 0);
    
                    //
                    // Remember what was in this DHCPOFFER so RequestDHCPAddr doesn't send another DISCOVER

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产成人午夜在线一区| 成人av电影在线网| 欧美美女一区二区| 亚洲国产欧美另类丝袜| 欧美日韩视频专区在线播放| 午夜av电影一区| 日韩精品一区二区三区视频播放 | 日本一区二区视频在线| 国产成人8x视频一区二区| 国产精品你懂的| 日本韩国欧美国产| 婷婷丁香久久五月婷婷| 日韩免费一区二区| 成人免费视频国产在线观看| 亚洲精品ww久久久久久p站| 欧美精品99久久久**| 国模大尺度一区二区三区| 国产日本欧洲亚洲| 欧美在线免费观看视频| 毛片av一区二区| 国产精品乱人伦中文| 欧美三级视频在线| 麻豆精品久久久| 亚洲欧洲日韩av| 欧美一区二区在线播放| 国产成人精品免费网站| 亚洲一区二区偷拍精品| 久久美女艺术照精彩视频福利播放 | 欧美成人a视频| 成人一级黄色片| 香蕉久久夜色精品国产使用方法| 欧美本精品男人aⅴ天堂| 91视视频在线观看入口直接观看www| 天天做天天摸天天爽国产一区| 26uuu精品一区二区| 91福利资源站| 国产精品一区二区在线观看不卡| 樱桃视频在线观看一区| 欧美精品一区视频| 欧美在线不卡一区| 成人三级伦理片| 日韩精品福利网| 亚洲激情自拍偷拍| 久久久久97国产精华液好用吗| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 久久9热精品视频| 亚洲精品成人少妇| 国产欧美一区二区精品秋霞影院| 欧美私模裸体表演在线观看| 菠萝蜜视频在线观看一区| 麻豆精品久久精品色综合| 亚洲成a人片在线观看中文| 国产精品麻豆欧美日韩ww| 亚洲精品一区二区三区香蕉| 欧美日韩亚洲综合| 色老综合老女人久久久| 国产91精品免费| 国产精品一区在线观看你懂的| 日韩在线a电影| 天天综合网天天综合色| 亚洲精品国产一区二区三区四区在线| 久久久久久久久一| 欧美mv和日韩mv的网站| 欧美日本在线播放| 欧美写真视频网站| 在线视频一区二区免费| 色天天综合色天天久久| 91在线视频网址| 99re热这里只有精品视频| 国产成人a级片| 国产成人av自拍| 成人免费黄色大片| 大胆欧美人体老妇| 成人手机在线视频| 国产宾馆实践打屁股91| 国产成人在线色| 大美女一区二区三区| 成人app软件下载大全免费| 成人午夜av电影| 91美女蜜桃在线| 欧美午夜在线观看| 欧美精品自拍偷拍| 欧美一区二区三区四区五区| 精品免费国产二区三区| 精品国产一区二区亚洲人成毛片| 日韩欧美一级二级| 久久综合久久鬼色中文字| 亚洲精品一区二区三区蜜桃下载| 国产丝袜欧美中文另类| 国产精品麻豆视频| 一区二区免费看| 丝袜诱惑亚洲看片| 国产一区二区精品久久99 | 菠萝蜜视频在线观看一区| 成人国产精品免费| 91久久线看在观草草青青| 欧美无砖砖区免费| 日韩欧美国产电影| 亚洲国产成人私人影院tom| 亚洲精品中文字幕在线观看| 亚洲成国产人片在线观看| 精品制服美女丁香| 成人18视频日本| 欧美日韩国产一二三| 久久先锋影音av鲁色资源 | 一区二区三区四区蜜桃| 天堂va蜜桃一区二区三区漫画版 | 成人午夜免费电影| 欧洲一区二区三区在线| 欧美一区二区精美| 国产亚洲1区2区3区| 玉足女爽爽91| 久久99国产精品久久99| 91亚洲国产成人精品一区二区三| 欧美日韩视频在线一区二区| 国产三级精品视频| 亚洲精品一二三| 国产做a爰片久久毛片| 91小视频免费看| 日韩欧美一级二级三级久久久| 亚洲图片激情小说| 久久国产麻豆精品| 欧美性一二三区| 欧美国产综合一区二区| 日韩avvvv在线播放| proumb性欧美在线观看| 日韩情涩欧美日韩视频| 亚洲激情图片一区| 国产精品66部| 日韩女优av电影| 亚洲综合一区在线| 成人一区二区在线观看| 91麻豆精品国产| 亚洲精品国产成人久久av盗摄| 国内成人自拍视频| 欧美日本视频在线| 一区二区三区日本| 成人精品鲁一区一区二区| 日韩午夜中文字幕| 午夜伊人狠狠久久| 一本一道久久a久久精品| 国产日韩欧美不卡在线| 蜜芽一区二区三区| 精品视频一区三区九区| 国产精品国产三级国产普通话蜜臀| 久久99国内精品| 日韩一区二区三免费高清| 午夜伦欧美伦电影理论片| 91蝌蚪porny| 最新热久久免费视频| 国产成人8x视频一区二区| 精品国产污网站| 美女网站一区二区| 日韩三级中文字幕| 丝袜诱惑亚洲看片| 欧美日韩国产首页| 亚洲成av人综合在线观看| 欧美视频中文字幕| 亚洲一区二区三区中文字幕| 色综合亚洲欧洲| 亚洲理论在线观看| 色悠悠久久综合| 亚洲精品国产精华液| 一本大道久久精品懂色aⅴ| 亚洲欧洲日产国码二区| 成人黄色a**站在线观看| 国产精品久久毛片| 99精品视频在线观看免费| 中文字幕在线播放不卡一区| 成人av在线播放网址| 亚洲色图一区二区| 色综合一区二区| 五月综合激情日本mⅴ| 91精品国产综合久久精品| 免费成人在线视频观看| 欧美成人乱码一区二区三区| 久久99精品久久久久久国产越南| 久久综合久久99| 国产剧情在线观看一区二区| 国产嫩草影院久久久久| 国产精品一二三四区| 国产精品乱码人人做人人爱| 99riav久久精品riav| 夜夜嗨av一区二区三区四季av | 日韩精品一区二区三区三区免费 | 久久久午夜精品| 成人小视频免费观看| 一区在线观看免费| 欧美色国产精品| 久久福利资源站| 亚洲欧洲av一区二区三区久久| 91黄色在线观看| 麻豆精品国产传媒mv男同| 久久亚洲春色中文字幕久久久| av成人动漫在线观看| 丝袜美腿成人在线| 国产丝袜欧美中文另类| 欧美日韩综合一区| 亚洲精品一区二区三区精华液| 久久精品999|