00001
00002
00003 #ifndef _IDNS_H_
00004 #define _IDNS_H_
00005
00007
00008
00009
00010
00011
00012
00013 #define DNS_TYPE_A 1 // Address
00014 #define DNS_TYPE_NS 2 // Auth name server
00015 #define DNS_TYPE_MD 3 // Mail destination
00016 #define DNS_TYPE_MF 4 // Mail forwarder
00017 #define DNS_TYPE_CNAME 5 // Canonical name for an alias
00018 #define DNS_TYPE_SOA 6 // Start of authority
00019 #define DNS_TYPE_MB 7
00020 #define DNS_TYPE_MG 8
00021 #define DNS_TYPE_MR 9
00022 #define DNS_TYPE_NULL 10
00023 #define DNS_TYPE_WKS 11
00024 #define DNS_TYPE_PTR 12
00025 #define DNS_TYPE_HINFO 13
00026 #define DNS_TYPE_MINFO 14
00027 #define DNS_TYPE_MX 15 // Mail exchange
00028 #define DNS_TYPE_TXT 16
00029
00030
00031 #define DNS_QTYPE_AXFR 252 // A request for a transfer of an entire zone
00032 #define DNS_QTYPE_MAILB 253 // A request for mailbox-related records (MB, MG or MR)
00033 #define DNS_QTYPE_MAILA 254 // A request for mail agent RRs (Obsolete - see MX)
00034 #define DNS_QTYPE_ALL 255 // A request for all records
00035
00036
00037 #define DNS_CLASS_IN 1 // The Internet
00038 #define DNS_CLASS_CS 2 // The CSNET class (Obsolete - used only for examples in some obsolete RFCs)
00039 #define DNS_CLASS_CH 3 // The CHAOS class
00040 #define DNS_CLASS_HS 4 // Hesiod [Dyer 87]
00041
00042
00043 #define DNS_QCLASS_ALL 255 // Any class
00044
00045
00046 #define DNS_Q_QUERY 0
00047 #define DNS_Q_IQUERY 1
00048 #define DNS_Q_STATUS 2
00049
00050
00051 #define DNS_R_SUCCESS 0 // No error condition
00052 #define DNS_R_FORMAT_ERROR 1 // The name server was unable to interpret the query.
00053 #define DNS_R_SERVER_FAILED 2 // The name server was unable to process this query due
00054
00055 #define DNS_R_NAME_ERROR 3 // Meaningful only for responses from an authoritative name
00056
00057
00058 #define DNS_R_NOT_IMPL 4 // The name server does not support the requested kind of query.
00059 #define DNS_R_REFUSED 5 // The name server refuses to perform the specified operation.
00060
00061
00062 #define DNS_PORT 53
00063 #define DNS_MY_ID 2
00064
00066
00067
00068
00069 struct DnsHeader
00070 {
00071 uint16 Id;
00072
00073
00074 uint16 RecursionDesired:1;
00075 uint16 IsTruncated:1;
00076 uint16 IsAuthoritative:1;
00077 uint16 QueryType:4;
00078 uint16 IsResponse:1;
00079
00080
00081 uint16 ResponseCode:4;
00082 uint16 Reserved:3;
00083 uint16 RecursionAvailable:1;
00084
00085
00086 uint16 QueryCount;
00087
00088
00089 uint16 ResourceCount;
00090
00091
00092 uint16 NameServerCount;
00093
00094
00095 uint16 AdditionalCount;
00096 };
00097
00098 struct DnsMessage
00099 {
00100 uint16 Length;
00101 DnsHeader Header;
00102 uchar Data[4096];
00103
00104 uchar *ReadLabel(uchar *s, char *&Label);
00105 uchar *WriteLabel(uchar *s, char *Label);
00106 };
00107
00109
00110 char *IDnsResolve(char *Name, int Type = DNS_TYPE_A, int theclass = DNS_CLASS_IN);
00111
00112 #endif