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

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

?? ctstate.c

?? Vista 核心Rally技術之-LLTD 實現源代碼
?? C
字號:
/*
 * 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.
 */

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

#include "globals.h"

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

/****************************
 * Timeout handlers - 
 * these are the time-based entry points, which also clock the state machine.
 */

void
state_block_timeout(void *cookie)
{
    g_block_timer = NULL;
    g_this_event.evtType = evtBlockTimeout;
    state_process_timeout();
}

void
state_charge_timeout(void *cookie)
{
    g_charge_timer     = NULL;
    g_ctc_packets      = 0;
    g_ctc_bytes        = 0;
    g_this_event.evtType  = evtChargeTimeout;
    g_this_event.ssn      = (session_t*) cookie;
    state_process_timeout();
}

void
state_emit_timeout(void *cookie)
{
    g_emit_timer       = NULL;
    g_this_event.evtType  = evtEmitTimeout;

    /* Probes are forced to associate with the mapping session, if there is one. */
    if (g_topo_session != NULL  &&  g_topo_session->ssn_is_valid)
    {
        g_this_event.ssn = g_topo_session;
    }

    state_process_timeout();
}

void
state_hello_delay_timeout(void *cookie)
{
    g_hello_timer      = NULL;
    g_this_event.evtType  = evtHelloDelayTimeout;
    g_this_event.ssn      = (session_t*) cookie;
    state_process_timeout();
}

void
state_inactivity_timeout(void *cookie)
{
    g_this_event.evtType  = evtInactivityTimeout;
    g_this_event.ssn      = (session_t*) cookie;
    g_this_event.ssn->ssn_InactivityTimer = NULL;
    state_process_timeout();
}


/* This function locates an existing session that is associated with the passed-in address */
static session_t *
find_session(etheraddr_t *this_addr)
{
    session_t   *ssn = &g_sessions[0];
    int i;

    for (i=0; i < MAX_NUM_SESSIONS; ssn++, i++)
    {
        if ( (ssn->ssn_is_valid) && (ETHERADDR_EQUALS(&ssn->ssn_mapper_real, this_addr)) )
        {
            DEBUG({printf("find_session returning session %d @ %X\n",i,(uint)ssn);})
            return ssn;
        }
    }
    DEBUG({puts("find_session returning NULL");})
    return NULL;
}


static session_t *
new_session()
{
    session_t   *ssn = &g_sessions[0];
    int i;

    for (i=0; i < MAX_NUM_SESSIONS; ssn++, i++)
    {
        if ( !(ssn->ssn_is_valid) )
        {
            ssn->ssn_is_valid = TRUE;
            ssn->ssn_XID = 0;
            memset(&ssn->ssn_mapper_real,0,sizeof(etheraddr_t));
            memset(&ssn->ssn_mapper_current,0,sizeof(etheraddr_t));
            ssn->ssn_use_broadcast = TRUE;
            ssn->ssn_TypeOfSvc = ToS_Unknown;
            ssn->ssn_InactivityTimer = NULL;
            return ssn;
        }
    }
    return NULL;
}


