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

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

?? api_msg.c

?? 最新版FreeRTOS, 包擴多種開發平臺的移植
?? C
?? 第 1 頁 / 共 2 頁
字號:
#if LWIP_UDP
    case NETCONN_UDPLITE:
      msg->conn->pcb.udp = udp_new();
      udp_setflags(msg->conn->pcb.udp, UDP_FLAGS_UDPLITE);
      udp_recv(msg->conn->pcb.udp, recv_udp, msg->conn);
      break;
    case NETCONN_UDPNOCHKSUM:
      msg->conn->pcb.udp = udp_new();
      udp_setflags(msg->conn->pcb.udp, UDP_FLAGS_NOCHKSUM);
      udp_recv(msg->conn->pcb.udp, recv_udp, msg->conn);
      break;
    case NETCONN_UDP:
      msg->conn->pcb.udp = udp_new();
      udp_recv(msg->conn->pcb.udp, recv_udp, msg->conn);
      break;
#endif /* LWIP_UDP */
#if LWIP_TCP      
    case NETCONN_TCP:
      msg->conn->pcb.tcp = tcp_new();
      setup_tcp(msg->conn);
#endif /* LWIP_TCP */
    default:  
    break;
    }
  }
  switch (msg->conn->type) {
#if LWIP_RAW
  case NETCONN_RAW:
    msg->conn->err = raw_bind(msg->conn->pcb.raw,msg->msg.bc.ipaddr);
    break;
#endif
#if LWIP_UDP
  case NETCONN_UDPLITE:
    /* FALLTHROUGH */
  case NETCONN_UDPNOCHKSUM:
    /* FALLTHROUGH */
  case NETCONN_UDP:
    msg->conn->err = udp_bind(msg->conn->pcb.udp, msg->msg.bc.ipaddr, msg->msg.bc.port);
    break;
#endif /* LWIP_UDP */
#if LWIP_TCP
  case NETCONN_TCP:
    msg->conn->err = tcp_bind(msg->conn->pcb.tcp,
            msg->msg.bc.ipaddr, msg->msg.bc.port);
#endif /* LWIP_TCP */
  default:
    break;
  }
  sys_mbox_post(msg->conn->mbox, NULL);
}
#if LWIP_TCP

static err_t
do_connected(void *arg, struct tcp_pcb *pcb, err_t err)
{
  struct netconn *conn;

  (void)pcb;

  conn = arg;

  if (conn == NULL) {
    return ERR_VAL;
  }
  
  conn->err = err;
  if (conn->type == NETCONN_TCP && err == ERR_OK) {
    setup_tcp(conn);
  }    
  sys_mbox_post(conn->mbox, NULL);
  return ERR_OK;
}
#endif  

