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

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

?? fsm.c

?? stm32+ucos-ii
?? C
?? 第 1 頁 / 共 2 頁
字號:

    case LS_STOPPING:
    case LS_REQSENT:
    case LS_ACKRCVD:
    case LS_ACKSENT:
      UNTIMEOUT(fsm_timeout, f);  /* Cancel timeout */
      /* fall through */
    case LS_STOPPED:
      f->state = LS_STOPPED;
      if( f->callbacks->finished ) {
        (*f->callbacks->finished)(f);
      }
      break;
    
    case LS_OPENED:
      if( f->callbacks->down ) {
        (*f->callbacks->down)(f);
      }
      /* 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_STOPPING;
      break;
    
    default:
      FSMDEBUG((LOG_INFO, "%s: Protocol-reject event in state %d (%s)!\n",
            PROTO_NAME(f), f->state, ppperr_strerr[f->state]));
    }
}





/**********************************/
/*** LOCAL FUNCTION DEFINITIONS ***/
/**********************************/

/*
 * fsm_timeout - Timeout expired.
 */
static void
fsm_timeout(void *arg)
{
  fsm *f = (fsm *) arg;

  switch (f->state) {
    case LS_CLOSING:
    case LS_STOPPING:
      if( f->retransmits <= 0 ) {
        FSMDEBUG((LOG_WARNING, "%s: timeout sending Terminate-Request state=%d (%s)\n",
             PROTO_NAME(f), f->state, ppperr_strerr[f->state]));
        /*
         * We've waited for an ack long enough.  Peer probably heard us.
         */
        f->state = (f->state == LS_CLOSING)? LS_CLOSED: LS_STOPPED;
        if( f->callbacks->finished ) {
          (*f->callbacks->finished)(f);
        }
      } else {
        FSMDEBUG((LOG_WARNING, "%s: timeout resending Terminate-Requests state=%d (%s)\n",
             PROTO_NAME(f), f->state, ppperr_strerr[f->state]));
        /* Send Terminate-Request */
        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;
      }
      break;

    case LS_REQSENT:
    case LS_ACKRCVD:
    case LS_ACKSENT:
      if (f->retransmits <= 0) {
        FSMDEBUG((LOG_WARNING, "%s: timeout sending Config-Requests state=%d (%s)\n",
         PROTO_NAME(f), f->state, ppperr_strerr[f->state]));
        f->state = LS_STOPPED;
        if( (f->flags & OPT_PASSIVE) == 0 && f->callbacks->finished ) {
          (*f->callbacks->finished)(f);
        }
      } else {
        FSMDEBUG((LOG_WARNING, "%s: timeout resending Config-Request state=%d (%s)\n",
         PROTO_NAME(f), f->state, ppperr_strerr[f->state]));
        /* Retransmit the configure-request */
        if (f->callbacks->retransmit) {
          (*f->callbacks->retransmit)(f);
        }
        fsm_sconfreq(f, 1);    /* Re-send Configure-Request */
        if( f->state == LS_ACKRCVD ) {
          f->state = LS_REQSENT;
        }
      }
      break;

    default:
      FSMDEBUG((LOG_INFO, "%s: Timeout event in state %d (%s)!\n",
          PROTO_NAME(f), f->state, ppperr_strerr[f->state]));
  }
}


/*
 * fsm_rconfreq - Receive Configure-Request.
 */
