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

📄 res_debu.c

📁 开放源码的编译器open watcom 1.6.0版的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
  cp    += INT16SZ;
  tmpttl = _getlong ((u_char*)cp);
  cp    += INT32SZ;
  dlen   = _getshort ((u_char*)cp);
  cp    += INT16SZ;
  cp1    = cp;

  if (!_res.pfcode || (_res.pfcode & RES_PRF_TTLID))
     fprintf (file, "\t%lu", (u_long)tmpttl);

  if (!_res.pfcode || (_res.pfcode & RES_PRF_CLASS))
     fprintf (file, "\t%s", __p_class(class));

  fprintf (file, "\t%s", __p_type(type));

  /* Print type specific data, if appropriate
   */
  switch (type)
  {
    case T_A:
         switch (class)
         {
           case C_IN:
           case C_HS:
                memcpy (&inaddr,cp,INADDRSZ);
                if (dlen == 4)
                {
                  fprintf (file, "\t%s", inet_ntoa(inaddr));
                  cp += dlen;
                }
                else if (dlen == 7)
                {
                  char   *address;
                  u_char  protocol;
                  u_short port;

                  address = inet_ntoa (inaddr);
                  cp += INADDRSZ;
                  protocol = *(u_char*)cp;
                  cp += sizeof(u_char);
                  port = _getshort((u_char*)cp);
                  cp += INT16SZ;
                  fprintf (file, "\t%s\t; proto %d, port %d",
                           address, protocol, port);
                }
                break;
           default:
                cp += dlen;
         }
         break;

    case T_CNAME:
    case T_MB:
    case T_MG:
    case T_MR:
    case T_NS:
    case T_PTR:
         putc ('\t', file);
         if ((cp = p_fqname(cp, msg, file)) == NULL)
            return (NULL);
         break;

    case T_HINFO:
    case T_ISDN:
         cp2 = cp + dlen;
         if ((n = *cp++) != 0)
         {
           fprintf (file, "\t%.*s", n, cp);
           cp += n;
         }
         if ((cp < cp2) && (n = *cp++) != 0)
         {
           fprintf (file, "\t%.*s", n, cp);
           cp += n;
         }
         else if (type == T_HINFO)
                 fprintf (file, "\n;; *** Warning *** OS-type missing");
         break;

    case T_SOA:
         putc ('\t', file);
         if ((cp = p_fqname(cp, msg, file)) == NULL)
            return (NULL);
         putc (' ', file);
         if ((cp = p_fqname(cp, msg, file)) == NULL)
            return (NULL);
         fputs (" (\n", file);
         t   = _getlong ((u_char*)cp);
         cp += INT32SZ;
         fprintf (file, "\t\t\t%lu\t; serial\n", (u_long)t);
         t   = _getlong ((u_char*)cp);
         cp += INT32SZ;
         fprintf (file, "\t\t\t%lu\t; refresh (%s)\n", (u_long)t, __p_time(t));
         t   = _getlong ((u_char*)cp);
         cp += INT32SZ;
         fprintf (file, "\t\t\t%lu\t; retry (%s)\n", (u_long)t, __p_time(t));
         t   = _getlong ((u_char*)cp);
         cp += INT32SZ;
         fprintf (file, "\t\t\t%lu\t; expire (%s)\n", (u_long)t, __p_time(t));
         t   = _getlong ((u_char*)cp);
         cp += INT32SZ;
         fprintf (file, "\t\t\t%lu )\t; minimum (%s)", (u_long)t, __p_time(t));
         break;

    case T_MX:
    case T_AFSDB:
    case T_RT:
         fprintf (file, "\t%d ", _getshort((u_char*)cp));
         cp += INT16SZ;
         if ((cp = p_fqname(cp, msg, file)) == NULL)
            return (NULL);
         break;

    case T_PX:
         fprintf (file, "\t%d ", _getshort((u_char*)cp));
         cp += INT16SZ;
         if ((cp = p_fqname(cp, msg, file)) == NULL)
            return (NULL);
         putc (' ', file);
         if ((cp = p_fqname(cp, msg, file)) == NULL)
            return (NULL);
         break;

    case T_TXT:
    case T_X25:
         fputs ("\t\"", file);
         cp2 = cp1 + dlen;
         while (cp < cp2)
         {
           if ((n = (unsigned char)*cp++) != 0)
           {
             for (c = n; c > 0 && cp < cp2; c--)
               if (*cp == '\n' || *cp == '"')
               {
                 putc ('\\', file);
                 putc (*cp++, file);
               }
               else
                 putc (*cp++, file);
           }
         }
         putc ('"', file);
         break;

    case T_NSAP:
         fprintf (file, "\t%s", inet_nsap_ntoa(dlen, cp, NULL));
         cp += dlen;
         break;

    case T_MINFO:
    case T_RP:
         putc ('\t', file);
         if ((cp = p_fqname(cp, msg, file)) == NULL)
            return (NULL);
         putc (' ', file);
         if ((cp = p_fqname(cp, msg, file)) == NULL)
            return (NULL);
         break;

    case T_UINFO:
         putc ('\t', file);
         fputs ((char *)cp, file);
         cp += dlen;
         break;

    case T_UID:
    case T_GID:
         if (dlen == 4)
         {
           fprintf (file, "\t%u", (unsigned int) _getlong((u_char*)cp));
           cp += INT32SZ;
         }
         break;

    case T_WKS:
         if (dlen < INT32SZ + 1)
            break;
         memcpy (&inaddr,cp,INADDRSZ);
         cp += INT32SZ;
         fprintf (file, "\t%s %s ( ", inet_ntoa(inaddr), deproto((int)*cp));
         cp += sizeof(u_char);
         n = 0;
         lcnt = 0;
         while (cp < cp1 + dlen)
         {
           c = *cp++;
           do
           {
             if (c & 0200)
             {
               if (lcnt == 0)
               {
                 fputs ("\n\t\t\t", file);
                 lcnt = 5;
               }
               fputs (dewks(n), file);
               putc (' ', file);
               lcnt--;
             }
             c <<= 1;
           }
           while (++n & 07);
         }
         putc (')', file);
         break;

#if ALLOW_T_UNSPEC
    case T_UNSPEC:
         {
           int NumBytes = 8;
           u_char *DataPtr;
           int i;

           if (dlen < NumBytes)
              NumBytes = dlen;
           fprintf (file, "\tFirst %d bytes of hex data:", NumBytes);
           for (i = 0, DataPtr = cp; i < NumBytes; i++, DataPtr++)
               fprintf (file, " %x", *DataPtr);
           cp += dlen;
         }
         break;
#endif

    default:
         fprintf (file, "\t?%d?", type);
         cp += dlen;
  }