static void
do_connect(struct api_msg_msg *msg)
{
  if (msg->conn->pcb.tcp == NULL) {
    switch (msg->conn->type) {
#if LWIP_RAW
    case NETCONN_RAW:
      msg->conn->pcb.raw = raw_new(msg->msg.bc.port); /* misusing the port field as protocol */
      raw_recv(msg->conn->pcb.raw, recv_raw, msg->conn);
      break;
#endif
#if LWIP_UDP
    case NETCONN_UDPLITE:
      msg->conn->pcb.udp = udp_new();
      if (msg->conn->pcb.udp == NULL) {
  msg->conn->err = ERR_MEM;
  sys_mbox_post(msg->conn->mbox, NULL);
  return;
      }
      udp_setflags(msg->conn->pcb.udp, UDP_FLAGS_UDPLITE);
      udp_recv(msg->conn->pcb.udp, recv_udp, msg->conn);
      break;
    case NETCONN_UDPNOCHKSUM:
      msg->conn->pcb.udp = udp_new();
      if (msg->conn->pcb.udp == NULL) {
  msg->conn->err = ERR_MEM;
  sys_mbox_post(msg->conn->mbox, NULL);
  return;
      }
      udp_setflags(msg->conn->pcb.udp, UDP_FLAGS_NOCHKSUM);
      udp_recv(msg->conn->pcb.udp, recv_udp, msg->conn);
      break;
    case NETCONN_UDP:
      msg->conn->pcb.udp = udp_new();
      if (msg->conn->pcb.udp == NULL) {
  msg->conn->err = ERR_MEM;
  sys_mbox_post(msg->conn->mbox, NULL);
  return;
      }
      udp_recv(msg->conn->pcb.udp, recv_udp, msg->conn);
      break;
#endif /* LWIP_UDP */
#if LWIP_TCP      
    case NETCONN_TCP:
      msg->conn->pcb.tcp = tcp_new();      
      if (msg->conn->pcb.tcp == NULL) {
  msg->conn->err = ERR_MEM;
  sys_mbox_post(msg->conn->mbox, NULL);
  return;
      }
#endif
    default:
      break;
    }
  }
  switch (msg->conn->type) {
#if LWIP_RAW
  case NETCONN_RAW:
    raw_connect(msg->conn->pcb.raw, msg->msg.bc.ipaddr);
    sys_mbox_post(msg->conn->mbox, NULL);
    break;
#endif
#if LWIP_UDP
  case NETCONN_UDPLITE:
    /* FALLTHROUGH */
  case NETCONN_UDPNOCHKSUM:
    /* FALLTHROUGH */
  case NETCONN_UDP:
    udp_connect(msg->conn->pcb.udp, msg->msg.bc.ipaddr, msg->msg.bc.port);
    sys_mbox_post(msg->conn->mbox, NULL);
    break;
#endif 
#if LWIP_TCP      
  case NETCONN_TCP:
    /*    tcp_arg(msg->conn->pcb.tcp, msg->conn);*/
    setup_tcp(msg->conn);
    tcp_connect(msg->conn->pcb.tcp, msg->msg.bc.ipaddr, msg->msg.bc.port,
    do_connected);
    /*tcp_output(msg->conn->pcb.tcp);*/
#endif

  default:
    break;
  }
}

static void
do_disconnect(struct api_msg_msg *msg)
{

  switch (msg->conn->type) {
#if LWIP_RAW
  case NETCONN_RAW:
    /* Do nothing as connecting is only a helper for upper lwip layers */
    break;
#endif
#if LWIP_UDP
  case NETCONN_UDPLITE:
    /* FALLTHROUGH */
  case NETCONN_UDPNOCHKSUM:
    /* FALLTHROUGH */
  case NETCONN_UDP:
    udp_disconnect(msg->conn->pcb.udp);
    break;
#endif 
  case NETCONN_TCP:
    break;
  }
  sys_mbox_post(msg->conn->mbox, NULL);
}


static void
do_listen(struct api_msg_msg *msg)
{
  if (msg->conn->pcb.tcp != NULL) {
    switch (msg->conn->type) {
#if LWIP_RAW
    case NETCONN_RAW:
      LWIP_DEBUGF(API_MSG_DEBUG, ("api_msg: listen RAW: cannot listen for RAW.\n"));
      break;
#endif
#if LWIP_UDP
    case NETCONN_UDPLITE:
      /* FALLTHROUGH */
    case NETCONN_UDPNOCHKSUM:
      /* FALLTHROUGH */
    case NETCONN_UDP:
      LWIP_DEBUGF(API_MSG_DEBUG, ("api_msg: listen UDP: cannot listen for UDP.\n"));
      break;
#endif /* LWIP_UDP */
#if LWIP_TCP      
    case NETCONN_TCP:
      msg->conn->pcb.tcp = tcp_listen(msg->conn->pcb.tcp);
      if (msg->conn->pcb.tcp == NULL) {
  msg->conn->err = ERR_MEM;
      } else {
  if (msg->conn->acceptmbox == SYS_MBOX_NULL) {
    msg->conn->acceptmbox = sys_mbox_new();
    if (msg->conn->acceptmbox == SYS_MBOX_NULL) {
      msg->conn->err = ERR_MEM;
      break;
    }
  }
  tcp_arg(msg->conn->pcb.tcp, msg->conn);
  tcp_accept(msg->conn->pcb.tcp, accept_function);
      }
#endif
    default:
      break;
    }
  }
  sys_mbox_post(msg->conn->mbox, NULL);
}