static void
fsm_rconfreq(fsm *f, u_char id, u_char *inp, int len)
{
  int code, reject_if_disagree;

  FSMDEBUG((LOG_INFO, "fsm_rconfreq(%s): Rcvd id %d state=%d (%s)\n", 
        PROTO_NAME(f), id, f->state, ppperr_strerr[f->state]));
  switch( f->state ) {
    case LS_CLOSED:
      /* Go away, we're closed */
      fsm_sdata(f, TERMACK, id, NULL, 0);
      return;
    case LS_CLOSING:
    case LS_STOPPING:
      return;

    case LS_OPENED:
      /* Go down and restart negotiation */
      if( f->callbacks->down ) {
        (*f->callbacks->down)(f);  /* Inform upper layers */
      }
      fsm_sconfreq(f, 0);    /* Send initial Configure-Request */
      break;

    case LS_STOPPED:
      /* Negotiation started by our peer */
      fsm_sconfreq(f, 0);    /* Send initial Configure-Request */
      f->state = LS_REQSENT;
      break;
  }
  
  /*
  * Pass the requested configuration options
  * to protocol-specific code for checking.
  */
  if (f->callbacks->reqci) {    /* Check CI */
    reject_if_disagree = (f->nakloops >= f->maxnakloops);
    code = (*f->callbacks->reqci)(f, inp, &len, reject_if_disagree);
  } else if (len) {
    code = CONFREJ;      /* Reject all CI */
  } else {
    code = CONFACK;
  }
  
  /* send the Ack, Nak or Rej to the peer */
  fsm_sdata(f, (u_char)code, id, inp, len);
  
  if (code == CONFACK) {
    if (f->state == LS_ACKRCVD) {
      UNTIMEOUT(fsm_timeout, f);  /* Cancel timeout */
      f->state = LS_OPENED;
      if (f->callbacks->up) {
        (*f->callbacks->up)(f);  /* Inform upper layers */
      }
    } else {
      f->state = LS_ACKSENT;
    }
    f->nakloops = 0;
  } else {
    /* we sent CONFACK or CONFREJ */
    if (f->state != LS_ACKRCVD) {
      f->state = LS_REQSENT;
    }
    if( code == CONFNAK ) {
      ++f->nakloops;
    }
  }
}


/*
 * fsm_rconfack - Receive Configure-Ack.
 */
static void
fsm_rconfack(fsm *f, int id, u_char *inp, int len)
{
  FSMDEBUG((LOG_INFO, "fsm_rconfack(%s): Rcvd id %d state=%d (%s)\n",
        PROTO_NAME(f), id, f->state, ppperr_strerr[f->state]));
  
  if (id != f->reqid || f->seen_ack) {   /* Expected id? */
    return; /* Nope, toss... */
  }
  if( !(f->callbacks->ackci? (*f->callbacks->ackci)(f, inp, len): (len == 0)) ) {
    /* Ack is bad - ignore it */
    FSMDEBUG((LOG_INFO, "%s: received bad Ack (length %d)\n",
          PROTO_NAME(f), len));
    return;
  }
  f->seen_ack = 1;
  
  switch (f->state) {
    case LS_CLOSED:
    case LS_STOPPED:
      fsm_sdata(f, TERMACK, (u_char)id, NULL, 0);
      break;
    
    case LS_REQSENT:
      f->state = LS_ACKRCVD;
      f->retransmits = f->maxconfreqtransmits;
      break;
    
    case LS_ACKRCVD:
      /* Huh? an extra valid Ack? oh well... */
      UNTIMEOUT(fsm_timeout, f);  /* Cancel timeout */
      fsm_sconfreq(f, 0);
      f->state = LS_REQSENT;
      break;
    
    case LS_ACKSENT:
      UNTIMEOUT(fsm_timeout, f);  /* Cancel timeout */
      f->state = LS_OPENED;
      f->retransmits = f->maxconfreqtransmits;
      if (f->callbacks->up) {
        (*f->callbacks->up)(f);  /* Inform upper layers */
      }
      break;
    
    case LS_OPENED:
      /* Go down and restart negotiation */
      if (f->callbacks->down) {
        (*f->callbacks->down)(f);  /* Inform upper layers */
      }
      fsm_sconfreq(f, 0);    /* Send initial Configure-Request */
      f->state = LS_REQSENT;
      break;
  }
}


/*
 * fsm_rconfnakrej - Receive Configure-Nak or Configure-Reject.
 */
