00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef _DNSAnswers_H_
00037 #define _DNSAnswers_H_
00038
00039 #include "ErrorHandler.h"
00040
00041 #include "DNSAnswer.h"
00042
00043 #include <vector>
00044
00045 namespace KomodiaDNS
00046 {
00047
00048 class CDNSQuery;
00049
00050
00051 typedef struct _DnsHeaderHeader
00052 {
00053 unsigned short usID;
00054 unsigned short usOptions;
00055 unsigned short usQDCount;
00056 unsigned short usANCount;
00057 unsigned short usNSCount;
00058 unsigned short usARCount;
00059
00060
00061 _DnsHeaderHeader() : usID(0),
00062 usOptions(0),
00063 usQDCount(0),
00064 usANCount(0),
00065 usNSCount(0),
00066 usARCount(0)
00067 {
00068 }
00069 } DnsHeaderHeader;
00070
00071 typedef DnsHeaderHeader FAR * LPDnsHeaderHeader;
00072
00073 #define DnsHeaderHeaderLength sizeof(DnsHeaderHeader)
00074
00075
00076 #define DNS_QR_REQUEST 0 //Request DNS entry
00077 #define DNS_QR_REPLY (1 << 7) //DNS reply
00078
00079
00080 #define DNS_OPCODE_STANDARD 0
00081 #define DNS_OPCODE_INVERSE (1 << 3)
00082 #define DNS_OPCODE_STATUS (2 << 3)
00083
00084
00085
00086
00087 #define DNS_AA (1 << 2)
00088
00089
00090
00091
00092
00093 #define DNS_RECURSION 1
00094
00095
00096
00097
00098 #define DNS_RECURSION_AVAILABLE (1 << 8)
00099
00100
00101
00102
00103 #define DNS_RCODE_NOERROR 0
00104 #define DNS_RCODE_FORMAT (1 << 13)
00105 #define DNS_RCODE_SERVER (2 << 13)
00106 #define DNS_RCODE_NAME (3 << 13)
00107 #define DNS_RCODE_REFUSED (5 << 13)
00108
00109
00110 #define DNS_SERVER_FAILURE (3 << 8)
00111
00112 class CDNSAnswers : public CErrorHandler
00113 {
00114 public:
00115
00116 typedef std::vector<std::string> StringAnswersVector;
00117
00118
00119 typedef std::vector<unsigned long> IPAnswersVector;
00120 public:
00121
00122
00123
00124
00125 std::string GetAnswerParsed(BOOL bWindowsLines=TRUE,
00126 BOOL bBrief=TRUE,
00127 BOOL bExtraLine=FALSE)const;
00128
00129
00130 const CDNSQuery* GetQuery()const;
00131
00132
00133 BOOL IsResolved()const;
00134
00135
00136 BOOL IsReverseAnswer()const;
00137
00138
00139
00140 std::string GetAnswer()const;
00141
00142
00143 StringAnswersVector GetAnswers()const;
00144
00145
00146
00147 unsigned long GetAIPAnswer()const;
00148
00149
00150 IPAnswersVector GetAIPAnswers()const;
00151
00152
00153 unsigned short GetDNSID() const;
00154
00155
00156 unsigned long GetAddress(unsigned short usIndex=0)const;
00157
00158
00159 const CDNSAnswer& GetAnswer(unsigned short usIndex)const;
00160
00161
00162 int Parse(const char *pBuffer,
00163 int iLength);
00164
00165
00166 CDNSAnswers();
00167 CDNSAnswers(const CDNSAnswers& rAnswers);
00168 virtual ~CDNSAnswers();
00169 private:
00170
00171 typedef std::vector<CDNSAnswer> AnswersVector;
00172 private:
00173
00174 CDNSAnswers& operator=(const CDNSAnswers& rAnswers);
00175
00176
00177 unsigned short ParseAnswers(const char *pBuffer,
00178 const char* pOriginalBuffer);
00179
00180
00181 void ReverseHeader();
00182
00183
00184 void UnInitialize();
00185
00186
00187 DnsHeaderHeader m_aDNSHeader;
00188
00189
00190 CDNSQuery* m_pDNSQuery;
00191
00192
00193 AnswersVector m_aAnswers;
00194 };
00195
00196
00197 }
00198
00199 #endif