static void
do_accept(struct api_msg_msg *msg)
{
  if (msg->conn->pcb.tcp != NULL) {
    switch (msg->conn->type) {
#if LWIP_RAW
    case NETCONN_RAW:
      LWIP_DEBUGF(API_MSG_DEBUG, ("api_msg: accept RAW: cannot accept for RAW.\n"));
      break;
#endif
#if LWIP_UDP
    case NETCONN_UDPLITE:
      /* FALLTHROUGH */
    case NETCONN_UDPNOCHKSUM:
      /* FALLTHROUGH */
    case NETCONN_UDP:    
      LWIP_DEBUGF(API_MSG_DEBUG, ("api_msg: accept UDP: cannot accept for UDP.\n"));
      break;
#endif /* LWIP_UDP */
    case NETCONN_TCP:
      break;
    }
  }
}

static void
do_send(struct api_msg_msg *msg)
{
  if (msg->conn->pcb.tcp != NULL) {
    switch (msg->conn->type) {
#if LWIP_RAW
    case NETCONN_RAW:
      raw_send(msg->conn->pcb.raw, msg->msg.p);
      break;
#endif
#if LWIP_UDP
    case NETCONN_UDPLITE:
      /* FALLTHROUGH */
    case NETCONN_UDPNOCHKSUM:
      /* FALLTHROUGH */
    case NETCONN_UDP:
      udp_send(msg->conn->pcb.udp, msg->msg.p);
      break;
#endif /* LWIP_UDP */
    case NETCONN_TCP:
      break;
    }
  }
  sys_mbox_post(msg->conn->mbox, NULL);
}

static void
do_recv(struct api_msg_msg *msg)
{
#if LWIP_TCP
  if (msg->conn->pcb.tcp != NULL) {
    if (msg->conn->type == NETCONN_TCP) {
      tcp_recved(msg->conn->pcb.tcp, msg->msg.len);
    }
  }
#endif  
  sys_mbox_post(msg->conn->mbox, NULL);
}

static void
do_write(struct api_msg_msg *msg)
{
#if LWIP_TCP  
  err_t err;
#endif  
  if (msg->conn->pcb.tcp != NULL) {
    switch (msg->conn->type) {
#if LWIP_RAW
    case NETCONN_RAW:
      msg->conn->err = ERR_VAL;
      break;
#endif
#if LWIP_UDP 
    case NETCONN_UDPLITE:
      /* FALLTHROUGH */
    case NETCONN_UDPNOCHKSUM:
      /* FALLTHROUGH */
    case NETCONN_UDP:
      msg->conn->err = ERR_VAL;
      break;
#endif /* LWIP_UDP */
#if LWIP_TCP 
    case NETCONN_TCP:      
      err = tcp_write(msg->conn->pcb.tcp, msg->msg.w.dataptr,
                      msg->msg.w.len, msg->msg.w.copy);
      /* This is the Nagle algorithm: inhibit the sending of new TCP
   segments when new outgoing data arrives from the user if any
   previously transmitted data on the connection remains
   unacknowledged. */
      if(err == ERR_OK && (msg->conn->pcb.tcp->unacked == NULL || (msg->conn->pcb.tcp->flags & TF_NODELAY)) ) {
  tcp_output(msg->conn->pcb.tcp);
      }
      msg->conn->err = err;
      if (msg->conn->callback)
          if (err == ERR_OK)
          {
              if (tcp_sndbuf(msg->conn->pcb.tcp) <= TCP_SNDLOWAT)
                  (*msg->conn->callback)(msg->conn, NETCONN_EVT_SENDMINUS, msg->msg.w.len);
          }
#endif
    default:
      break;
    }
  }
  sys_mbox_post(msg->conn->mbox, NULL);
}

