home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-
- #include "vterm.h"
-
- /* RR types */
- #define TYPE_A 1 /* a host address */
- #define TYPE_NS 2 /* an authoritative name server */
- #define TYPE_MD 3 /* a mail destination (Obsolete - use MX) */
- #define TYPE_MF 4 /* a mail forwarder (Obsolete - use MX) */
- #define TYPE_CNAME 5 /* the canonical name for an alias */
- #define TYPE_SOA 6 /* marks the start of a zone of authority */
- #define TYPE_MB 7 /* a mailbox domain name (EXPERIMENTAL) */
- #define TYPE_MG 8 /* a mail group member (EXPERIMENTAL) */
- #define TYPE_MR 9 /* a mail rename domain name (EXPERIMENTAL) */
- #define TYPE_NULL 10 /* a null RR (EXPERIMENTAL) */
- #define TYPE_WKS 11 /* a well known service description */
- #define TYPE_PTR 12 /* a domain name pointer */
- #define TYPE_HINFO 13 /* host information */
- #define TYPE_MINFO 14 /* mailbox or mail list information */
- #define TYPE_MX 15 /* mail exchange */
- #define TYPE_TXT 16 /* text strings */
-
- /* Additional Q types */
- #define TYPE_AXFR 252 /* A request for a transfer of an entire zone */
- #define TYPE_MAILB 253 /* A request for mailbox-related records (MB, MG or MR) */
- #define TYPE_MAILA 254 /* A request for mail agent RRs (Obsolete - see MX) */
- #define TYPE_ALL 255 /* A request for all records */
-
- /* RR classes */
- #define CLASS_IN 1 /* the Internet */
- #define CLASS_CS 2 /* the CSNET class (Obsolete) */
- #define CLASS_CH 3 /* the CHAOS class */
- #define CLASS_HS 4 /* Hesiod */
-
- /* Additional Q classes */
- #define CLASS_ANY 255 /* any class */
-
- #define RCODE_OK 0
- #define RCODE_BADFORM 1
- #define RCODE_SERVFAIL 2
- #define RCODE_NAMEERR 3
- #define RCODE_NOTIMP 4
- #define RCODE_REFUSED 5
-
- #define OPCODE_STD 0
- #define OPCODE_INV 1
- #define OPCODE_STAT 2
-
- #define PRASC(a) ( ((a)>=' ' && (a)<0x7f) ? a : '.' )
-
- typedef unsigned char uint8;
- typedef unsigned short uint16;
- typedef unsigned int uint32;
- typedef int int32;
-
- typedef struct rr_str {
- struct rr_str *next;
- char *name;
- uint16 type;
- uint16 class;
- int32 ttl;
- union {
- struct {
- char *name;
- } cname;
- struct {
- char *name;
- } mb;
- struct {
- char *name;
- } md;
- struct {
- char *name;
- } mf;
- struct {
- char *name;
- } mg;
- struct {
- char *name;
- } mr;
- struct {
- char *name;
- } ns;
- struct {
- char *name;
- } ptr;
- struct {
- char *text;
- } txt;
- struct {
- char *cpu;
- char *os;
- } hinfo;
- struct {
- char *rmbx;
- char *embx;
- } minfo;
- struct {
- uint16 pref;
- char *name;
- } mx;
- struct {
- int len;
- char *data;
- } null;
- struct {
- char *mname;
- char *rname;
- uint32 serial;
- uint32 refresh;
- uint32 retry;
- uint32 expire;
- uint32 minttl;
- } soa;
- struct {
- uint32 addr;
- } a;
- struct {
- uint32 addr;
- uint8 protocol;
- uint16 len;
- char *data;
- } wks;
- } rdata;
- } rr_str;
-
- typedef struct qr_str {
- struct qr_str *link; /* Link back to next query */
- rr_str *answers; /* None null if an answer has been received */
- uint32 nsaddr; /* IP Address of name server to use */
- uint16 type; /* Type of lookup required */
- uint16 id; /* Request ID */
- char *name; /* Name to query */
- uint32 options; /* Options as follows: */
- #define QR_RECURSE 0x01 /* Recursive lookup */
- #define QR_AUTHORITIVE 0x02 /* Authoritve answer only */
- #define QR_PERSUE 0x04 /* Persue until desired result */
- #define QR_VERBOSE 0x08 /* Show everything */
- #define QR_VERYVERBOSE 0x10 /* Show evrything */
- #define QR_BRIEF 0x20 /* Be brief */
- #define QS_UNIXNSL 0x40 /* Unix type syntax */
- #define QR_INVERSE 0x100 /* Inverse lookup */
- #define QR_GATEWAY 0x200 /* Extract Net number */
-
- #define QR_BYPASS 0x1000 /* Bypass local DNS facilities */
- #define QR_CACHE 0x2000 /* Cache result */
- #define QR_REFRESH 0x4000 /* Refresh cached value */
-
- #define QR_GIVE_FULL 0x00000 /* Deliver a full list of RRs */
- #define QR_GIVE_ADDR 0x10000 /* Deliver a host address only */
- #define QR_GIVE_NAME 0x20000 /* Deliver a host name only */
- #define QR_GIVE_MXLIST 0x30000 /* Deliver a list of ordered MX host addresses */
- #define QR_WANT_MASK 0x30000 /* Mask for extracting the delivery type */
-
- #define QR_USE_TCP 0x100000 /* Use TCP else use UDP */
- } qr_str;
-
-