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

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

?? sessionmgr.c

?? Vista 核心Rally技術之-LLTD 實現源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
 * LICENSE NOTICE.
 *
 * Use of the Microsoft Windows Rally Development Kit is covered under
 * the Microsoft Windows Rally Development Kit License Agreement,
 * which is provided within the Microsoft Windows Rally Development
 * Kit or at http://www.microsoft.com/whdc/rally/rallykit.mspx. If you
 * want a license from Microsoft to use the software in the Microsoft
 * Windows Rally Development Kit, you must (1) complete the designated
 * "licensee" information in the Windows Rally Development Kit License
 * Agreement, and (2) sign and return the Agreement AS IS to Microsoft
 * at the address provided in the Agreement.
 */

/*
 * Copyright (c) Microsoft Corporation 2005.  All rights reserved.
 * This software is provided with NO WARRANTY.
 */

/* This is the session-manager state machine (smS) event distributor */

#include <stdio.h>
#include <string.h>
#include <assert.h>

#include "globals.h"

#include "statemachines.h"
#include "packetio.h"

static bool_t
is_acking_me(void)
{
    etheraddr_t             *p  = (etheraddr_t*)(g_discover_hdr + 1);
    etheraddr_t          *limit = (etheraddr_t*)(((char*)g_ethernet_hdr) + g_rcvd_pkt_len);

    uint16_t                gen = ntohs(g_discover_hdr->mh_gen);
    uint16_t        numstations = ntohs(g_discover_hdr->mh_numstations);

    bool_t               acking = FALSE;
    int  i;

    if (g_this_event.isAckingMe == TRUE)  return TRUE;

    IF_TRACED(TRC_PACKET)
	dbgprintf("gen=%d, numsta=%d, stations=[", gen, numstations);
    END_TRACE

    /* parse seenlist, and decide if we are acked in this frame */

    for (i=0; p+1 <= limit && i<numstations; i++, p++)
    {
        IF_TRACED(TRC_PACKET)
	    dbgprintf(ETHERADDR_FMT " ", ETHERADDR_PRINT(p));
        END_TRACE

	if (ETHERADDR_EQUALS(p, &g_hwaddr))
	{
	    acking = TRUE;
	    /* we could break out early, but we also want to test the
	     * numstations count is accurate so we loop over all the
	     * acked addresses */
	}
    }
    IF_TRACED(TRC_PACKET)
	dbgprintf("]\n");
    END_TRACE

    if (i != numstations)
	warn("rx_discover: truncated frame: ended at station %d, "
	     "but numstations claimed %d\n", i, numstations);

    return acking;
}


static bool_t
is_conflicting_ssn( session_t *ssn )
{
    if ((g_topo_session) && (g_topo_session->ssn_is_valid==TRUE) && /* if there already IS a topo-session, */
        (ssn != g_topo_session) &&			 /* and this is not the same session,   */
        (ssn->ssn_TypeOfSvc == ToS_TopologyDiscovery) && /* and this IS a topo-ssn Discover,    */
                                                         /* and the real-addresses don't match, */
        !(ETHERADDR_EQUALS(&ssn->ssn_mapper_real, &g_topo_session->ssn_mapper_real)))
    { /* then this is a conflicting Discover */
        return TRUE;
    }
    return FALSE;
}

/*====================== S T A T E   H A N D L E R S ======================*/


/***********************  N A S C E N T   S T A T E  ***********************/