void
dump_packet(uint8_t *buf)
{
    topo_ether_header_t*	ehdr;
    topo_base_header_t*		bhdr;
    topo_discover_header_t*	dhdr;
    topo_hello_header_t*	hhdr;
    topo_qltlv_header_t*	qlhdr;
    topo_queryresp_header_t*	qrhdr;
    topo_flat_header_t*         fhdr;

    uint16_t	seqNum;
    uint16_t	genNum;
    uint16_t	numSta;
    uint16_t	tripleCnt;
    uint16_t	pktCnt;
    uint32_t	byteCnt;

    ehdr = (topo_ether_header_t*)(buf);
    bhdr = (topo_base_header_t*)(ehdr + 1);
    dhdr = (topo_discover_header_t*)(bhdr + 1);
    hhdr = (topo_hello_header_t*)(bhdr + 1);
    qlhdr = (topo_qltlv_header_t*)(bhdr + 1);
    qrhdr = (topo_queryresp_header_t*)(bhdr + 1);
    fhdr  = (topo_flat_header_t*)(bhdr + 1);

    /* Print Ether-hdr */
    printf("==================\nEthernet-header:\n  src=" ETHERADDR_FMT " dst=" ETHERADDR_FMT " E-type=0x%0X\n\n",
		ETHERADDR_PRINT(&ehdr->eh_src), ETHERADDR_PRINT(&ehdr->eh_dst), ehdr->eh_ethertype);

    /* Print the Base hdr */
    seqNum = ntohs(bhdr->tbh_seqnum);
    printf("Base-header:\n  version=%d  ToS=%s  Opcode=%s  SeqNum=%d\n", bhdr->tbh_version, Lld2_tos_names[bhdr->tbh_tos],
           Topo_opcode_names[bhdr->tbh_opcode], seqNum);

    printf("  real-src=" ETHERADDR_FMT " real-dst=" ETHERADDR_FMT "\n\n",
		ETHERADDR_PRINT(&bhdr->tbh_realsrc), ETHERADDR_PRINT(&bhdr->tbh_realdst));
 
    switch (bhdr->tbh_opcode)
    {
      case Opcode_Hello:
        genNum = ntohs(hhdr->hh_gen);
        printf("Hello:   generation-number=0x%0X\n", genNum);
        printf("  mapper current MAC =" ETHERADDR_FMT "   mapper apparent MAC =" ETHERADDR_FMT "\n\n",
		ETHERADDR_PRINT(&hhdr->hh_curmapraddr), ETHERADDR_PRINT(&hhdr->hh_aprmapraddr));
        break;

      case Opcode_Discover:
        genNum = ntohs(dhdr->mh_gen);
        numSta = ntohs(dhdr->mh_numstations);
        printf("Discover:   generation-number=0x%0X   num-stations=%d\n", genNum, numSta);
        break;

      case Opcode_QueryResp:
        tripleCnt = ntohs(qrhdr->qr_numdescs);
        printf("QueryResp:  num-triples=%d   %smore to send\n", tripleCnt & 0x7FFF, (tripleCnt & 0x8000) ? "":"no ");
        break;

      case Opcode_Flat:
        pktCnt  = ntohs(fhdr->fh_ctc_packets);
        byteCnt = ntohl(fhdr->fh_ctc_bytes);
        printf("Flat:  ctc-bytes=%d, ctc-packets=%d\n", byteCnt, pktCnt);
        break;

      default:
        break;
    }
}



/*****************************************************************************
 *
 * This code processes the current packet-event (in g_this_event) by locating
 * (and possibly creating) the session with which it must be associated,
 * then passing it to the 3 state machines, smS, smE, and smT, in that order.
 *
 *****************************************************************************/ 
extern	etheraddr_t	uutMAC;

uint
state_process_packet()
{
    session_t           *this_session;
    enum sm_Status       smStatus;

    IF_TRACED((TRC_STATE|TRC_PACKET))
        printf("state_process_packet: Entered with event %s",smEvent_names[g_this_event.evtType]);
        if (g_this_event.evtType==evtPacketRcvd)
        {
            printf(" (%s)\n",Topo_opcode_names[g_opcode]);
        } else {
            puts("");
        }
    END_TRACE

    if (g_opcode == Opcode_Hello  &&  ETHERADDR_IS_ZERO(&uutMAC))
    {
        memcpy(&uutMAC, &g_base_hdr->tbh_realsrc, sizeof(etheraddr_t));
    }
    dump_packet(g_rxbuf);

    return 0;	/* Success! */
}


/******************************************************************************
 *
 * This code processes the current timeout-event (in g_this_event). Any session
 * associated with this event (only happens with activity-timeouts) is already
 * noted in the GLOBAL g_this_event (g_this_event).
 *
 ******************************************************************************/ 

uint
state_process_timeout()
{
    enum sm_Status         smStatus;

    IF_TRACED(TRC_STATE)
        if (g_this_event.evtType!=evtBlockTimeout)
            printf("state_process_timeout: Entered with event %s\n",smEvent_names[g_this_event.evtType]);
    END_TRACE

    return 0;	/* Success! */
}


/****************************
 * Helper functions -
 * actions performed as part of state processing.
 */

