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

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

?? fsm.c

?? uCOSII2.84在at91sam9263的移植
?? C
?? 第 1 頁 / 共 2 頁
字號:
/****************************************************************************** fsm.c - Network Control Protocol Finite State Machine program file.** Copyright (c) 2003 by Marc Boucher, Services Informatiques (MBSI) inc.* portions Copyright (c) 1997 by Global Election Systems Inc.** The authors hereby grant permission to use, copy, modify, distribute,* and license this software and its documentation for any purpose, provided* that existing copyright notices are retained in all copies and that this* notice and the following disclaimer are included verbatim in any * distributions. No written agreement, license, or royalty fee is required* for any of the authorized uses.** THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS *AS IS* AND ANY EXPRESS OR* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.******************************************************************************** REVISION HISTORY** 03-01-01 Marc Boucher <marc@mbsi.ca>*   Ported to lwIP.* 97-12-01 Guy Lancaster <lancasterg@acm.org>, Global Election Systems Inc.*   Original based on BSD fsm.c.*****************************************************************************//* * fsm.c - {Link, IP} Control Protocol Finite State Machine. * * Copyright (c) 1989 Carnegie Mellon University. * All rights reserved. * * Redistribution and use in source and binary forms are permitted * provided that the above copyright notice and this paragraph are * duplicated in all such forms and that any documentation, * advertising materials, and other materials related to such * distribution and use acknowledge that the software was developed * by Carnegie Mellon University.  The name of the * University may not be used to endorse or promote products derived * from this software without specific prior written permission. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. *//* * TODO: * Randomize fsm id on link/init. * Deal with variable outgoing MTU. */#include "lwip/opt.h"#if PPP_SUPPORT /* don't build if not configured for use in lwipopts.h */#include "ppp.h"#include "pppdebug.h"#include "fsm.h"/*************************//*** LOCAL DEFINITIONS ***//*************************/#if PPP_DEBUGstatic const char *ppperr_strerr[] = {           "LS_INITIAL",  /* LS_INITIAL  0 */           "LS_STARTING", /* LS_STARTING 1 */           "LS_CLOSED",   /* LS_CLOSED   2 */           "LS_STOPPED",  /* LS_STOPPED  3 */           "LS_CLOSING",  /* LS_CLOSING  4 */           "LS_STOPPING", /* LS_STOPPING 5 */           "LS_REQSENT",  /* LS_REQSENT  6 */           "LS_ACKRCVD",  /* LS_ACKRCVD  7 */           "LS_ACKSENT",  /* LS_ACKSENT  8 */           "LS_OPENED"    /* LS_OPENED   9 */};#endif /* PPP_DEBUG *//************************//*** LOCAL DATA TYPES ***//************************//***********************************//*** LOCAL FUNCTION DECLARATIONS ***//***********************************/static void fsm_timeout (void *);static void fsm_rconfreq (fsm *, u_char, u_char *, int);static void fsm_rconfack (fsm *, int, u_char *, int);static void fsm_rconfnakrej (fsm *, int, int, u_char *, int);static void fsm_rtermreq (fsm *, int, u_char *, int);static void fsm_rtermack (fsm *);static void fsm_rcoderej (fsm *, u_char *, int);static void fsm_sconfreq (fsm *, int);#define PROTO_NAME(f) ((f)->callbacks->proto_name)/******************************//*** PUBLIC DATA STRUCTURES ***//******************************//*****************************//*** LOCAL DATA STRUCTURES ***//*****************************/int peer_mru[NUM_PPP];/***********************************//*** PUBLIC FUNCTION DEFINITIONS ***//***********************************//* * fsm_init - Initialize fsm. * * Initialize fsm state. */voidfsm_init(fsm *f){  f->state = LS_INITIAL;  f->flags = 0;  f->id = 0;        /* XXX Start with random id? */  f->timeouttime = FSM_DEFTIMEOUT;  f->maxconfreqtransmits = FSM_DEFMAXCONFREQS;  f->maxtermtransmits = FSM_DEFMAXTERMREQS;  f->maxnakloops = FSM_DEFMAXNAKLOOPS;  f->term_reason_len = 0;}/* * fsm_lowerup - The lower layer is up. */voidfsm_lowerup(fsm *f){  int oldState = f->state;  LWIP_UNUSED_ARG(oldState);  switch( f->state ) {    case LS_INITIAL:      f->state = LS_CLOSED;      break;    case LS_STARTING:      if( f->flags & OPT_SILENT ) {        f->state = LS_STOPPED;      } else {        /* Send an initial configure-request */        fsm_sconfreq(f, 0);        f->state = LS_REQSENT;      }    break;    default:      FSMDEBUG((LOG_INFO, "%s: Up event in state %d (%s)!\n",          PROTO_NAME(f), f->state, ppperr_strerr[f->state]));  }    FSMDEBUG((LOG_INFO, "%s: lowerup state %d (%s) -> %d (%s)\n",      PROTO_NAME(f), oldState, ppperr_strerr[oldState], f->state, ppperr_strerr[f->state]));}/* * fsm_lowerdown - The lower layer is down. * * Cancel all timeouts and inform upper layers. */voidfsm_lowerdown(fsm *f){  int oldState = f->state;  LWIP_UNUSED_ARG(oldState);  switch( f->state ) {    case LS_CLOSED:      f->state = LS_INITIAL;      break;    case LS_STOPPED:      f->state = LS_STARTING;      if( f->callbacks->starting ) {        (*f->callbacks->starting)(f);      }      break;    case LS_CLOSING:      f->state = LS_INITIAL;      UNTIMEOUT(fsm_timeout, f);  /* Cancel timeout */      break;    case LS_STOPPING:    case LS_REQSENT:    case LS_ACKRCVD:    case LS_ACKSENT:      f->state = LS_STARTING;      UNTIMEOUT(fsm_timeout, f);  /* Cancel timeout */      break;    case LS_OPENED:      if( f->callbacks->down ) {        (*f->callbacks->down)(f);      }      f->state = LS_STARTING;      break;    default:      FSMDEBUG((LOG_INFO, "%s: Down event in state %d (%s)!\n",          PROTO_NAME(f), f->state, ppperr_strerr[f->state]));  }  FSMDEBUG((LOG_INFO, "%s: lowerdown state %d (%s) -> %d (%s)\n",      PROTO_NAME(f), oldState, ppperr_strerr[oldState], f->state, ppperr_strerr[f->state]));}/* * fsm_open - Link is allowed to come up. */voidfsm_open(fsm *f){  int oldState = f->state;  LWIP_UNUSED_ARG(oldState);  switch( f->state ) {    case LS_INITIAL:      f->state = LS_STARTING;      if( f->callbacks->starting ) {        (*f->callbacks->starting)(f);      }      break;    case LS_CLOSED:      if( f->flags & OPT_SILENT ) {        f->state = LS_STOPPED;      } else {        /* Send an initial configure-request */        fsm_sconfreq(f, 0);        f->state = LS_REQSENT;      }      break;      case LS_CLOSING:      f->state = LS_STOPPING;      /* fall through */    case LS_STOPPED:    case LS_OPENED:      if( f->flags & OPT_RESTART ) {        fsm_lowerdown(f);        fsm_lowerup(f);      }      break;  }  FSMDEBUG((LOG_INFO, "%s: open state %d (%s) -> %d (%s)\n",      PROTO_NAME(f), oldState, ppperr_strerr[oldState], f->state, ppperr_strerr[f->state]));}/* * fsm_close - Start closing connection. * * Cancel timeouts and either initiate close or possibly go directly to * the LS_CLOSED state. */voidfsm_close(fsm *f, char *reason){  int oldState = f->state;  LWIP_UNUSED_ARG(oldState);  f->term_reason = reason;  f->term_reason_len = (reason == NULL? 0: strlen(reason));  switch( f->state ) {    case LS_STARTING:      f->state = LS_INITIAL;      break;    case LS_STOPPED:      f->state = LS_CLOSED;      break;    case LS_STOPPING:      f->state = LS_CLOSING;      break;    case LS_REQSENT:    case LS_ACKRCVD:    case LS_ACKSENT:    case LS_OPENED:      if( f->state != LS_OPENED ) {        UNTIMEOUT(fsm_timeout, f);  /* Cancel timeout */      } else if( f->callbacks->down ) {        (*f->callbacks->down)(f);  /* Inform upper layers we're down */      }      /* Init restart counter, send Terminate-Request */      f->retransmits = f->maxtermtransmits;      fsm_sdata(f, TERMREQ, f->reqid = ++f->id,            (u_char *) f->term_reason, f->term_reason_len);      TIMEOUT(fsm_timeout, f, f->timeouttime);      --f->retransmits;      f->state = LS_CLOSING;      break;  }  FSMDEBUG((LOG_INFO, "%s: close reason=%s state %d (%s) -> %d (%s)\n",      PROTO_NAME(f), reason, oldState, ppperr_strerr[oldState], f->state, ppperr_strerr[f->state]));}/* * fsm_sdata - Send some data. * * Used for all packets sent to our peer by this module. */voidfsm_sdata( fsm *f, u_char code, u_char id, u_char *data, int datalen){  u_char *outp;  int outlen;  /* Adjust length to be smaller than MTU */  outp = outpacket_buf[f->unit];  if (datalen > peer_mru[f->unit] - (int)HEADERLEN) {    datalen = peer_mru[f->unit] - HEADERLEN;  }  if (datalen && data != outp + PPP_HDRLEN + HEADERLEN) {    BCOPY(data, outp + PPP_HDRLEN + HEADERLEN, datalen);  }  outlen = datalen + HEADERLEN;  MAKEHEADER(outp, f->protocol);  PUTCHAR(code, outp);  PUTCHAR(id, outp);  PUTSHORT(outlen, outp);  pppWrite(f->unit, outpacket_buf[f->unit], outlen + PPP_HDRLEN);  FSMDEBUG((LOG_INFO, "fsm_sdata(%s): Sent code %d,%d,%d.\n",        PROTO_NAME(f), code, id, outlen));}/* * fsm_input - Input packet. */voidfsm_input(fsm *f, u_char *inpacket, int l){  u_char *inp = inpacket;  u_char code, id;  int len;  /*  * Parse header (code, id and length).  * If packet too short, drop it.  */  if (l < HEADERLEN) {    FSMDEBUG((LOG_WARNING, "fsm_input(%x): Rcvd short header.\n",          f->protocol));    return;  }  GETCHAR(code, inp);  GETCHAR(id, inp);  GETSHORT(len, inp);  if (len < HEADERLEN) {    FSMDEBUG((LOG_INFO, "fsm_input(%x): Rcvd illegal length.\n",        f->protocol));    return;  }  if (len > l) {    FSMDEBUG((LOG_INFO, "fsm_input(%x): Rcvd short packet.\n",        f->protocol));    return;  }  len -= HEADERLEN;    /* subtract header length */  if( f->state == LS_INITIAL || f->state == LS_STARTING ) {    FSMDEBUG((LOG_INFO, "fsm_input(%x): Rcvd packet in state %d (%s).\n",        f->protocol, f->state, ppperr_strerr[f->state]));    return;  }  FSMDEBUG((LOG_INFO, "fsm_input(%s):%d,%d,%d\n", PROTO_NAME(f), code, id, l));  /*   * Action depends on code.   */  switch (code) {    case CONFREQ:      fsm_rconfreq(f, id, inp, len);      break;        case CONFACK:      fsm_rconfack(f, id, inp, len);      break;        case CONFNAK:    case CONFREJ:      fsm_rconfnakrej(f, code, id, inp, len);      break;        case TERMREQ:      fsm_rtermreq(f, id, inp, len);      break;        case TERMACK:      fsm_rtermack(f);      break;        case CODEREJ:      fsm_rcoderej(f, inp, len);      break;        default:      if( !f->callbacks->extcode ||          !(*f->callbacks->extcode)(f, code, id, inp, len) ) {        fsm_sdata(f, CODEREJ, ++f->id, inpacket, len + HEADERLEN);      }      break;  }}/* * fsm_protreject - Peer doesn't speak this protocol. * * Treat this as a catastrophic error (RXJ-). */voidfsm_protreject(fsm *f){  switch( f->state ) {    case LS_CLOSING:      UNTIMEOUT(fsm_timeout, f);  /* Cancel timeout */      /* fall through */    case LS_CLOSED:      f->state = LS_CLOSED;      if( f->callbacks->finished ) {        (*f->callbacks->finished)(f);      }      break;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲视频在线观看三级| 99国产精品99久久久久久| 2021久久国产精品不只是精品| 成人妖精视频yjsp地址| 日韩中文欧美在线| 国产精品久久久久久久久搜平片 | 欧美日韩精品福利| 国产黄人亚洲片| 免费高清在线一区| 亚洲电影一级黄| 亚洲欧美日本韩国| 国产精品理论片| 久久久美女艺术照精彩视频福利播放| 欧洲精品一区二区三区在线观看| 成人毛片老司机大片| 另类小说综合欧美亚洲| 五月婷婷另类国产| 夜夜嗨av一区二区三区四季av| 国产精品视频第一区| 欧美精品一区二区三区久久久| 91精品国产麻豆| 欧美日韩高清在线播放| 色嗨嗨av一区二区三区| 成人精品视频一区| 国产精品1区2区| 国产乱国产乱300精品| 久久91精品国产91久久小草 | 人禽交欧美网站| 精品国产亚洲在线| 久久精品国产99| 成人欧美一区二区三区1314 | 亚洲女同一区二区| 国产精品无码永久免费888| 久久影院午夜论| 久久综合九色综合欧美就去吻| 538在线一区二区精品国产| 欧美日韩国产经典色站一区二区三区| 91麻豆国产在线观看| av一本久道久久综合久久鬼色| 成人午夜在线播放| 成人av网在线| 色屁屁一区二区| 精品视频一区三区九区| 欧美男同性恋视频网站| 69久久夜色精品国产69蝌蚪网| 欧美顶级少妇做爰| 67194成人在线观看| 欧美不卡视频一区| 久久久影视传媒| 国产精品美女久久久久高潮| 成人欧美一区二区三区在线播放| 亚洲日本在线看| 天堂在线亚洲视频| 理论电影国产精品| 成人精品gif动图一区| 91理论电影在线观看| 一区二区三区在线视频免费| 久久综合九色欧美综合狠狠| 成人美女在线观看| 亚洲成人资源在线| 日韩1区2区日韩1区2区| 久久99国产精品尤物| 国产成人啪免费观看软件| 国产成a人亚洲精| 在线观看视频一区二区欧美日韩| 欧美日韩国产高清一区二区| 精品国产一区a| 亚洲少妇最新在线视频| 日韩av一二三| 懂色一区二区三区免费观看| 色琪琪一区二区三区亚洲区| 日韩一区二区精品| 国产精品麻豆99久久久久久| 亚洲国产视频直播| 国产精品一区不卡| 91久久精品日日躁夜夜躁欧美| 日韩三级在线观看| 亚洲丝袜制服诱惑| 免费人成在线不卡| 91丝袜美女网| 欧美va天堂va视频va在线| 国产精品另类一区| 国产精品成人免费| 久久夜色精品国产欧美乱极品| 精品国产乱码久久久久久图片 | 欧美精品三级在线观看| 久久久久国产精品厨房| 亚洲一区二区三区中文字幕在线| 极品少妇xxxx偷拍精品少妇| 色哦色哦哦色天天综合| 精品处破学生在线二十三| 亚洲情趣在线观看| 国产麻豆精品视频| 欧美亚洲精品一区| 欧美激情在线看| 美女网站一区二区| 91啪亚洲精品| 国产欧美日产一区| 日韩**一区毛片| 日本高清不卡一区| 国产精品夫妻自拍| 激情五月婷婷综合网| 欧美日韩国产小视频在线观看| 国产精品久久久久久户外露出| 7777精品伊人久久久大香线蕉的| 国产精品女同一区二区三区| 日韩精品91亚洲二区在线观看| 91亚洲精品乱码久久久久久蜜桃 | 日韩美女在线视频| 成人精品免费视频| 91在线视频免费91| 精品福利一区二区三区免费视频| 亚洲一区二区三区四区在线 | 欧美国产禁国产网站cc| 日本sm残虐另类| 欧美色精品在线视频| 亚洲欧美日本韩国| www.久久久久久久久| 久久久久久久精| 韩国精品久久久| 亚洲精品在线免费播放| 石原莉奈在线亚洲二区| 欧美视频完全免费看| 一区二区三区在线播| 色综合视频在线观看| 亚洲欧洲日韩在线| 99re视频这里只有精品| 中文字幕一区在线观看| 成人动漫一区二区在线| 国产精品色婷婷久久58| 丁香婷婷综合激情五月色| 国产欧美日韩综合| 成人av小说网| 自拍偷拍国产精品| 色999日韩国产欧美一区二区| 亚洲视频免费在线| 在线观看av一区| 亚洲成人在线免费| 欧美一区二区久久久| 麻豆国产欧美日韩综合精品二区| 日韩亚洲欧美一区| 精品一区二区三区在线观看国产| 日韩免费一区二区三区在线播放| 蜜桃av一区二区| 久久综合视频网| 成人网页在线观看| 亚洲麻豆国产自偷在线| 欧美三级在线播放| 美女视频一区在线观看| 亚洲精品在线网站| 不卡高清视频专区| 一区二区高清视频在线观看| 欧美性videosxxxxx| 人妖欧美一区二区| 久久久精品黄色| 色噜噜久久综合| 日本三级韩国三级欧美三级| 精品女同一区二区| 成人黄色av电影| 亚洲123区在线观看| 日韩欧美久久久| 成人激情av网| 午夜婷婷国产麻豆精品| 精品99一区二区| www.66久久| 免费观看日韩av| 国产精品三级av| 欧美日韩免费观看一区三区| 伦理电影国产精品| 亚洲视频在线一区观看| 欧美一级片免费看| 国产98色在线|日韩| 亚洲一区二区三区视频在线播放| 日韩欧美美女一区二区三区| 成人听书哪个软件好| 日韩黄色片在线观看| 国产精品网站一区| 欧美日韩另类一区| 成人黄色在线看| 免费久久精品视频| 亚洲日本在线看| 久久婷婷一区二区三区| 精品视频资源站| 成人黄色电影在线| 久久精品国产亚洲高清剧情介绍| 国产精品久久久久9999吃药| 欧美人妖巨大在线| 不卡的av网站| 老色鬼精品视频在线观看播放| 日韩美女啊v在线免费观看| 精品免费视频一区二区| 欧美色爱综合网| 成人性生交大片免费| 麻豆精品新av中文字幕| 亚洲视频在线一区观看| 国产亚洲人成网站| 欧美一区二区三区四区在线观看| 99久久精品国产麻豆演员表| 久久久久久久久久久久久女国产乱| 国产精品视频线看|