static void
do_close(struct api_msg_msg *msg)
{
  err_t err;

  err = ERR_OK;

  if (msg->conn->pcb.tcp != NULL) {
    switch (msg->conn->type) {
#if LWIP_RAW
    case NETCONN_RAW:
      break;
#endif
#if LWIP_UDP
    case NETCONN_UDPLITE:
      /* FALLTHROUGH */
    case NETCONN_UDPNOCHKSUM:
      /* FALLTHROUGH */
    case NETCONN_UDP:
      break;
#endif /* LWIP_UDP */
#if LWIP_TCP
    case NETCONN_TCP:
      if (msg->conn->pcb.tcp->state == LISTEN) {
  err = tcp_close(msg->conn->pcb.tcp);
      }
      msg->conn->err = err;      
#endif
    default:      
      break;
    }
  }
  sys_mbox_post(msg->conn->mbox, NULL);
}

typedef void (* api_msg_decode)(struct api_msg_msg *msg);
static api_msg_decode decode[API_MSG_MAX] = {
  do_newconn,
  do_delconn,
  do_bind,
  do_connect,
  do_disconnect,
  do_listen,
  do_accept,
  do_send,
  do_recv,
  do_write,
  do_close
  };
void
api_msg_input(struct api_msg *msg)
{  
  decode[msg->type](&(msg->msg));
}

