⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dns_ipq.c

📁 fget是一个小型的HTTP/FTP工具
💻 C
字号:
#include "stralloc.h"#include "case.h"#include "byte.h"#include "str.h"#include "dns.h"static int doit(stralloc *work,char *rule){  char ch;  unsigned int colon;  unsigned int prefixlen;  ch = *rule++;  if ((ch != '?') && (ch != '=') && (ch != '*') && (ch != '-')) return 1;  colon = str_chr(rule,':');  if (!rule[colon]) return 1;  if (work->len < colon) return 1;  prefixlen = work->len - colon;  if ((ch == '=') && prefixlen) return 1;  if (case_diffb(rule,colon,work->s + prefixlen)) return 1;  if (ch == '?') {    if (byte_chr(work->s,prefixlen,'.') < prefixlen) return 1;    if (byte_chr(work->s,prefixlen,'[') < prefixlen) return 1;    if (byte_chr(work->s,prefixlen,']') < prefixlen) return 1;  }  work->len = prefixlen;  if (ch == '-') work->len = 0;  return stralloc_cats(work,rule + colon + 1);}int dns_ip4_qualify_rules(stralloc *out,stralloc *fqdn,stralloc *in,stralloc *rules){  unsigned int i;  unsigned int j;  unsigned int plus;  unsigned int fqdnlen;  if (!stralloc_copy(fqdn,in)) return -1;  for (j = i = 0;j < rules->len;++j)    if (!rules->s[j]) {      if (!doit(fqdn,rules->s + i)) return -1;      i = j + 1;    }  fqdnlen = fqdn->len;  plus = byte_chr(fqdn->s,fqdnlen,'+');  if (plus >= fqdnlen)    return dns_ip4(out,fqdn);  i = plus + 1;  for (;;) {    j = byte_chr(fqdn->s + i,fqdnlen - i,'+');    byte_copy(fqdn->s + plus,j,fqdn->s + i);    fqdn->len = plus + j;    if (dns_ip4(out,fqdn) == -1) return -1;    if (out->len) return 0;    i += j;    if (i >= fqdnlen) return 0;    ++i;  }}int dns_ip4_qualify(stralloc *out,stralloc *fqdn,stralloc *in){  static stralloc rules;  if (dns_resolvconfrewrite(&rules) == -1) return -1;  return dns_ip4_qualify_rules(out,fqdn,in,&rules);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -