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

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

?? api_msg.c

?? uCOSII2.84在at91sam9263的移植
?? C
?? 第 1 頁 / 共 3 頁
字號:
/** * @file * Sequential API Internal module * *//* * Copyright (c) 2001-2004 Swedish Institute of Computer Science. * All rights reserved.  *  * Redistribution and use in source and binary forms, with or without modification,  * are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, *    this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright notice, *    this list of conditions and the following disclaimer in the documentation *    and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products *    derived from this software without specific prior written permission.  * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. * * This file is part of the lwIP TCP/IP stack. *  * Author: Adam Dunkels <adam@sics.se> * */#include "lwip/opt.h"#if LWIP_NETCONN /* don't build if not configured for use in lwipopts.h */#include "lwip/api_msg.h"#include "lwip/ip.h"#include "lwip/udp.h"#include "lwip/tcp.h"#include "lwip/raw.h"#include "lwip/memp.h"#include "lwip/tcpip.h"#include "lwip/igmp.h"#include "lwip/dns.h"/* forward declarations */#if LWIP_TCPstatic err_t do_writemore(struct netconn *conn);static void do_close_internal(struct netconn *conn);#endif#if LWIP_RAW/** * Receive callback function for RAW netconns. * Doesn't 'eat' the packet, only references it and sends it to * conn->recvmbox * * @see raw.h (struct raw_pcb.recv) for parameters and return value */static u8_trecv_raw(void *arg, struct raw_pcb *pcb, struct pbuf *p,    struct ip_addr *addr){  struct pbuf *q;  struct netbuf *buf;  struct netconn *conn;#if LWIP_SO_RCVBUF  int recv_avail;#endif /* LWIP_SO_RCVBUF */  LWIP_UNUSED_ARG(addr);  conn = arg;#if LWIP_SO_RCVBUF  SYS_ARCH_GET(conn->recv_avail, recv_avail);  if ((conn != NULL) && (conn->recvmbox != SYS_MBOX_NULL) &&      ((recv_avail + (int)(p->tot_len)) <= conn->recv_bufsize)) {#else  /* LWIP_SO_RCVBUF */  if ((conn != NULL) && (conn->recvmbox != SYS_MBOX_NULL)) {#endif /* LWIP_SO_RCVBUF */    /* copy the whole packet into new pbufs */    q = pbuf_alloc(PBUF_RAW, p->tot_len, PBUF_RAM);    if(q != NULL) {      if (pbuf_copy(q, p) != ERR_OK) {        pbuf_free(q);        q = NULL;      }    }    if(q != NULL) {      buf = memp_malloc(MEMP_NETBUF);      if (buf == NULL) {        pbuf_free(q);        return 0;      }      buf->p = q;      buf->ptr = q;      buf->addr = &(((struct ip_hdr*)(q->payload))->src);      buf->port = pcb->protocol;      SYS_ARCH_INC(conn->recv_avail, q->tot_len);      /* Register event with callback */      API_EVENT(conn, NETCONN_EVT_RCVPLUS, q->tot_len);      if (sys_mbox_trypost(conn->recvmbox, buf) != ERR_OK) {        netbuf_delete(buf);      }    }  }  return 0; /* do not eat the packet */}#endif /* LWIP_RAW*/#if LWIP_UDP/** * Receive callback function for UDP netconns. * Posts the packet to conn->recvmbox or deletes it on memory error. * * @see udp.h (struct udp_pcb.recv) for parameters */static voidrecv_udp(void *arg, struct udp_pcb *pcb, struct pbuf *p,   struct ip_addr *addr, u16_t port){  struct netbuf *buf;  struct netconn *conn;#if LWIP_SO_RCVBUF  int recv_avail;#endif /* LWIP_SO_RCVBUF */  LWIP_UNUSED_ARG(pcb); /* only used for asserts... */  LWIP_ASSERT("recv_udp must have a pcb argument", pcb != NULL);  LWIP_ASSERT("recv_udp must have an argument", arg != NULL);  conn = arg;  LWIP_ASSERT("recv_udp: recv for wrong pcb!", conn->pcb.udp == pcb);#if LWIP_SO_RCVBUF  SYS_ARCH_GET(conn->recv_avail, recv_avail);  if ((conn == NULL) || (conn->recvmbox == SYS_MBOX_NULL) ||      ((recv_avail + (int)(p->tot_len)) > conn->recv_bufsize)) {#else  /* LWIP_SO_RCVBUF */  if ((conn == NULL) || (conn->recvmbox == SYS_MBOX_NULL)) {#endif /* LWIP_SO_RCVBUF */    pbuf_free(p);    return;  }  buf = memp_malloc(MEMP_NETBUF);  if (buf == NULL) {    pbuf_free(p);    return;  } else {    buf->p = p;    buf->ptr = p;    buf->addr = addr;    buf->port = port;  }  SYS_ARCH_INC(conn->recv_avail, p->tot_len);  /* Register event with callback */  API_EVENT(conn, NETCONN_EVT_RCVPLUS, p->tot_len);  if (sys_mbox_trypost(conn->recvmbox, buf) != ERR_OK) {    netbuf_delete(buf);    return;  }}#endif /* LWIP_UDP */#if LWIP_TCP/** * Receive callback function for TCP netconns. * Posts the packet to conn->recvmbox, but doesn't delete it on errors. * * @see tcp.h (struct tcp_pcb.recv) for parameters and return value */static err_trecv_tcp(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err){  struct netconn *conn;  u16_t len;  LWIP_UNUSED_ARG(pcb);  LWIP_ASSERT("recv_tcp must have a pcb argument", pcb != NULL);  LWIP_ASSERT("recv_tcp must have an argument", arg != NULL);  conn = arg;  LWIP_ASSERT("recv_tcp: recv for wrong pcb!", conn->pcb.tcp == pcb);  if ((conn == NULL) || (conn->recvmbox == SYS_MBOX_NULL)) {    return ERR_VAL;  }  conn->err = err;  if (p != NULL) {    len = p->tot_len;    SYS_ARCH_INC(conn->recv_avail, len);  } else {    len = 0;  }  /* Register event with callback */  API_EVENT(conn, NETCONN_EVT_RCVPLUS, len);  if (sys_mbox_trypost(conn->recvmbox, p) != ERR_OK) {    return ERR_MEM;  }  return ERR_OK;}/** * Poll callback function for TCP netconns. * Wakes up an application thread that waits for a connection to close * or data to be sent. The application thread then takes the * appropriate action to go on. * * Signals the conn->sem. * netconn_close waits for conn->sem if closing failed. * * @see tcp.h (struct tcp_pcb.poll) for parameters and return value */static err_tpoll_tcp(void *arg, struct tcp_pcb *pcb){  struct netconn *conn = arg;  LWIP_UNUSED_ARG(pcb);  LWIP_ASSERT("conn != NULL", (conn != NULL));  if (conn->state == NETCONN_WRITE) {    do_writemore(conn);  } else if (conn->state == NETCONN_CLOSE) {    do_close_internal(conn);  }  return ERR_OK;}/** * Sent callback function for TCP netconns. * Signals the conn->sem and calls API_EVENT. * netconn_write waits for conn->sem if send buffer is low. * * @see tcp.h (struct tcp_pcb.sent) for parameters and return value */static err_tsent_tcp(void *arg, struct tcp_pcb *pcb, u16_t len){  struct netconn *conn = arg;  LWIP_UNUSED_ARG(pcb);  LWIP_ASSERT("conn != NULL", (conn != NULL));  if (conn->state == NETCONN_WRITE) {    LWIP_ASSERT("conn->pcb.tcp != NULL", conn->pcb.tcp != NULL);    do_writemore(conn);  } else if (conn->state == NETCONN_CLOSE) {    do_close_internal(conn);  }  if (conn) {    if ((conn->pcb.tcp != NULL) && (tcp_sndbuf(conn->pcb.tcp) > TCP_SNDLOWAT)) {      API_EVENT(conn, NETCONN_EVT_SENDPLUS, len);    }  }    return ERR_OK;}/** * Error callback function for TCP netconns. * Signals conn->sem, posts to all conn mboxes and calls API_EVENT. * The application thread has then to decide what to do. * * @see tcp.h (struct tcp_pcb.err) for parameters */static voiderr_tcp(void *arg, err_t err){  struct netconn *conn;  conn = arg;  LWIP_ASSERT("conn != NULL", (conn != NULL));  conn->pcb.tcp = NULL;  conn->err = err;  if (conn->recvmbox != SYS_MBOX_NULL) {    /* Register event with callback */    API_EVENT(conn, NETCONN_EVT_RCVPLUS, 0);    sys_mbox_post(conn->recvmbox, NULL);  }  if (conn->op_completed != SYS_SEM_NULL && conn->state == NETCONN_CONNECT) {    conn->state = NETCONN_NONE;    sys_sem_signal(conn->op_completed);  }  if (conn->acceptmbox != SYS_MBOX_NULL) {    /* Register event with callback */    API_EVENT(conn, NETCONN_EVT_RCVPLUS, 0);    sys_mbox_post(conn->acceptmbox, NULL);  }  if ((conn->state == NETCONN_WRITE) || (conn->state == NETCONN_CLOSE)) {    /* calling do_writemore/do_close_internal is not necessary       since the pcb has already been deleted! */    conn->state = NETCONN_NONE;    /* wake up the waiting task */    sys_sem_signal(conn->op_completed);  }}/** * Setup a tcp_pcb with the correct callback function pointers * and their arguments. * * @param conn the TCP netconn to setup */static voidsetup_tcp(struct netconn *conn){  struct tcp_pcb *pcb;  pcb = conn->pcb.tcp;  tcp_arg(pcb, conn);  tcp_recv(pcb, recv_tcp);  tcp_sent(pcb, sent_tcp);  tcp_poll(pcb, poll_tcp, 4);  tcp_err(pcb, err_tcp);}/** * Accept callback function for TCP netconns. * Allocates a new netconn and posts that to conn->acceptmbox. * * @see tcp.h (struct tcp_pcb_listen.accept) for parameters and return value */static err_taccept_function(void *arg, struct tcp_pcb *newpcb, err_t err){  struct netconn *newconn;  struct netconn *conn;#if API_MSG_DEBUG#if TCP_DEBUG  tcp_debug_print_state(newpcb->state);#endif /* TCP_DEBUG */#endif /* API_MSG_DEBUG */  conn = (struct netconn *)arg;  LWIP_ERROR("accept_function: invalid conn->acceptmbox",             conn->acceptmbox != SYS_MBOX_NULL, return ERR_VAL;);  /* We have to set the callback here even though   * the new socket is unknown. conn->socket is marked as -1. */  newconn = netconn_alloc(conn->type, conn->callback);  if (newconn == NULL) {    return ERR_MEM;  }  newconn->pcb.tcp = newpcb;  setup_tcp(newconn);  newconn->err = err;  /* Register event with callback */  API_EVENT(conn, NETCONN_EVT_RCVPLUS, 0);  if (sys_mbox_trypost(conn->acceptmbox, newconn) != ERR_OK) {    /* When returning != ERR_OK, the connection is aborted in tcp_process(),       so do nothing here! */    newconn->pcb.tcp = NULL;    netconn_free(newconn);    return ERR_MEM;  }  return ERR_OK;}#endif /* LWIP_TCP *//** * Create a new pcb of a specific type. * Called from do_newconn(). * * @param msg the api_msg_msg describing the connection type * @return msg->conn->err, but the return value is currently ignored */static err_tpcb_new(struct api_msg_msg *msg){   msg->conn->err = ERR_OK;   LWIP_ASSERT("pcb_new: pcb already allocated", msg->conn->pcb.tcp == NULL);   /* Allocate a PCB for this connection */   switch(NETCONNTYPE_GROUP(msg->conn->type)) {#if LWIP_RAW   case NETCONN_RAW:     msg->conn->pcb.raw = raw_new(msg->msg.n.proto);     if(msg->conn->pcb.raw == NULL) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品麻豆日日躁夜夜躁| 欧美国产激情二区三区| 日韩—二三区免费观看av| 777奇米四色成人影色区| 日韩av成人高清| 精品国产一二三| 成人午夜激情在线| 国产精品国产精品国产专区不片 | 色菇凉天天综合网| 亚洲六月丁香色婷婷综合久久| 色综合色狠狠天天综合色| 国产三级三级三级精品8ⅰ区| 国产一区二区福利视频| 日本一区二区三级电影在线观看| 国产成人在线视频网站| 国产精品网站在线| 91日韩精品一区| 亚洲国产乱码最新视频| 欧美精品123区| 麻豆精品视频在线观看| 久久亚洲精华国产精华液| 国产福利91精品| 中文字幕一区二区三区不卡在线 | 日韩高清一级片| 91精品国产综合久久婷婷香蕉| 美女视频网站久久| 欧美国产一区在线| 在线观看欧美日本| 青青草97国产精品免费观看无弹窗版| 欧美成人精品福利| www.日韩在线| 亚洲高清免费视频| 久久综合九色综合久久久精品综合 | 日韩不卡在线观看日韩不卡视频| 精品精品欲导航| 波多野结衣一区二区三区| 亚洲狠狠爱一区二区三区| 精品国精品国产| 91网站视频在线观看| 日本不卡一二三| 国产精品欧美精品| 91精品麻豆日日躁夜夜躁| 国产成人在线观看免费网站| 一区二区国产视频| 欧美mv日韩mv国产| 91传媒视频在线播放| 国内成人精品2018免费看| 亚洲日本va午夜在线电影| 欧美美女一区二区三区| 成熟亚洲日本毛茸茸凸凹| 午夜精品一区二区三区三上悠亚| 久久久久久久久久久黄色| 欧美一区二区精品久久911| 国产99久久久国产精品潘金 | 亚洲免费资源在线播放| 精品久久久久一区| 欧洲精品一区二区三区在线观看| 国产一区二区毛片| 亚洲综合偷拍欧美一区色| 久久日韩粉嫩一区二区三区| 91一区二区三区在线观看| 国产一区二区伦理片| 亚洲黄色在线视频| 国产精品污www在线观看| 精品国产伦一区二区三区观看体验 | 亚洲精品videosex极品| 国产丝袜欧美中文另类| 欧美一区二区在线免费观看| 色中色一区二区| 成人在线视频一区二区| 国产一区二区在线观看视频| 首页综合国产亚洲丝袜| 亚洲精品你懂的| 国产精品久久久爽爽爽麻豆色哟哟 | 成人一二三区视频| 狠狠色丁香久久婷婷综合丁香| 日韩国产欧美视频| 亚洲aⅴ怡春院| 亚洲激情图片qvod| 亚洲视频在线一区二区| 国产精品视频线看| 亚洲国产精品激情在线观看 | 亚洲人精品午夜| 国产精品久久久久一区二区三区共| www国产精品av| 精品蜜桃在线看| 国产视频一区在线播放| 国产欧美一区二区精品久导航 | 在线亚洲高清视频| 日本韩国欧美在线| 色哟哟一区二区三区| 99这里只有精品| 91性感美女视频| 一本大道av一区二区在线播放| 91女厕偷拍女厕偷拍高清| 91久久精品一区二区| 色综合天天综合狠狠| 日本精品视频一区二区三区| 日本高清不卡一区| 欧洲色大大久久| 欧美猛男gaygay网站| 欧美午夜在线一二页| 在线观看视频一区二区| 欧美又粗又大又爽| av激情亚洲男人天堂| 国产精品自拍网站| 久久www免费人成看片高清| 国产成人在线视频网站| 亚洲电影中文字幕在线观看| 伊人夜夜躁av伊人久久| 久久这里只有精品视频网| 久久久777精品电影网影网| 日韩欧美区一区二| 欧美性感一区二区三区| 男人的天堂亚洲一区| 亚洲电影一区二区| 美女视频一区在线观看| 麻豆91精品91久久久的内涵| 日韩avvvv在线播放| 国产99久久久国产精品潘金 | 久久久天堂av| 色综合天天在线| 精品视频在线免费看| 3d成人h动漫网站入口| 99视频有精品| 婷婷丁香久久五月婷婷| 国产精品嫩草久久久久| 欧美精品一区二区三区蜜桃 | 国产成人免费视频一区| 国产精品主播直播| 99视频超级精品| av亚洲精华国产精华| 国产成人一区在线| 在线一区二区三区四区五区 | 午夜精品影院在线观看| 激情小说欧美图片| 99精品国产视频| 91精品国产丝袜白色高跟鞋| 国产人妖乱国产精品人妖| 亚洲一区二区三区在线| 精品影视av免费| 在线亚洲高清视频| 久久久久亚洲蜜桃| 五月天网站亚洲| 国产一区二区三区电影在线观看 | 亚洲综合久久久| 国产伦精品一区二区三区在线观看 | 麻豆91在线播放免费| 福利视频网站一区二区三区| 91小宝寻花一区二区三区| 精品免费99久久| 石原莉奈一区二区三区在线观看| 国产成人精品在线看| 日韩一区二区三区在线| 亚洲精品五月天| 成人深夜福利app| 精品国产乱子伦一区| 亚洲超碰97人人做人人爱| 99久久免费精品高清特色大片| 欧美一二三区在线观看| 国产精品美女久久福利网站| 久久se这里有精品| 欧美精品在欧美一区二区少妇| 亚洲男同性恋视频| 成人中文字幕电影| 久久综合资源网| 紧缚捆绑精品一区二区| 欧美一区二区三区在线看| 亚洲国产wwwccc36天堂| 94-欧美-setu| 中文字幕一区不卡| 日韩欧美高清一区| 国产欧美精品一区二区色综合朱莉 | 丝袜美腿亚洲一区二区图片| 制服丝袜中文字幕亚洲| 日本色综合中文字幕| 欧美电影免费提供在线观看| 狠狠狠色丁香婷婷综合久久五月| 精品国产亚洲一区二区三区在线观看| 精品午夜久久福利影院| 久久久亚洲欧洲日产国码αv| 粉嫩aⅴ一区二区三区四区五区| 中文字幕一区二区在线播放| 欧美亚洲综合色| 美腿丝袜亚洲三区| 国产日韩欧美亚洲| 欧洲精品中文字幕| 另类专区欧美蜜桃臀第一页| 欧美韩国一区二区| 91福利小视频| 美女被吸乳得到大胸91| 亚洲国产精品精华液2区45| 在线亚洲一区二区| 日本成人超碰在线观看| 国产日韩v精品一区二区| 日本精品裸体写真集在线观看| 日韩国产欧美三级| 国产精品污污网站在线观看 | 99精品桃花视频在线观看| 亚洲一区二区三区四区中文字幕|