void
api_msg_post(struct api_msg *msg)
{
  tcpip_apimsg(msg);
}



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一卡二卡三卡四卡| 午夜欧美2019年伦理| 欧洲av在线精品| 国产在线视频一区二区三区| 一区二区三区视频在线看| 久久你懂得1024| 欧美高清视频一二三区| av在线不卡网| 极品瑜伽女神91| 午夜电影一区二区三区| 亚洲三级视频在线观看| 国产亚洲婷婷免费| 日韩一区二区三区视频在线| 色综合网色综合| 免费高清视频精品| 亚洲黄一区二区三区| 久久亚洲精华国产精华液 | 日韩经典一区二区| 久久久精品2019中文字幕之3| 欧美专区日韩专区| 成人免费va视频| 蜜桃一区二区三区在线观看| 一区二区三区在线免费观看| 精品av综合导航| 欧美日韩五月天| 91网上在线视频| 国产激情91久久精品导航| 婷婷激情综合网| 亚洲乱码国产乱码精品精的特点 | 色狠狠色狠狠综合| 国产伦理精品不卡| 热久久国产精品| 一区二区三区美女| 国产日产欧美一区二区三区| 欧美精品成人一区二区三区四区| 91亚洲精华国产精华精华液| 国产一区二区三区黄视频| 日韩综合一区二区| 亚洲激情中文1区| 中文字幕综合网| 国产精品理论片| 国产精品网站在线观看| 精品成人私密视频| 色狠狠一区二区| 99精品久久只有精品| www.欧美色图| 成人午夜免费电影| 国产高清成人在线| 国产一区二区三区免费| 久久精品国产99久久6| 亚洲激情av在线| 一区二区三区小说| 亚洲综合久久av| 亚洲欧美国产三级| 亚洲日本乱码在线观看| 国产精品久久午夜| 亚洲欧美综合色| 国产精品久久久久久久久久免费看 | 久久精品人人做人人综合| 日韩欧美成人激情| 日韩美女天天操| 精品久久久久久综合日本欧美| 日韩小视频在线观看专区| 日韩一区二区三区视频在线| 91精品国产乱码久久蜜臀| 这里只有精品免费| 欧美一区二区三区免费大片| 91精品国产91久久久久久最新毛片 | 五月天欧美精品| 午夜免费久久看| 久久精品国产一区二区| 国产一区二区在线免费观看| 国产精品资源在线| 裸体健美xxxx欧美裸体表演| 狠狠色丁香婷婷综合久久片| 免费成人美女在线观看.| 久久精品72免费观看| 国产剧情av麻豆香蕉精品| 成人精品免费视频| 一本一道波多野结衣一区二区 | 欧美sm美女调教| 久久久不卡网国产精品一区| 国产欧美精品日韩区二区麻豆天美| 亚洲国产高清在线观看视频| 亚洲女人****多毛耸耸8| 亚洲成人777| 国产在线精品一区二区不卡了| 成人黄色国产精品网站大全在线免费观看 | 亚洲成人av电影| 久久97超碰国产精品超碰| 99久久99久久精品免费看蜜桃| 日本精品一区二区三区高清| 欧美电影免费观看高清完整版在| 国产午夜精品一区二区三区四区| 亚洲人精品午夜| 久久精品国产一区二区三区免费看| 成人一级黄色片| 欧美日韩精品是欧美日韩精品| 精品剧情v国产在线观看在线| 国产精品天干天干在线综合| 亚洲人成网站精品片在线观看 | 亚洲国产视频一区| 狠狠色2019综合网| 一本久久a久久精品亚洲| 91精品国产综合久久精品性色| 国产亚洲综合在线| 亚洲国产成人高清精品| 国产一区二区福利| 欧美日韩中文另类| 中文字幕电影一区| 亚洲午夜久久久久久久久电影网 | 欧美系列亚洲系列| 久久久久久久久免费| 亚洲国产一区二区视频| 国产成人av影院| 欧美一区二区三区喷汁尤物| 综合婷婷亚洲小说| 九九热在线视频观看这里只有精品| 韩国欧美一区二区| 91色在线porny| 中文子幕无线码一区tr| 免费成人你懂的| 欧美伊人久久大香线蕉综合69 | 777久久久精品| 亚洲免费在线视频| 国产精品综合在线视频| 制服丝袜亚洲精品中文字幕| 亚洲男同性视频| 成人免费毛片片v| 精品国产sm最大网站免费看 | 狠狠色丁香久久婷婷综| 欧美日韩激情在线| 亚洲激情六月丁香| av在线综合网| 中文字幕av一区二区三区免费看 | 久久影音资源网| 免费成人在线网站| 欧美日本一区二区| 亚洲精品国产a久久久久久| 懂色av一区二区在线播放| 久久亚洲欧美国产精品乐播 | 欧美丝袜自拍制服另类| 中文字幕一区二区三区精华液| 韩国v欧美v亚洲v日本v| 日韩欧美一二三| 日韩高清在线不卡| 欧美久久久一区| 五月婷婷久久综合| 欧美老肥妇做.爰bbww视频| 国产精品夫妻自拍| www.欧美色图| √…a在线天堂一区| 成人av网址在线观看| 国产拍欧美日韩视频二区| 国产一级精品在线| 国产亚洲欧美日韩日本| 国产精品中文字幕欧美| 久久一区二区三区四区| 国产麻豆欧美日韩一区| 国产丝袜欧美中文另类| 福利一区在线观看| 国产精品视频第一区| 99精品视频一区| 亚洲欧美日韩中文字幕一区二区三区| 91网站黄www| 亚洲永久精品国产| 欧美肥大bbwbbw高潮| 日本中文字幕一区二区视频 | 欧美三级韩国三级日本一级| 亚洲一区日韩精品中文字幕| 欧美揉bbbbb揉bbbbb| 青草av.久久免费一区| 精品女同一区二区| 成人精品视频一区| 亚洲欧美日韩国产一区二区三区| 一本到三区不卡视频| 午夜精品福利一区二区蜜股av| 欧美精品免费视频| 九九在线精品视频| 中文字幕不卡一区| 欧美色网站导航| 麻豆高清免费国产一区| 久久综合中文字幕| 国产69精品久久久久毛片| 亚洲欧美日韩精品久久久久| 8v天堂国产在线一区二区| 国产在线播放一区三区四| 国产精品久久久久精k8 | 精品久久一区二区三区| 成人午夜精品一区二区三区| 一个色在线综合| 91精品国产综合久久久久久久| 国产大陆精品国产| 亚洲一区在线观看免费观看电影高清| 91精品国产免费久久综合| 成人午夜私人影院| 日韩国产精品91| 国产精品久久三| 日韩天堂在线观看| 色综合久久久久综合99|