static
enum sm_Status
smS_NascentHandler  ( protocol_event_t *evt )
{
    IF_TRACED(TRC_STATE)
        printf("smS (Nascent): Entered with event %s",smEvent_names[evt->evtType]);
        if (g_this_event.evtType==evtPacketRcvd)
        {
            printf(" (%s)\n",Topo_opcode_names[g_opcode]);
        } else {
            puts("");
        }
    END_TRACE

    switch (evt->evtType)
    {
      case evtDiscoverRcvd:
        /* The first Topo ssn is the definitive one */
/**/    DEBUG({printf("session's ToS is %s %d\n",Lld2_tos_names[evt->ssn->ssn_TypeOfSvc],evt->ssn->ssn_TypeOfSvc);})
        if ((evt->ssn->ssn_TypeOfSvc == ToS_TopologyDiscovery) &&
            ((g_topo_session == NULL) || (g_topo_session->ssn_is_valid==FALSE)))
        {
/**/        DEBUG({printf("noting new TOPO session @ %X\n",(uint)evt->ssn);})
            g_topo_session = evt->ssn;
        }
        /* check for a conflicting TOPO Discover (rogue mapper) */
        if (is_conflicting_ssn( evt->ssn ))
        {
            evt->ssn->ssn_state = smS_Temporary;
        } else {
/**/        DEBUG({puts("not conflicting....");})
            if (is_acking_me())
            {
/**/            DEBUG({puts("is acking me....");})
                evt->isAckingMe = TRUE;
                IF_TRACED(TRC_STATE)
                    printf("smS[%X] (Nascent): Leaving for Complete.\n", (uint)evt->ssn);
                END_TRACE
                evt->ssn->ssn_state = smS_Complete;
                restart_inactivity_timer((evt->ssn->ssn_TypeOfSvc == ToS_TopologyDiscovery) ? TOPO_CMD_ACTIVITYTIMEOUT : TOPO_GENERAL_ACTIVITYTIMEOUT);
            } else {
/**/            DEBUG({puts("is NOT acking me....");})
                evt->isAckingMe = FALSE;
                IF_TRACED(TRC_STATE)
                    printf("smS[%X] (Nascent): Leaving for Pending.\n", (uint)evt->ssn);
                END_TRACE
                evt->ssn->ssn_state = smS_Pending;
                restart_inactivity_timer(TOPO_HELLO_ACTIVITYTIMEOUT);
            }
        }
        break;

      case evtPacketRcvd:
      case evtEmitRcvd:
      case evtResetRcvd:

      case evtBlockTimeout:
      case evtChargeTimeout:
      case evtEmitTimeout:
      case evtHelloDelayTimeout:
      case evtInactivityTimeout:
      default :
        IF_TRACED(TRC_STATE)
            printf("smS: Nascent handler ignored event %s\n",smEvent_names[evt->evtType]);
        END_TRACE
        break;
    }

    return PROCESSING_COMPLETED;
}

/***********************  P E N D I N G   S T A T E  ***********************/

