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

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

?? dns.c

?? lwip-1.4.0
?? C
?? 第 1 頁 / 共 3 頁
字號:
    LWIP_ASSERT("namelen <= DNS_LOCAL_HOSTLIST_MAX_NAMELEN", namelen <= DNS_LOCAL_HOSTLIST_MAX_NAMELEN);    entry = (struct local_hostlist_entry *)memp_malloc(MEMP_LOCALHOSTLIST);    LWIP_ASSERT("mem-error in dns_init_local", entry != NULL);    if (entry != NULL) {      entry->name = (char*)entry + sizeof(struct local_hostlist_entry);      MEMCPY((char*)entry->name, init_entry->name, namelen);      ((char*)entry->name)[namelen] = 0;      entry->addr = init_entry->addr;      entry->next = local_hostlist_dynamic;      local_hostlist_dynamic = entry;    }  }#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC && defined(DNS_LOCAL_HOSTLIST_INIT) */}/** * Scans the local host-list for a hostname. * * @param hostname Hostname to look for in the local host-list * @return The first IP address for the hostname in the local host-list or *         IPADDR_NONE if not found. */static u32_tdns_lookup_local(const char *hostname){#if DNS_LOCAL_HOSTLIST_IS_DYNAMIC  struct local_hostlist_entry *entry = local_hostlist_dynamic;  while(entry != NULL) {    if(strcmp(entry->name, hostname) == 0) {      return ip4_addr_get_u32(&entry->addr);    }    entry = entry->next;  }#else /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */  int i;  for (i = 0; i < sizeof(local_hostlist_static) / sizeof(struct local_hostlist_entry); i++) {    if(strcmp(local_hostlist_static[i].name, hostname) == 0) {      return ip4_addr_get_u32(&local_hostlist_static[i].addr);    }  }#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */  return IPADDR_NONE;}#if DNS_LOCAL_HOSTLIST_IS_DYNAMIC/** Remove all entries from the local host-list for a specific hostname * and/or IP addess * * @param hostname hostname for which entries shall be removed from the local *                 host-list * @param addr address for which entries shall be removed from the local host-list * @return the number of removed entries */intdns_local_removehost(const char *hostname, const ip_addr_t *addr){  int removed = 0;  struct local_hostlist_entry *entry = local_hostlist_dynamic;  struct local_hostlist_entry *last_entry = NULL;  while (entry != NULL) {    if (((hostname == NULL) || !strcmp(entry->name, hostname)) &&        ((addr == NULL) || ip_addr_cmp(&entry->addr, addr))) {      struct local_hostlist_entry *free_entry;      if (last_entry != NULL) {        last_entry->next = entry->next;      } else {        local_hostlist_dynamic = entry->next;      }      free_entry = entry;      entry = entry->next;      memp_free(MEMP_LOCALHOSTLIST, free_entry);      removed++;    } else {      last_entry = entry;      entry = entry->next;    }  }  return removed;}/** * Add a hostname/IP address pair to the local host-list. * Duplicates are not checked. * * @param hostname hostname of the new entry * @param addr IP address of the new entry * @return ERR_OK if succeeded or ERR_MEM on memory error */err_tdns_local_addhost(const char *hostname, const ip_addr_t *addr){  struct local_hostlist_entry *entry;  size_t namelen;  LWIP_ASSERT("invalid host name (NULL)", hostname != NULL);  namelen = strlen(hostname);  LWIP_ASSERT("namelen <= DNS_LOCAL_HOSTLIST_MAX_NAMELEN", namelen <= DNS_LOCAL_HOSTLIST_MAX_NAMELEN);  entry = (struct local_hostlist_entry *)memp_malloc(MEMP_LOCALHOSTLIST);  if (entry == NULL) {    return ERR_MEM;  }  entry->name = (char*)entry + sizeof(struct local_hostlist_entry);  MEMCPY((char*)entry->name, hostname, namelen);  ((char*)entry->name)[namelen] = 0;  ip_addr_copy(entry->addr, *addr);  entry->next = local_hostlist_dynamic;  local_hostlist_dynamic = entry;  return ERR_OK;}#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC*/#endif /* DNS_LOCAL_HOSTLIST *//** * Look up a hostname in the array of known hostnames. * * @note This function only looks in the internal array of known * hostnames, it does not send out a query for the hostname if none * was found. The function dns_enqueue() can be used to send a query * for a hostname. * * @param name the hostname to look up * @return the hostname's IP address, as u32_t (instead of ip_addr_t to *         better check for failure: != IPADDR_NONE) or IPADDR_NONE if the hostname *         was not found in the cached dns_table. */static u32_tdns_lookup(const char *name){  u8_t i;#if DNS_LOCAL_HOSTLIST || defined(DNS_LOOKUP_LOCAL_EXTERN)  u32_t addr;#endif /* DNS_LOCAL_HOSTLIST || defined(DNS_LOOKUP_LOCAL_EXTERN) */#if DNS_LOCAL_HOSTLIST  if ((addr = dns_lookup_local(name)) != IPADDR_NONE) {    return addr;  }#endif /* DNS_LOCAL_HOSTLIST */#ifdef DNS_LOOKUP_LOCAL_EXTERN  if((addr = DNS_LOOKUP_LOCAL_EXTERN(name)) != IPADDR_NONE) {    return addr;  }#endif /* DNS_LOOKUP_LOCAL_EXTERN */  /* Walk through name list, return entry if found. If not, return NULL. */  for (i = 0; i < DNS_TABLE_SIZE; ++i) {    if ((dns_table[i].state == DNS_STATE_DONE) &&        (strcmp(name, dns_table[i].name) == 0)) {      LWIP_DEBUGF(DNS_DEBUG, ("dns_lookup: \"%s\": found = ", name));      ip_addr_debug_print(DNS_DEBUG, &(dns_table[i].ipaddr));      LWIP_DEBUGF(DNS_DEBUG, ("\n"));      return ip4_addr_get_u32(&dns_table[i].ipaddr);    }  }  return IPADDR_NONE;}#if DNS_DOES_NAME_CHECK/** * Compare the "dotted" name "query" with the encoded name "response" * to make sure an answer from the DNS server matches the current dns_table * entry (otherwise, answers might arrive late for hostname not on the list * any more). * * @param query hostname (not encoded) from the dns_table * @param response encoded hostname in the DNS response * @return 0: names equal; 1: names differ */static u8_tdns_compare_name(unsigned char *query, unsigned char *response){  unsigned char n;  do {    n = *response++;    /** @see RFC 1035 - 4.1.4. Message compression */    if ((n & 0xc0) == 0xc0) {      /* Compressed name */      break;    } else {      /* Not compressed name */      while (n > 0) {        if ((*query) != (*response)) {          return 1;        }        ++response;        ++query;        --n;      };      ++query;    }  } while (*response != 0);  return 0;}#endif /* DNS_DOES_NAME_CHECK *//** * Walk through a compact encoded DNS name and return the end of the name. * * @param query encoded DNS name in the DNS server response * @return end of the name */static unsigned char *dns_parse_name(unsigned char *query){  unsigned char n;  do {    n = *query++;    /** @see RFC 1035 - 4.1.4. Message compression */    if ((n & 0xc0) == 0xc0) {      /* Compressed name */      break;    } else {      /* Not compressed name */      while (n > 0) {        ++query;        --n;      };    }  } while (*query != 0);  return query + 1;}/** * Send a DNS query packet. * * @param numdns index of the DNS server in the dns_servers table * @param name hostname to query * @param id index of the hostname in dns_table, used as transaction ID in the *        DNS query packet * @return ERR_OK if packet is sent; an err_t indicating the problem otherwise */static err_tdns_send(u8_t numdns, const char* name, u8_t id){  err_t err;  struct dns_hdr *hdr;  struct dns_query qry;  struct pbuf *p;  char *query, *nptr;  const char *pHostname;  u8_t n;  LWIP_DEBUGF(DNS_DEBUG, ("dns_send: dns_servers[%"U16_F"] \"%s\": request\n",              (u16_t)(numdns), name));  LWIP_ASSERT("dns server out of array", numdns < DNS_MAX_SERVERS);  LWIP_ASSERT("dns server has no IP address set", !ip_addr_isany(&dns_servers[numdns]));  /* if here, we have either a new query or a retry on a previous query to process */  p = pbuf_alloc(PBUF_TRANSPORT, SIZEOF_DNS_HDR + DNS_MAX_NAME_LENGTH +                 SIZEOF_DNS_QUERY, PBUF_RAM);  if (p != NULL) {    LWIP_ASSERT("pbuf must be in one piece", p->next == NULL);    /* fill dns header */    hdr = (struct dns_hdr*)p->payload;    memset(hdr, 0, SIZEOF_DNS_HDR);    hdr->id = htons(id);    hdr->flags1 = DNS_FLAG1_RD;    hdr->numquestions = PP_HTONS(1);    query = (char*)hdr + SIZEOF_DNS_HDR;    pHostname = name;    --pHostname;    /* convert hostname into suitable query format. */    do {      ++pHostname;      nptr = query;      ++query;      for(n = 0; *pHostname != '.' && *pHostname != 0; ++pHostname) {        *query = *pHostname;        ++query;        ++n;      }      *nptr = n;    } while(*pHostname != 0);    *query++='\0';    /* fill dns query */    qry.type = PP_HTONS(DNS_RRTYPE_A);    qry.cls = PP_HTONS(DNS_RRCLASS_IN);    SMEMCPY(query, &qry, SIZEOF_DNS_QUERY);    /* resize pbuf to the exact dns query */    pbuf_realloc(p, (u16_t)((query + SIZEOF_DNS_QUERY) - ((char*)(p->payload))));    /* connect to the server for faster receiving */    udp_connect(dns_pcb, &dns_servers[numdns], DNS_SERVER_PORT);    /* send dns packet */    err = udp_sendto(dns_pcb, p, &dns_servers[numdns], DNS_SERVER_PORT);    /* free pbuf */    pbuf_free(p);  } else {    err = ERR_MEM;  }  return err;}/** * dns_check_entry() - see if pEntry has not yet been queried and, if so, sends out a query. * Check an entry in the dns_table: * - send out query for new entries * - retry old pending entries on timeout (also with different servers) * - remove completed entries from the table if their TTL has expired * * @param i index of the dns_table entry to check */static voiddns_check_entry(u8_t i){  err_t err;  struct dns_table_entry *pEntry = &dns_table[i];  LWIP_ASSERT("array index out of bounds", i < DNS_TABLE_SIZE);  switch(pEntry->state) {    case DNS_STATE_NEW: {      /* initialize new entry */      pEntry->state   = DNS_STATE_ASKING;      pEntry->numdns  = 0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