static void
fsm_rconfnakrej(fsm *f, int code, int id, u_char *inp, int len)
{
  int (*proc) (fsm *, u_char *, int);
  int ret;

  FSMDEBUG((LOG_INFO, "fsm_rconfnakrej(%s): Rcvd id %d state=%d (%s)\n",
        PROTO_NAME(f), id, f->state, ppperr_strerr[f->state]));

  if (id != f->reqid || f->seen_ack) { /* Expected id? */
    return;        /* Nope, toss... */
  }
  proc = (code == CONFNAK)? f->callbacks->nakci: f->callbacks->rejci;
  if (!proc || !((ret = proc(f, inp, len)))) {
    /* Nak/reject is bad - ignore it */
    FSMDEBUG((LOG_INFO, "%s: received bad %s (length %d)\n",
          PROTO_NAME(f), (code==CONFNAK? "Nak": "reject"), len));
    return;
  }
  f->seen_ack = 1;

  switch (f->state) {
    case LS_CLOSED:
    case LS_STOPPED:
      fsm_sdata(f, TERMACK, (u_char)id, NULL, 0);
      break;
    
    case LS_REQSENT:
    case LS_ACKSENT:
      /* They didn't agree to what we wanted - try another request */
      UNTIMEOUT(fsm_timeout, f);  /* Cancel timeout */
      if (ret < 0) {
        f->state = LS_STOPPED;    /* kludge for stopping CCP */
      } else {
        fsm_sconfreq(f, 0);    /* Send Configure-Request */
      }
      break;
    
    case LS_ACKRCVD:
      /* Got a Nak/reject when we had already had an Ack?? oh well... */
      UNTIMEOUT(fsm_timeout, f);  /* Cancel timeout */
      fsm_sconfreq(f, 0);
      f->state = LS_REQSENT;
      break;
    
    case LS_OPENED:
      /* Go down and restart negotiation */
      if (f->callbacks->down) {
        (*f->callbacks->down)(f);  /* Inform upper layers */
      }
      fsm_sconfreq(f, 0);    /* Send initial Configure-Request */
      f->state = LS_REQSENT;
      break;
  }
}


/*
 * fsm_rtermreq - Receive Terminate-Req.
 */
static void
fsm_rtermreq(fsm *f, int id, u_char *p, int len)
{
  LWIP_UNUSED_ARG(p);

  FSMDEBUG((LOG_INFO, "fsm_rtermreq(%s): Rcvd id %d state=%d (%s)\n",
        PROTO_NAME(f), id, f->state, ppperr_strerr[f->state]));

  switch (f->state) {
    case LS_ACKRCVD:
    case LS_ACKSENT:
      f->state = LS_REQSENT;    /* Start over but keep trying */
      break;

    case LS_OPENED:
      if (len > 0) {
        FSMDEBUG((LOG_INFO, "%s terminated by peer (%x)\n", PROTO_NAME(f), p));
      } else {
        FSMDEBUG((LOG_INFO, "%s terminated by peer\n", PROTO_NAME(f)));
      }
      if (f->callbacks->down) {
        (*f->callbacks->down)(f);  /* Inform upper layers */
      }
      f->retransmits = 0;
      f->state = LS_STOPPING;
      TIMEOUT(fsm_timeout, f, f->timeouttime);
      break;
  }

  fsm_sdata(f, TERMACK, (u_char)id, NULL, 0);
}


/*
 * fsm_rtermack - Receive Terminate-Ack.
 */
static void
fsm_rtermack(fsm *f)
{
  FSMDEBUG((LOG_INFO, "fsm_rtermack(%s): state=%d (%s)\n", 
        PROTO_NAME(f), f->state, ppperr_strerr[f->state]));
  
  switch (f->state) {
    case LS_CLOSING:
      UNTIMEOUT(fsm_timeout, f);
      f->state = LS_CLOSED;
      if( f->callbacks->finished ) {
        (*f->callbacks->finished)(f);
      }
      break;

    case LS_STOPPING:
      UNTIMEOUT(fsm_timeout, f);
      f->state = LS_STOPPED;
      if( f->callbacks->finished ) {
        (*f->callbacks->finished)(f);
      }
      break;
    
    case LS_ACKRCVD:
      f->state = LS_REQSENT;
      break;
    
    case LS_OPENED:
      if (f->callbacks->down) {
        (*f->callbacks->down)(f);  /* Inform upper layers */
      }
      fsm_sconfreq(f, 0);
      break;
  }
}


/*
 * fsm_rcoderej - Receive an Code-Reject.
 */
static void
fsm_rcoderej(fsm *f, u_char *inp, int len)
{
  u_char code, id;
  
  FSMDEBUG((LOG_INFO, "fsm_rcoderej(%s): state=%d (%s)\n", 
        PROTO_NAME(f), f->state, ppperr_strerr[f->state]));
  
  if (len < HEADERLEN) {
    FSMDEBUG((LOG_INFO, "fsm_rcoderej: Rcvd short Code-Reject packet!\n"));
    return;
  }
  GETCHAR(code, inp);
  GETCHAR(id, inp);
  FSMDEBUG((LOG_WARNING, "%s: Rcvd Code-Reject for code %d, id %d\n",
        PROTO_NAME(f), code, id));
  
  if( f->state == LS_ACKRCVD ) {
    f->state = LS_REQSENT;
  }
}