/* Restart the inactivity timer for the session associated with the current event */
void
restart_inactivity_timer(uint32_t timeout)
{
    struct timeval now;

    if (g_this_event.ssn == NULL  ||  g_this_event.ssn->ssn_is_valid != TRUE)   return;

    gettimeofday(&now, NULL);
    timeval_add_ms(&now, timeout);
    CANCEL(g_this_event.ssn->ssn_InactivityTimer);
    g_this_event.ssn->ssn_InactivityTimer = event_add(&now, state_inactivity_timeout, g_this_event.ssn);
}


/* Searches session table - returns TRUE if all valid sessions are in smS_Complete state */

bool_t
OnlyCompleteSessions(void)
{
    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_Complete)
        {
            return FALSE;
        }
    }
    return TRUE;
}


/* Searches session table - returns TRUE if all sessions are invalid */

bool_t
SessionTableIsEmpty(void)
{
    session_t   *ssn = &g_sessions[0];
    int i;

    for (i=0; i < MAX_NUM_SESSIONS; ssn++, i++)
    {
        if (ssn->ssn_is_valid)
        {
            return FALSE;
        }
    }
    return TRUE;
}

bool_t
set_emit_timer(void)
{
    topo_emitee_desc_t *ed;

    assert(g_emit_remaining > 0);
    assert(g_emit_timer == NULL);

    /* get the next emitee_desc and schedule a callback when it is due
     * to be transmitted */
    ed = g_emitdesc;
    if (ed->ed_pause != 0)
    {
	struct timeval now;
	gettimeofday(&now, NULL);
	timeval_add_ms(&now, ed->ed_pause);
	g_emit_timer = event_add(&now, state_emit_timeout, NULL);
        return TRUE;
    } else {
	/* no pause; return PAUSE=FALSE */
	return FALSE;
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩有码一区二区三区| 午夜日韩在线电影| 欧美一区二区精品| 欧美精品乱码久久久久久按摩| 99在线精品一区二区三区| 国产91丝袜在线播放0| 秋霞国产午夜精品免费视频| 日韩 欧美一区二区三区| 视频一区欧美日韩| 久久国产人妖系列| 精久久久久久久久久久| 国产高清亚洲一区| 成人app网站| 一本大道久久a久久综合婷婷 | 在线观看免费一区| 在线亚洲+欧美+日本专区| 91传媒视频在线播放| 欧美视频在线观看一区| 欧美精品久久99久久在免费线| 欧美色综合影院| 日韩精品影音先锋| 国产亚洲精品资源在线26u| 一区在线观看视频| 亚洲精品v日韩精品| 视频一区国产视频| 丁香桃色午夜亚洲一区二区三区| 成人性生交大片免费| 色婷婷综合中文久久一本| 欧美日韩一区二区三区四区| 欧美成人综合网站| 国产精品理伦片| 天堂精品中文字幕在线| 国产风韵犹存在线视精品| 色综合久久88色综合天天6| 欧美乱妇20p| 国产欧美日韩精品一区| 亚洲精品成人悠悠色影视| 九色综合狠狠综合久久| 99精品热视频| 欧美一级片在线观看| 日韩一区有码在线| 日本中文一区二区三区| 成人av电影观看| 欧美电影免费观看高清完整版在线观看 | 日韩一区二区电影网| 国产精品免费视频网站| 顶级嫩模精品视频在线看| 91蜜桃传媒精品久久久一区二区| 69成人精品免费视频| 国产精品久久三| 麻豆成人免费电影| 欧日韩精品视频| 日本一区二区三区四区在线视频 | 精品国产第一区二区三区观看体验| 亚洲图片你懂的| 国产福利一区二区三区在线视频| 欧美精品久久久久久久多人混战| 中文字幕欧美一区| 处破女av一区二区| 欧美精品一区二区久久婷婷| 亚洲电影中文字幕在线观看| 成人av动漫网站| 欧美经典三级视频一区二区三区| 久久电影国产免费久久电影| 制服丝袜亚洲色图| 亚洲男女一区二区三区| 91香蕉视频在线| 欧美激情一区不卡| 丁香婷婷综合色啪| 国产亚洲精品aa| 国产久卡久卡久卡久卡视频精品| 精品免费99久久| 极品美女销魂一区二区三区| 日韩欧美不卡在线观看视频| 日产国产欧美视频一区精品| 欧美丰满少妇xxxxx高潮对白| 亚洲第一成人在线| 欧美三级乱人伦电影| 视频一区欧美精品| 日韩一区二区免费视频| 老司机免费视频一区二区三区| 日韩网站在线看片你懂的| 裸体歌舞表演一区二区| 2023国产精华国产精品| 国产馆精品极品| 专区另类欧美日韩| 欧洲中文字幕精品| 日本少妇一区二区| 久久久久一区二区三区四区| 国产激情精品久久久第一区二区 | 亚洲午夜成aⅴ人片| 欧美日韩在线精品一区二区三区激情 | 99久久精品久久久久久清纯| 一区二区三区中文字幕精品精品 | 欧美成人精品3d动漫h| 国产一区二区三区四区五区入口| 国产午夜亚洲精品理论片色戒| 成人一区二区三区在线观看 | 亚洲成人免费观看| 日韩欧美亚洲国产精品字幕久久久 | 日韩国产精品久久久久久亚洲| 日韩欧美的一区二区| 国产盗摄视频一区二区三区| 亚洲女与黑人做爰| 51精品秘密在线观看| 福利91精品一区二区三区| 一区二区三区高清不卡| 日韩一区二区在线免费观看| 成人av在线资源网站| 91精品国产aⅴ一区二区| 久久夜色精品一区| 成人综合在线视频| 亚洲久本草在线中文字幕| 91精品国产入口| 丰满少妇在线播放bd日韩电影| 一区二区三区四区不卡视频| 26uuu国产电影一区二区| 色综合久久中文字幕| 精品无人码麻豆乱码1区2区 | 欧美一级在线观看| 成人免费视频网站在线观看| 亚洲成人av福利| 国产精品乱码一区二区三区软件 | 国产精品一区二区久久精品爱涩| 亚洲欧美一区二区久久| 日韩一区二区三区在线| 91久久一区二区| 不卡av在线网| 久久er精品视频| 亚洲一区二区精品视频| 中文字幕欧美国产| 欧美大黄免费观看| 欧美三级在线看| av在线不卡网| 国产精品66部| 激情欧美日韩一区二区| 亚洲五月六月丁香激情| 中文字幕亚洲一区二区va在线| 2020国产精品| 精品国产乱码91久久久久久网站| 欧美日韩一卡二卡| 在线日韩一区二区| 99久久综合狠狠综合久久| 国产成人免费xxxxxxxx| www.亚洲色图| 成人天堂资源www在线| 国产精品一区二区视频| 国产一区不卡精品| 久久国产生活片100| 久久av资源网| 国产在线观看一区二区| 精品一区精品二区高清| 美女mm1313爽爽久久久蜜臀| 麻豆国产精品视频| 久久99精品久久久久久国产越南| 看片网站欧美日韩| 国产在线一区观看| 国产成人高清在线| 99在线视频精品| 91电影在线观看| 欧美精品乱人伦久久久久久| 91精品在线观看入口| 日韩一级二级三级精品视频| 67194成人在线观看| 日韩精品一区二区三区视频| 国产性天天综合网| **网站欧美大片在线观看| 亚洲自拍另类综合| 亚洲成人av在线电影| 蜜臀国产一区二区三区在线播放| 麻豆精品在线播放| 国产九色精品成人porny | 日本三级韩国三级欧美三级| 免费在线观看不卡| 国产精品一二一区| 色综合久久综合网欧美综合网| 欧美午夜理伦三级在线观看| 欧美一个色资源| 午夜亚洲福利老司机| 性感美女极品91精品| 韩国三级在线一区| 91在线porny国产在线看| 欧美日韩二区三区| 久久九九99视频| 亚洲自拍另类综合| 国产一本一道久久香蕉| 日本精品免费观看高清观看| 日韩欧美中文字幕公布| 国产精品初高中害羞小美女文| 亚洲国产日韩一级| 国产ts人妖一区二区| 欧美人妖巨大在线| 国产精品青草综合久久久久99| 日韩中文字幕一区二区三区| 国产精品亚洲成人| 91精品国产全国免费观看| 综合色中文字幕| 国产一区二区福利| 69av一区二区三区| 亚洲综合清纯丝袜自拍|