三级不卡在线观看| 欧美日韩色一区| 国产在线精品国自产拍免费| 日本中文字幕一区二区视频| 亚洲一区二区在线播放相泽 | 日日摸夜夜添夜夜添精品视频| 亚洲激情在线播放| 亚洲一区自拍偷拍| 亚洲不卡在线观看| 日本大胆欧美人术艺术动态| 麻豆久久一区二区| 国产在线不卡一卡二卡三卡四卡| 国模套图日韩精品一区二区| 国产不卡在线视频| fc2成人免费人成在线观看播放| 成人精品视频一区| 91污片在线观看| 欧美影片第一页| 91精品国产aⅴ一区二区| 日韩一区二区免费在线电影| 久久女同互慰一区二区三区| 国产精品欧美一区喷水| 亚洲激情自拍视频| 日韩国产精品大片| 久久不见久久见免费视频7| 成人av网站免费观看| 99久久99久久精品国产片果冻| 色狠狠av一区二区三区| 欧美日韩高清不卡| 精品美女被调教视频大全网站| 久久久亚洲精华液精华液精华液| 国产精品高潮久久久久无| 一区二区三区四区视频精品免费| 亚洲国产欧美在线人成| 麻豆视频观看网址久久| 国产91高潮流白浆在线麻豆| 色久优优欧美色久优优| 日韩欧美在线综合网| 欧美国产综合一区二区| 亚洲精品视频免费观看| 欧美aaaaa成人免费观看视频| 懂色av中文一区二区三区| 色先锋aa成人| 欧美大片国产精品| 亚洲精选视频免费看| 欧美bbbbb| 91在线码无精品| 欧美大胆一级视频| 亚洲另类春色国产| 国产在线精品免费| 欧美亚洲国产一区二区三区va| 精品久久久久久久人人人人传媒 | 亚洲精品免费播放| 九色porny丨国产精品| jiyouzz国产精品久久| 91精品一区二区三区久久久久久| 国产亚洲女人久久久久毛片| 亚洲第一久久影院| 成人一区二区三区| 5月丁香婷婷综合| 亚洲婷婷在线视频| 激情综合色播激情啊| 欧美在线免费播放| 欧美国产精品中文字幕| 蜜桃av一区二区三区电影| 99精品国产视频| 精品不卡在线视频| 亚洲第一综合色| 99久久综合色| 久久久久久久久久久久久久久99 | 性久久久久久久| 成人在线综合网站| 欧美一区二区精品| 亚洲在线观看免费视频| 丁香婷婷综合五月| 日韩女优毛片在线| 亚洲一级不卡视频| 99久久精品国产精品久久| 久久精品在线免费观看| 免费看日韩a级影片| 欧美在线综合视频| 亚洲三级免费观看| www.亚洲在线| 久久久精品国产免大香伊| 免费欧美在线视频| 亚洲欧洲色图综合| 国产一区久久久| 精品电影一区二区| 久久精品国产一区二区| 7777精品伊人久久久大香线蕉的| 亚洲一二三区视频在线观看| 91网站黄www| 亚洲欧洲av在线| 成人av免费在线| 国产精品美女一区二区在线观看| 国产一区二区伦理片| 精品国产乱码久久久久久免费| 男男gaygay亚洲| 日韩三级在线观看| 秋霞影院一区二区| 日韩欧美一区二区视频| 日本欧洲一区二区| 欧美电影免费观看高清完整版在线| 午夜精品久久久久久| 欧美军同video69gay| 亚洲午夜久久久久| 欧美日韩国产综合草草| 亚洲第一精品在线| 在线不卡的av| 蜜臀久久久久久久| 久久综合久久综合亚洲| 国产精品自拍av| 国产精品美女久久久久aⅴ| 高清久久久久久| 中文字幕一区二区三区四区| 91浏览器打开| 亚洲精品成人少妇| 欧美电影一区二区| 麻豆一区二区在线| 久久久影视传媒| av资源网一区| 一二三四社区欧美黄| 欧美男男青年gay1069videost| 午夜婷婷国产麻豆精品| 欧美一级片在线| 国内精品国产三级国产a久久| 久久久噜噜噜久久中文字幕色伊伊 | 在线免费观看视频一区| 亚洲一区二区三区免费视频| 欧美日韩国产精选| 国产在线精品不卡| 成人免费在线播放视频| 欧美综合一区二区三区| 人人超碰91尤物精品国产| 26uuu成人网一区二区三区| 成人av网址在线| 天堂久久一区二区三区| 精品少妇一区二区三区| caoporm超碰国产精品| 亚洲成人免费视频| 久久久亚洲国产美女国产盗摄| 93久久精品日日躁夜夜躁欧美| 亚洲国产美女搞黄色| 精品少妇一区二区三区在线播放| 成人在线一区二区三区| 性久久久久久久| 国产婷婷色一区二区三区四区| 91福利在线免费观看| 久久精品国产秦先生| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 成人免费va视频| 午夜精品福利一区二区三区蜜桃| 久久色.com| 91国产免费看| 久久国产精品99久久久久久老狼| 国产精品成人免费精品自在线观看| 欧美日韩免费观看一区三区| 国产麻豆精品theporn| 亚洲美女一区二区三区| 精品电影一区二区| 久久久久久麻豆| 欧美亚洲国产一卡| 国产成人av自拍| 日韩高清一级片| 国产精品人成在线观看免费| 91精品国产综合久久精品麻豆| 成人免费av在线| 蜜臀精品久久久久久蜜臀| 国产精品超碰97尤物18| 精品国产一二三| 欧美日韩亚洲综合一区二区三区| 成人在线视频首页| 久久精品国产一区二区| 亚洲福利视频导航| 最新中文字幕一区二区三区| 欧美tickling挠脚心丨vk| 欧美亚洲另类激情小说| 成人激情综合网站| 韩国三级在线一区| 秋霞电影一区二区| 亚洲永久精品大片| ㊣最新国产の精品bt伙计久久| 久久青草欧美一区二区三区| 欧美一区二区三区啪啪| 欧美日免费三级在线| 99久久精品国产麻豆演员表| 国产a精品视频| 国内精品视频一区二区三区八戒| 日韩中文字幕亚洲一区二区va在线| 樱花草国产18久久久久| 国产精品美女视频| 国产欧美日韩不卡免费| 精品国产乱码久久久久久牛牛| 91麻豆精品国产91久久久久久| 91精品办公室少妇高潮对白| 不卡的av中国片| 成人激情小说乱人伦| 国产精品99久久久久久似苏梦涵| 久久成人久久鬼色| 久久99精品国产91久久来源|