/*
 * fsm_sconfreq - Send a Configure-Request.
 */
static void
fsm_sconfreq(fsm *f, int retransmit)
{
  u_char *outp;
  int cilen;
  
  if( f->state != LS_REQSENT && f->state != LS_ACKRCVD && f->state != LS_ACKSENT ) {
    /* Not currently negotiating - reset options */
    if( f->callbacks->resetci ) {
      (*f->callbacks->resetci)(f);
    }
    f->nakloops = 0;
  }
  
  if( !retransmit ) {
    /* New request - reset retransmission counter, use new ID */
    f->retransmits = f->maxconfreqtransmits;
    f->reqid = ++f->id;
  }
  
  f->seen_ack = 0;
  
  /*
   * Make up the request packet
   */
  outp = outpacket_buf[f->unit] + PPP_HDRLEN + HEADERLEN;
  if( f->callbacks->cilen && f->callbacks->addci ) {
    cilen = (*f->callbacks->cilen)(f);
    if( cilen > peer_mru[f->unit] - (int)HEADERLEN ) {
      cilen = peer_mru[f->unit] - HEADERLEN;
    }
    if (f->callbacks->addci) {
      (*f->callbacks->addci)(f, outp, &cilen);
    }
  } else {
    cilen = 0;
  }

  /* send the request to our peer */
  fsm_sdata(f, CONFREQ, f->reqid, outp, cilen);
  
  /* start the retransmit timer */
  --f->retransmits;
  TIMEOUT(fsm_timeout, f, f->timeouttime);
  
  FSMDEBUG((LOG_INFO, "%s: sending Configure-Request, id %d\n",
        PROTO_NAME(f), f->reqid));
}

