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

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

?? dns.c

?? lwip-1.4.0
?? C
?? 第 1 頁 / 共 3 頁
字號:
      pEntry->tmr     = 1;      pEntry->retries = 0;            /* send DNS packet for this entry */      err = dns_send(pEntry->numdns, pEntry->name, i);      if (err != ERR_OK) {        LWIP_DEBUGF(DNS_DEBUG | LWIP_DBG_LEVEL_WARNING,                    ("dns_send returned error: %s\n", lwip_strerr(err)));      }      break;    }    case DNS_STATE_ASKING: {      if (--pEntry->tmr == 0) {        if (++pEntry->retries == DNS_MAX_RETRIES) {          if ((pEntry->numdns+1<DNS_MAX_SERVERS) && !ip_addr_isany(&dns_servers[pEntry->numdns+1])) {            /* change of server */            pEntry->numdns++;            pEntry->tmr     = 1;            pEntry->retries = 0;            break;          } else {            LWIP_DEBUGF(DNS_DEBUG, ("dns_check_entry: \"%s\": timeout\n", pEntry->name));            /* call specified callback function if provided */            if (pEntry->found)              (*pEntry->found)(pEntry->name, NULL, pEntry->arg);            /* flush this entry */            pEntry->state   = DNS_STATE_UNUSED;            pEntry->found   = NULL;            break;          }        }        /* wait longer for the next retry */        pEntry->tmr = pEntry->retries;        /* send DNS packet for this entry */        err = dns_send(pEntry->numdns, pEntry->name, i);        if (err != ERR_OK) {          LWIP_DEBUGF(DNS_DEBUG | LWIP_DBG_LEVEL_WARNING,                      ("dns_send returned error: %s\n", lwip_strerr(err)));        }      }      break;    }    case DNS_STATE_DONE: {      /* if the time to live is nul */      if (--pEntry->ttl == 0) {        LWIP_DEBUGF(DNS_DEBUG, ("dns_check_entry: \"%s\": flush\n", pEntry->name));        /* flush this entry */        pEntry->state = DNS_STATE_UNUSED;        pEntry->found = NULL;      }      break;    }    case DNS_STATE_UNUSED:      /* nothing to do */      break;    default:      LWIP_ASSERT("unknown dns_table entry state:", 0);      break;  }}/** * Call dns_check_entry for each entry in dns_table - check all entries. */static voiddns_check_entries(void){  u8_t i;  for (i = 0; i < DNS_TABLE_SIZE; ++i) {    dns_check_entry(i);  }}/** * Receive input function for DNS response packets arriving for the dns UDP pcb. * * @params see udp.h */static voiddns_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, ip_addr_t *addr, u16_t port){  u16_t i;  char *pHostname;  struct dns_hdr *hdr;  struct dns_answer ans;  struct dns_table_entry *pEntry;  u16_t nquestions, nanswers;  LWIP_UNUSED_ARG(arg);  LWIP_UNUSED_ARG(pcb);  LWIP_UNUSED_ARG(addr);  LWIP_UNUSED_ARG(port);  /* is the dns message too big ? */  if (p->tot_len > DNS_MSG_SIZE) {    LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: pbuf too big\n"));    /* free pbuf and return */    goto memerr;  }  /* is the dns message big enough ? */  if (p->tot_len < (SIZEOF_DNS_HDR + SIZEOF_DNS_QUERY + SIZEOF_DNS_ANSWER)) {    LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: pbuf too small\n"));    /* free pbuf and return */    goto memerr;  }  /* copy dns payload inside static buffer for processing */   if (pbuf_copy_partial(p, dns_payload, p->tot_len, 0) == p->tot_len) {    /* The ID in the DNS header should be our entry into the name table. */    hdr = (struct dns_hdr*)dns_payload;    i = htons(hdr->id);    if (i < DNS_TABLE_SIZE) {      pEntry = &dns_table[i];      if(pEntry->state == DNS_STATE_ASKING) {        /* This entry is now completed. */        pEntry->state = DNS_STATE_DONE;        pEntry->err   = hdr->flags2 & DNS_FLAG2_ERR_MASK;        /* We only care about the question(s) and the answers. The authrr           and the extrarr are simply discarded. */        nquestions = htons(hdr->numquestions);        nanswers   = htons(hdr->numanswers);        /* Check for error. If so, call callback to inform. */        if (((hdr->flags1 & DNS_FLAG1_RESPONSE) == 0) || (pEntry->err != 0) || (nquestions != 1)) {          LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: \"%s\": error in flags\n", pEntry->name));          /* call callback to indicate error, clean up memory and return */          goto responseerr;        }#if DNS_DOES_NAME_CHECK        /* Check if the name in the "question" part match with the name in the entry. */        if (dns_compare_name((unsigned char *)(pEntry->name), (unsigned char *)dns_payload + SIZEOF_DNS_HDR) != 0) {          LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: \"%s\": response not match to query\n", pEntry->name));          /* call callback to indicate error, clean up memory and return */          goto responseerr;        }#endif /* DNS_DOES_NAME_CHECK */        /* Skip the name in the "question" part */        pHostname = (char *) dns_parse_name((unsigned char *)dns_payload + SIZEOF_DNS_HDR) + SIZEOF_DNS_QUERY;        while (nanswers > 0) {          /* skip answer resource record's host name */          pHostname = (char *) dns_parse_name((unsigned char *)pHostname);          /* Check for IP address type and Internet class. Others are discarded. */          SMEMCPY(&ans, pHostname, SIZEOF_DNS_ANSWER);          if((ans.type == PP_HTONS(DNS_RRTYPE_A)) && (ans.cls == PP_HTONS(DNS_RRCLASS_IN)) &&             (ans.len == PP_HTONS(sizeof(ip_addr_t))) ) {            /* read the answer resource record's TTL, and maximize it if needed */            pEntry->ttl = ntohl(ans.ttl);            if (pEntry->ttl > DNS_MAX_TTL) {              pEntry->ttl = DNS_MAX_TTL;            }            /* read the IP address after answer resource record's header */            SMEMCPY(&(pEntry->ipaddr), (pHostname+SIZEOF_DNS_ANSWER), sizeof(ip_addr_t));            LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: \"%s\": response = ", pEntry->name));            ip_addr_debug_print(DNS_DEBUG, (&(pEntry->ipaddr)));            LWIP_DEBUGF(DNS_DEBUG, ("\n"));            /* call specified callback function if provided */            if (pEntry->found) {              (*pEntry->found)(pEntry->name, &pEntry->ipaddr, pEntry->arg);            }            /* deallocate memory and return */            goto memerr;          } else {            pHostname = pHostname + SIZEOF_DNS_ANSWER + htons(ans.len);          }          --nanswers;        }        LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: \"%s\": error in response\n", pEntry->name));        /* call callback to indicate error, clean up memory and return */        goto responseerr;      }    }  }  /* deallocate memory and return */  goto memerr;responseerr:  /* ERROR: call specified callback function with NULL as name to indicate an error */  if (pEntry->found) {    (*pEntry->found)(pEntry->name, NULL, pEntry->arg);  }  /* flush this entry */  pEntry->state = DNS_STATE_UNUSED;  pEntry->found = NULL;memerr:  /* free pbuf */  pbuf_free(p);  return;}/** * Queues a new hostname to resolve and sends out a DNS query for that hostname * * @param name the hostname that is to be queried * @param found a callback founction to be called on success, failure or timeout * @param callback_arg argument to pass to the callback function * @return @return a err_t return code. */static err_tdns_enqueue(const char *name, dns_found_callback found, void *callback_arg){  u8_t i;  u8_t lseq, lseqi;  struct dns_table_entry *pEntry = NULL;  size_t namelen;  /* search an unused entry, or the oldest one */  lseq = lseqi = 0;  for (i = 0; i < DNS_TABLE_SIZE; ++i) {    pEntry = &dns_table[i];    /* is it an unused entry ? */    if (pEntry->state == DNS_STATE_UNUSED)      break;    /* check if this is the oldest completed entry */    if (pEntry->state == DNS_STATE_DONE) {      if ((dns_seqno - pEntry->seqno) > lseq) {        lseq = dns_seqno - pEntry->seqno;        lseqi = i;      }    }  }  /* if we don't have found an unused entry, use the oldest completed one */  if (i == DNS_TABLE_SIZE) {    if ((lseqi >= DNS_TABLE_SIZE) || (dns_table[lseqi].state != DNS_STATE_DONE)) {      /* no entry can't be used now, table is full */      LWIP_DEBUGF(DNS_DEBUG, ("dns_enqueue: \"%s\": DNS entries table is full\n", name));      return ERR_MEM;    } else {      /* use the oldest completed one */      i = lseqi;      pEntry = &dns_table[i];    }  }  /* use this entry */  LWIP_DEBUGF(DNS_DEBUG, ("dns_enqueue: \"%s\": use DNS entry %"U16_F"\n", name, (u16_t)(i)));  /* fill the entry */  pEntry->state = DNS_STATE_NEW;  pEntry->seqno = dns_seqno++;  pEntry->found = found;  pEntry->arg   = callback_arg;  namelen = LWIP_MIN(strlen(name), DNS_MAX_NAME_LENGTH-1);  MEMCPY(pEntry->name, name, namelen);  pEntry->name[namelen] = 0;  /* force to send query without waiting timer */  dns_check_entry(i);  /* dns query is enqueued */  return ERR_INPROGRESS;}/** * Resolve a hostname (string) into an IP address. * NON-BLOCKING callback version for use with raw API!!! * * Returns immediately with one of err_t return codes: * - ERR_OK if hostname is a valid IP address string or the host *   name is already in the local names table. * - ERR_INPROGRESS enqueue a request to be sent to the DNS server *   for resolution if no errors are present. * - ERR_ARG: dns client not initialized or invalid hostname * * @param hostname the hostname that is to be queried * @param addr pointer to a ip_addr_t where to store the address if it is already *             cached in the dns_table (only valid if ERR_OK is returned!) * @param found a callback function to be called on success, failure or timeout (only if *              ERR_INPROGRESS is returned!) * @param callback_arg argument to pass to the callback function * @return a err_t return code. */err_tdns_gethostbyname(const char *hostname, ip_addr_t *addr, dns_found_callback found,                  void *callback_arg){  u32_t ipaddr;  /* not initialized or no valid server yet, or invalid addr pointer   * or invalid hostname or invalid hostname length */  if ((dns_pcb == NULL) || (addr == NULL) ||      (!hostname) || (!hostname[0]) ||      (strlen(hostname) >= DNS_MAX_NAME_LENGTH)) {    return ERR_ARG;  }#if LWIP_HAVE_LOOPIF  if (strcmp(hostname, "localhost")==0) {    ip_addr_set_loopback(addr);    return ERR_OK;  }#endif /* LWIP_HAVE_LOOPIF */  /* host name already in octet notation? set ip addr and return ERR_OK */  ipaddr = ipaddr_addr(hostname);  if (ipaddr == IPADDR_NONE) {    /* already have this address cached? */    ipaddr = dns_lookup(hostname);  }  if (ipaddr != IPADDR_NONE) {    ip4_addr_set_u32(addr, ipaddr);    return ERR_OK;  }  /* queue query with specified callback */  return dns_enqueue(hostname, found, callback_arg);}#endif /* LWIP_DNS */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产精品二十页| 国产综合久久久久久鬼色| 久久精品日产第一区二区三区高清版 | 一区二区三区精品视频| 亚洲欧美日韩一区| 一区二区三区成人| 亚洲一区二区欧美激情| 亚洲成av人影院在线观看网| 亚洲成精国产精品女| 日韩精品乱码免费| 久88久久88久久久| 成人h动漫精品一区二区| 不卡视频在线观看| 欧美日韩夫妻久久| 精品久久久网站| 久久久精品欧美丰满| 国产精品久久免费看| 一区二区在线看| 日韩精品乱码免费| 成人午夜电影久久影院| 色婷婷综合久久久久中文| 欧美二区三区91| 久久久久久99精品| 亚洲精品国产无套在线观| 日韩av电影天堂| 不卡的av在线播放| 91精品国产综合久久久蜜臀粉嫩 | 亚洲视频狠狠干| 偷拍亚洲欧洲综合| 国产一区二区三区久久久| 99久久夜色精品国产网站| 在线综合视频播放| 国产精品成人免费| 免费看精品久久片| 91视频在线观看免费| 欧美大片顶级少妇| 亚洲精品成a人| 国产精品一二一区| 欧美日本一区二区三区四区| 久久这里只有精品视频网| 亚洲高清不卡在线| 成人97人人超碰人人99| 日韩欧美国产一区二区三区| 亚洲欧美激情一区二区| 国产制服丝袜一区| 56国语精品自产拍在线观看| 欧美国产日韩a欧美在线观看| 丝袜美腿成人在线| 欧美综合欧美视频| 国产精品视频一二| 久久疯狂做爰流白浆xx| 在线观看亚洲专区| 1区2区3区国产精品| 国产盗摄一区二区| 日韩欧美电影在线| 亚洲v中文字幕| 色8久久人人97超碰香蕉987| 国产精品动漫网站| 国产91丝袜在线观看| 日韩视频一区二区| 强制捆绑调教一区二区| 欧美日韩久久久一区| 亚洲麻豆国产自偷在线| 成人99免费视频| 国产午夜亚洲精品羞羞网站| 国内欧美视频一区二区| 日韩精品在线网站| 另类小说视频一区二区| 日韩一区二区三区视频在线观看| 午夜精品一区在线观看| 欧美三级视频在线| 日韩精品午夜视频| 日韩一区二区三区高清免费看看| 三级一区在线视频先锋| 欧美肥胖老妇做爰| 日韩国产成人精品| 日韩区在线观看| 韩日精品视频一区| 久久久久久日产精品| 国产成人av一区二区三区在线| 2023国产精品视频| 国产成人在线视频网址| 日本一区二区不卡视频| av电影天堂一区二区在线| 亚洲视频1区2区| 欧美日韩不卡在线| 久久精品国产一区二区| 久久精品欧美一区二区三区麻豆 | 亚洲欧美一区二区久久| 日本韩国一区二区| 日韩精品视频网站| 久久婷婷色综合| 91热门视频在线观看| 午夜精品一区在线观看| 久久亚洲捆绑美女| 91美女在线观看| 日本一区中文字幕| 中文一区二区在线观看 | 亚洲成人免费影院| 日韩精品影音先锋| 91美女片黄在线观看| 日本aⅴ免费视频一区二区三区| 精品成人佐山爱一区二区| 成人av一区二区三区| 视频一区在线播放| 中文字幕精品一区| 欧美老肥妇做.爰bbww| 欧美日韩免费在线视频| 极品少妇一区二区| 亚洲精品菠萝久久久久久久| 日韩欧美亚洲国产另类 | 裸体在线国模精品偷拍| 亚洲国产成人自拍| 91精品国产综合久久久久久久 | 8x8x8国产精品| 成人黄色小视频| 蜜桃一区二区三区四区| 亚洲你懂的在线视频| wwww国产精品欧美| 欧美精品精品一区| 91免费版在线| 国产激情视频一区二区在线观看 | 国产一区二区美女诱惑| 亚洲最大色网站| 国产精品天天摸av网| 日韩午夜激情av| 欧美做爰猛烈大尺度电影无法无天| 国内成人免费视频| 日产欧产美韩系列久久99| 亚洲日本va午夜在线影院| 国产欧美一区二区精品性| 欧美精品日韩一区| 在线观看网站黄不卡| 99久久精品情趣| 成人激情小说乱人伦| 韩国v欧美v日本v亚洲v| 91网站在线观看视频| 懂色一区二区三区免费观看| 麻豆精品一区二区三区| 日本免费新一区视频| 亚洲成人www| 日韩精品电影在线观看| 亚洲午夜久久久久中文字幕久| 中文字幕欧美一| 一色屋精品亚洲香蕉网站| 国产精品美女久久久久久2018| 国产日韩精品一区二区三区| 日韩欧美一级在线播放| 日韩免费高清av| 精品国产91洋老外米糕| 欧美成人一区二区三区在线观看| 欧美一区二区观看视频| 日韩三级.com| 久久人人97超碰com| 亚洲国产成人午夜在线一区| 国产精品久久久久久久久久久免费看 | 99麻豆久久久国产精品免费| 成人黄色在线视频| 91免费小视频| 欧美在线观看一区| 在线不卡一区二区| 日韩精品一区二区三区老鸭窝| 日韩一区二区三区视频| 久久久久综合网| 国产精品高潮呻吟| 亚洲主播在线播放| 亚洲va中文字幕| 国模无码大尺度一区二区三区| 国产精品一二三| 91免费版pro下载短视频| 欧美区在线观看| 精品久久久久久综合日本欧美| 久久久久高清精品| 一区二区三区在线观看动漫| 亚洲国产精品久久一线不卡| 男人的天堂久久精品| 国产999精品久久| 欧美视频精品在线观看| 日韩精品一区二区三区蜜臀| 中文字幕一区二| 五月天国产精品| 国产成人福利片| 欧美日韩国产电影| 国产日产欧产精品推荐色| 亚洲宅男天堂在线观看无病毒 | 国产精品激情偷乱一区二区∴| 亚洲精品成a人| 国产精品一区二区在线看| 在线免费观看日本一区| 久久综合九色综合久久久精品综合| 国产精品久久久久婷婷二区次| 亚洲v日本v欧美v久久精品| 成人午夜私人影院| 日韩精品最新网址| 亚洲日穴在线视频| 国产原创一区二区三区| 欧美日韩成人综合| 中文字幕一区二区5566日韩| 国产一本一道久久香蕉| 91精品在线免费观看|