Main Page | Class Hierarchy | Class List | Directories | File List | Class Members | File Members | Related Pages

IDns.h

Go to the documentation of this file.
00001 
00002 
00003 #ifndef _IDNS_H_
00004 #define _IDNS_H_
00005 
00007 // Defines
00008 //
00009 // Taken from:
00010 // http://www.faqs.org/rfcs/rfc1035.html
00011 
00012 // 3.2.2. TYPE values
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 // 3.2.3. QTYPE values
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 // 3.2.4. CLASS values
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 // 3.2.5. QCLASS values
00043 #define DNS_QCLASS_ALL      255 // Any class
00044 
00045 // Query types
00046 #define DNS_Q_QUERY         0
00047 #define DNS_Q_IQUERY        1
00048 #define DNS_Q_STATUS        2
00049 
00050 // Response codes
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                                 // to a problem with the name server.
00055 #define DNS_R_NAME_ERROR    3   // Meaningful only for responses from an authoritative name
00056                                 // server, this code signifies that the
00057                                 // domain name referenced in the query does not exist.
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 // General
00062 #define DNS_PORT            53
00063 #define DNS_MY_ID           2
00064 
00066 // Data Structures
00067 
00068 // Header, sizeof = 12 bytes
00069 struct DnsHeader
00070 {
00071     uint16 Id;
00072     
00073     // Byte of flags
00074     uint16 RecursionDesired:1;
00075     uint16 IsTruncated:1;
00076     uint16 IsAuthoritative:1;
00077     uint16 QueryType:4;         // One of DNS_Q_???
00078     uint16 IsResponse:1;
00079 
00080     // Byte of flags
00081     uint16 ResponseCode:4;      // One of DNS_R_???
00082     uint16 Reserved:3;
00083     uint16 RecursionAvailable:1;
00084     
00085     // Number of querys
00086     uint16 QueryCount;
00087 
00088     // Number of resources
00089     uint16 ResourceCount;
00090 
00091     // Number of name servers
00092     uint16 NameServerCount;
00093 
00094     // Number of additionals
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 // Functions
00110 char *IDnsResolve(char *Name, int Type = DNS_TYPE_A, int theclass = DNS_CLASS_IN);
00111 
00112 #endif

Generated on Wed Oct 26 14:46:50 2005 for Lgi by  doxygen 1.4.1