#endif /* PPP_SUPPORT */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久99精品久久久久久| 国产亲近乱来精品视频| 国产亚洲1区2区3区| 午夜精品免费在线观看| 国产成人av电影在线| 欧美丰满美乳xxx高潮www| 国产精品久久一卡二卡| 狠狠色丁香九九婷婷综合五月| 91久久精品一区二区三区| 国产日韩欧美一区二区三区乱码| 亚洲国产精品久久久久秋霞影院 | 国产精品88888| 91精选在线观看| 亚洲一区影音先锋| 国产91在线|亚洲| 久久蜜桃av一区精品变态类天堂| 人人精品人人爱| 91精品国产高清一区二区三区| 尤物视频一区二区| 91麻豆蜜桃一区二区三区| 欧美极品xxx| 大白屁股一区二区视频| 国产偷v国产偷v亚洲高清| 国产一区欧美二区| 久久久综合网站| 国产91在线观看| 国产精品理论在线观看| 99麻豆久久久国产精品免费优播| 中文字幕不卡的av| 成人av免费网站| 亚洲三级理论片| 色婷婷久久久亚洲一区二区三区| 亚洲免费观看在线观看| 色狠狠综合天天综合综合| 伊人开心综合网| 欧美亚洲综合一区| 日韩电影在线观看一区| 日韩一级在线观看| 国产精品资源网站| 中文字幕在线一区免费| 99国产精品久久久久久久久久久| 亚洲欧美激情一区二区| 欧美性大战久久| 午夜国产精品影院在线观看| 欧美一级免费观看| 国产原创一区二区| 最新久久zyz资源站| 欧美中文字幕一区二区三区亚洲| 天堂久久久久va久久久久| 精品久久久久一区二区国产| 国产精品911| 亚洲最色的网站| 日韩亚洲欧美综合| 国产精品99精品久久免费| 日韩一区有码在线| 3d成人动漫网站| 国产精品影视网| 亚洲一卡二卡三卡四卡五卡| 欧美一区二区福利在线| av一区二区久久| 图片区日韩欧美亚洲| 久久精品日韩一区二区三区| 一本色道综合亚洲| 精品在线免费视频| 亚洲伦理在线免费看| 欧美大片顶级少妇| 色婷婷av一区二区三区大白胸| 天堂成人免费av电影一区| 国产亚洲成av人在线观看导航| 在线国产电影不卡| 国产精品一二二区| 日韩电影在线一区二区| 亚洲人妖av一区二区| 欧美videos中文字幕| 一本一本大道香蕉久在线精品 | 亚洲国产综合人成综合网站| 日韩一级精品视频在线观看| av午夜一区麻豆| 久久99九九99精品| 性久久久久久久| 综合色中文字幕| 久久久久久久久伊人| 欧美精品tushy高清| 色婷婷久久久久swag精品| 国产激情91久久精品导航| 蜜桃视频一区二区| 亚洲国产欧美在线| 亚洲婷婷综合久久一本伊一区| 精品国产一区二区三区不卡| 欧美日韩五月天| 色欧美日韩亚洲| 成人黄色一级视频| 国产91精品一区二区麻豆网站| 肉色丝袜一区二区| 亚洲综合成人在线| 一区二区三区中文在线观看| 国产精品丝袜91| 国产网站一区二区三区| 精品国产乱码久久久久久1区2区| 91精品国产综合久久精品| 色综合中文字幕国产 | 亚洲地区一二三色| 亚洲男女一区二区三区| 日本一区二区三区四区| 欧美精品一区二区在线观看| 日韩精品最新网址| 日韩一区二区中文字幕| 日韩一区二区三区免费看| 在线不卡a资源高清| 欧美日韩一区精品| 欧美人伦禁忌dvd放荡欲情| 欧美亚洲一区二区在线观看| 欧美最新大片在线看 | 中文字幕高清不卡| 欧美国产一区二区| 一区二区中文视频| 亚洲欧洲日韩在线| 亚洲天堂网中文字| 亚洲愉拍自拍另类高清精品| 亚洲成人一区二区| 日本欧美一区二区三区| 精品一区免费av| 国产**成人网毛片九色| 成人免费毛片片v| 色8久久精品久久久久久蜜| 91久久久免费一区二区| 欧美军同video69gay| 日韩视频在线观看一区二区| 精品福利在线导航| 日本一区免费视频| 一区二区三区免费观看| 五月天丁香久久| 精品一区二区国语对白| 国产91精品久久久久久久网曝门| jlzzjlzz亚洲女人18| 在线观看视频一区二区欧美日韩| 欧美精品tushy高清| 久久品道一品道久久精品| 亚洲欧美另类久久久精品2019| 亚洲国产精品精华液网站| 韩日精品视频一区| 91片在线免费观看| 日韩亚洲欧美在线| 中文字幕一区二区三区在线播放| 亚洲国产成人高清精品| 国产一区二区三区在线观看精品 | 国产午夜亚洲精品理论片色戒| 国产精品毛片久久久久久| 亚洲国产视频a| 久久69国产一区二区蜜臀| 91欧美一区二区| 日韩欧美中文字幕制服| 国产精品第13页| 麻豆91在线观看| 一本高清dvd不卡在线观看| 日韩久久久精品| 一区二区三区四区在线免费观看| 免费人成在线不卡| 一本色道亚洲精品aⅴ| 久久久国产午夜精品| 亚洲一本大道在线| 成人爱爱电影网址| 欧美一区三区二区| 亚洲青青青在线视频| 国产麻豆日韩欧美久久| 欧美日韩免费视频| 亚洲欧美国产毛片在线| 国产精品综合视频| 欧美一区日韩一区| 亚洲午夜精品网| 91在线精品一区二区| 久久免费电影网| 琪琪久久久久日韩精品| 欧美性视频一区二区三区| 国产清纯美女被跳蛋高潮一区二区久久w| 亚洲一区二区在线观看视频| eeuss鲁一区二区三区| 久久久久久久性| 久久超碰97中文字幕| 91精品国产一区二区三区| 亚洲精品伦理在线| av电影在线观看一区| 国产欧美一区二区精品性色超碰| 日本不卡一区二区三区| 在线视频一区二区三区| 一色屋精品亚洲香蕉网站| 豆国产96在线|亚洲| 国产欧美视频一区二区| 国产在线麻豆精品观看| 日韩欧美亚洲国产精品字幕久久久| 亚洲高清中文字幕| 欧美性猛交一区二区三区精品| 国产精品初高中害羞小美女文| 国产精品18久久久久久久网站| 久久亚洲二区三区| 国产一区二区91| 国产嫩草影院久久久久| www.亚洲免费av| 亚洲乱码中文字幕| 欧美日韩午夜在线|