static
enum sm_Status
smS_PendingHandler  ( protocol_event_t *evt )
{
    IF_TRACED(TRC_STATE)
        printf("smS[%p%s] (Pending): Entered with event %s", evt->ssn,
               (evt->ssn == g_topo_session)?"-T":"", smEvent_names[evt->evtType]);
        if (g_this_event.evtType==evtPacketRcvd)
        {
            printf(" (%s)\n",Topo_opcode_names[g_opcode]);
        } else {
            puts("");
        }
    END_TRACE

     switch (evt->evtType)
    {
      case evtDiscoverRcvd:
        /* Normally, we are entered with isAckingMe initialized to FALSE,
         * but the faked events from other state machines will all have it
         * set to TRUE already, which will be recognized in is_acking_me() */

        /* The changed-XID arcs must also be handled here */

        if (is_acking_me())
        {
//*/        DEBUG({puts("is acking me....");})
            evt->isAckingMe = TRUE;

            /* Discover-acking-changed-XID arc says we must reset the smT if this
             * event is associated with the topo-session. Then we process it as
             * the Discover, afterwards. */
            if (g_sequencenum  &&  evt->ssn->ssn_XID != g_sequencenum  &&  g_topo_session == evt->ssn)
            {
                bool_t  isActuallyInternal = g_this_event.isInternalEvt;

                IF_TRACED(TRC_PACKET)
                    printf("smS (Pending): Discover-ack, new XID (%d) != old XID (%d); resetting topo session....\n",
                           g_sequencenum, evt->ssn->ssn_XID);
                END_TRACE
                g_this_event.evtType = evtResetRcvd;
                g_this_event.isInternalEvt = TRUE;
                smT_process_event( &g_this_event );
                g_this_event.evtType = evtDiscoverRcvd;
                g_this_event.isInternalEvt = isActuallyInternal;
                IF_TRACED(TRC_PACKET)
                    printf("smS (Pending): After topo reset, re-creating the topo-session ptr....\n");
                END_TRACE
                g_topo_session = evt->ssn;
                /* Regardless of whether this is acking or not, we must accept the new XID, unless it's zero */
                evt->ssn->ssn_XID = g_sequencenum;
            }

            IF_TRACED(TRC_STATE)
                printf("smS[%X] (Pending): Leaving for Complete.\n", (uint)evt->ssn);
            END_TRACE
            evt->ssn->ssn_state = smS_Complete;
            restart_inactivity_timer((evt->ssn->ssn_TypeOfSvc == ToS_TopologyDiscovery) ? TOPO_CMD_ACTIVITYTIMEOUT : TOPO_GENERAL_ACTIVITYTIMEOUT);
        } else {
            /* Discover-noack-changed-XID arc says we must reset the smT if this
             * event is associated with the topo-session. Then we process it as
             * the Discover, afterwards. */
            if (g_sequencenum  &&  evt->ssn->ssn_XID != g_sequencenum  &&  g_topo_session == evt->ssn)
            {
                bool_t  isActuallyInternal = g_this_event.isInternalEvt;

                IF_TRACED(TRC_PACKET)
                    printf("smS (Pending): Discover-noack, new XID (%d) != old XID (%d); resetting topo session....\n",
                           g_sequencenum, evt->ssn->ssn_XID);
                END_TRACE
                g_this_event.evtType = evtResetRcvd;
                g_this_event.isInternalEvt = TRUE;
                smT_process_event( &g_this_event );
                g_this_event.evtType = evtDiscoverRcvd;
                g_this_event.isInternalEvt = isActuallyInternal;
                IF_TRACED(TRC_PACKET)
                    printf("smS (Pending): After topo reset, re-creating the topo-session ptr....\n");
                END_TRACE
                g_topo_session = evt->ssn;
                /* Regardless of whether this is acking or not, we must accept the new XID, unless it's zero */
                evt->ssn->ssn_XID = g_sequencenum;
            }
            restart_inactivity_timer(TOPO_HELLO_ACTIVITYTIMEOUT);
        }
        break;

      case evtInactivityTimeout:
      case evtResetRcvd:
        /* is this session the topology session? */
        if (evt->ssn == g_topo_session  &&  g_topo_session->ssn_is_valid == TRUE)
        {
            /* Must reset the Temporary sessions, as well, then. */
            session_t   *ssn = &g_sessions[0];
            int i;
            for (i=0; i < MAX_NUM_SESSIONS; ssn++, i++)
            {
                if ( (ssn->ssn_is_valid) && (ssn->ssn_state==smS_Temporary) )
                {
                    IF_TRACED(TRC_STATE)
                        printf("smS[%X] (Temporary): Leaving for Nascent.\n", (uint)ssn);
                    END_TRACE
                    ssn->ssn_state = smS_Nascent;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本不卡的三区四区五区| 欧美日韩国产色站一区二区三区| 26uuu亚洲| 国产乱子伦视频一区二区三区 | 丁香激情综合五月| 国产精品色一区二区三区| 高清日韩电视剧大全免费| 国产精品久久久久久福利一牛影视 | 亚洲国产中文字幕在线视频综合 | 91精品国产欧美一区二区成人| 视频一区免费在线观看| 欧美tickle裸体挠脚心vk| 国产一区二区三区四| 国产精品成人免费| 欧美偷拍一区二区| 日本欧美大码aⅴ在线播放| 久久婷婷色综合| 91一区二区三区在线观看| 亚洲成a人v欧美综合天堂下载| 欧美一卡二卡三卡| 成人国产亚洲欧美成人综合网| 亚洲欧美日韩小说| 欧美一级淫片007| 成人一区二区三区视频| 亚洲成年人网站在线观看| 国产亚洲婷婷免费| 欧美综合视频在线观看| 黄色日韩三级电影| 亚洲色图清纯唯美| 日韩限制级电影在线观看| 成人综合婷婷国产精品久久蜜臀 | 欧美一级午夜免费电影| jizz一区二区| 日本不卡1234视频| 亚洲裸体xxx| 欧美tickling网站挠脚心| 一本大道av伊人久久综合| 美腿丝袜亚洲三区| 伊人色综合久久天天| 久久久美女艺术照精彩视频福利播放| 色综合一区二区| 国产专区欧美精品| 日韩精品电影在线观看| 中文字幕一区二区视频| 精品少妇一区二区三区| 欧美蜜桃一区二区三区| 一本一道久久a久久精品综合蜜臀| 久久国产视频网| 一区二区三区中文字幕电影| 26uuuu精品一区二区| 欧美日韩成人综合在线一区二区| 成人国产电影网| 久草热8精品视频在线观看| 亚洲国产精品影院| 亚洲欧洲国产专区| 国产日韩精品视频一区| 欧美一区二区三区视频免费播放| 色噜噜狠狠色综合中国| 成人黄色电影在线| 懂色av一区二区夜夜嗨| 久草在线在线精品观看| 免费成人av在线| 亚洲成a人片在线不卡一二三区| 亚洲免费伊人电影| 国产精品久久久久久久蜜臀| 久久午夜免费电影| 欧美videos大乳护士334| 91精品欧美综合在线观看最新| 一本色道亚洲精品aⅴ| 不卡电影一区二区三区| 成人精品鲁一区一区二区| 国产精品1区2区| 国产精品资源站在线| 国产精品一区二区你懂的| 国产一区在线观看视频| 九色|91porny| 韩国女主播一区二区三区| 激情深爱一区二区| 精品影院一区二区久久久| 久久99精品国产91久久来源| 九色综合国产一区二区三区| 国产伦精品一区二区三区视频青涩| 国产最新精品免费| 国产成人免费视频| 高清视频一区二区| 91视频国产观看| 日本大香伊一区二区三区| 在线免费不卡视频| 欧美日韩精品是欧美日韩精品| 欧美日韩一二三区| 欧美喷水一区二区| 欧美成人精品3d动漫h| 久久亚洲精华国产精华液| 日本一区免费视频| 亚洲欧美激情小说另类| 亚洲午夜免费视频| 免费视频最近日韩| 国产成人免费在线视频| 97国产精品videossex| 欧美午夜电影一区| 日韩欧美激情一区| 欧美国产日韩一二三区| 一区二区免费视频| 免费看黄色91| youjizz久久| 欧美日韩一区成人| 久久精品夜色噜噜亚洲aⅴ| 1区2区3区国产精品| 亚洲国产美女搞黄色| 久久精品国产精品亚洲综合| 成人午夜免费电影| 欧美日韩国产一区| 精品国产a毛片| 亚洲视频在线一区二区| 日本欧美大码aⅴ在线播放| 成人激情文学综合网| 欧美美女bb生活片| 国产亚洲精品bt天堂精选| 亚洲精品视频在线观看免费 | 国产精品国产三级国产aⅴ原创| 亚洲同性gay激情无套| 婷婷成人激情在线网| 国产一区在线视频| 在线精品视频一区二区三四| 日韩欧美国产三级| 一区二区三区久久| 狠狠狠色丁香婷婷综合久久五月| av在线播放一区二区三区| 6080亚洲精品一区二区| 成人免费在线观看入口| 麻豆精品视频在线观看视频| 一本色道亚洲精品aⅴ| 久久色在线视频| 午夜a成v人精品| gogo大胆日本视频一区| 久久夜色精品一区| 日韩精品午夜视频| 日本高清免费不卡视频| 久久九九影视网| 免费观看久久久4p| 欧美亚洲国产一区在线观看网站| 久久久影院官网| 手机精品视频在线观看| av一区二区三区在线| 久久综合国产精品| 亚洲成av人片在www色猫咪| 成人午夜精品一区二区三区| 日韩一区二区三区电影在线观看 | 午夜精品久久久| av网站免费线看精品| 国产午夜亚洲精品羞羞网站| 日韩成人免费电影| 在线观看91精品国产入口| 国产精品麻豆久久久| 国产精品夜夜嗨| 欧美一二三在线| 调教+趴+乳夹+国产+精品| 欧美日韩精品高清| 亚洲国产欧美日韩另类综合| 色哟哟国产精品| 亚洲欧美偷拍三级| 91麻豆蜜桃一区二区三区| 亚洲欧美在线视频| 99久久精品久久久久久清纯| 欧美高清在线精品一区| 国v精品久久久网| 国产精品天美传媒| 成人av电影在线观看| 国产精品欧美一区喷水| 成人午夜免费电影| 亚洲丝袜另类动漫二区| 91福利社在线观看| 亚洲高清免费视频| 91精品国产91久久久久久一区二区| 亚洲成人激情综合网| 欧美日产在线观看| 免费一级欧美片在线观看| 精品国精品国产| 国产精品一二三四五| 中文字幕二三区不卡| 91同城在线观看| 亚洲一区二区三区激情| 欧美日韩亚洲丝袜制服| 秋霞成人午夜伦在线观看| 精品国产乱码久久久久久图片 | 久久久久国产精品厨房| 成人免费视频一区| 亚洲欧美日韩国产手机在线| 欧美图区在线视频| 九九热在线视频观看这里只有精品| 久久久久久久国产精品影院| 国产成人精品亚洲午夜麻豆| 中文字幕亚洲不卡| 欧美丰满少妇xxxxx高潮对白| 久久99精品久久久久久动态图| 国产欧美日韩一区二区三区在线观看| 大胆欧美人体老妇| 亚洲图片自拍偷拍| 欧美va日韩va| 91在线国产福利|