#if 0
  fprintf (file, "\t; dlen=%d, ttl %s\n", dlen, __p_time(tmpttl));
#else
  putc ('\n', file);
#endif

  if (cp - cp1 != dlen)
  {
    fprintf (file, ";; packet size error (found %d, dlen was %d)\n",
             (int)(cp - cp1), dlen);
    cp = NULL;
  }
  return (cp);
}

/*
 * Return a string for the type
 */
const char *__p_type (int type)
{
  static char buf[20];

  switch (type)
  {
    case T_A:        return "A";
    case T_NS:       return "NS";
    case T_CNAME:    return "CNAME";
    case T_SOA:      return "SOA";
    case T_MB:       return "MB";
    case T_MG:       return "MG";
    case T_MR:       return "MR";
    case T_NULL:     return "NULL";
    case T_WKS:      return "WKS";
    case T_PTR:      return "PTR";
    case T_HINFO:    return "HINFO";
    case T_MINFO:    return "MINFO";
    case T_MX:       return "MX";
    case T_TXT:      return "TXT";
    case T_RP:       return "RP";
    case T_AFSDB:    return "AFSDB";
    case T_X25:      return "X25";
    case T_ISDN:     return "ISDN";
    case T_RT:       return "RT";
    case T_NSAP:     return "NSAP";
    case T_NSAP_PTR: return "NSAP_PTR";
    case T_SIG:      return "SIG";
    case T_KEY:      return "KEY";
    case T_PX:       return "PX";
    case T_GPOS:     return "GPOS";
    case T_AAAA:     return "AAAA";
    case T_LOC:      return "LOC";
    case T_AXFR:     return "AXFR";
    case T_MAILB:    return "MAILB";
    case T_MAILA:    return "MAILA";
    case T_ANY:      return "ANY";
    case T_UINFO:    return "UINFO";
    case T_UID:      return "UID";
    case T_GID:      return "GID";
#if ALLOW_T_UNSPEC
    case T_UNSPEC:   return "UNSPEC";
#endif
  }
  sprintf (buf, "%d", type);
  return (buf);
}

/*
 * Return a mnemonic for class
 */
const char *__p_class (int class)
{
  static char buf[20];

  switch (class)
  {
    case C_IN:  return "IN";
    case C_HS:  return "HS";
    case C_ANY: return "ANY";
  }
  sprintf (buf, "%d", class);
  return (buf);
}

/*
 * Return a mnemonic for an option
 */
const char * __p_option (u_long option)
{
  static char buf[40];

  switch (option)
  {
    case RES_INIT:      return "init";
    case RES_DEBUG:     return "debug";
    case RES_AAONLY:    return "aaonly(unimpl)";
    case RES_USEVC:     return "usevc";
    case RES_PRIMARY:   return "primry(unimpl)";
    case RES_IGNTC:     return "igntc";
    case RES_RECURSE:   return "recurs";
    case RES_DEFNAMES:  return "defnam";
    case RES_STAYOPEN:  return "styopn";
    case RES_DNSRCH:    return "dnsrch";
    case RES_INSECURE1: return "insecure1";
    case RES_INSECURE2: return "insecure2";
  }
  sprintf (buf, "?0x%lx?",option);
  return (buf);
}

/*
 * Return a mnemonic for a time to live
 */
char * __p_time (u_long value)
{
  static char buf[120];
  int    secs, mins, hours, days;
  char  *p;

  if (value == 0)
  {
    strcpy (buf, "0 secs");
    return (buf);
  }

  secs = value % 60;
  value /= 60;
  mins = value % 60;
  value /= 60;
  hours = value % 24;
  value /= 24;
  days = value;
  value = 0;

#define  PLURALIZE(x)  x, (x == 1) ? "" : "s"
  p = buf;
  if (days)
  {
    sprintf (p, "%d day%s", PLURALIZE(days));
    while (*++p) ;
  }
  if (hours)
  {
    if (days)
       *p++ = ' ';
    sprintf (p, "%d hour%s", PLURALIZE(hours));
    while (*++p) ;
  }
  if (mins)
  {
    if (days || hours)
       *p++ = ' ';
    sprintf (p, "%d min%s", PLURALIZE(mins));
    while (*++p) ;
  }
  if (secs || ! (days || hours || mins))
  {
    if (days || hours || mins)
       *p++ = ' ';
    sprintf (p, "%d sec%s", PLURALIZE(secs));
  }
  return (buf);
}
#endif /* USE_BIND */

⌨️ 快捷键说明

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