📄 pdns_8h-source.html
字号:
00163 DNS_A_DATA A;00164 DNS_MX_DATA MX;00165 DNS_PTR_DATA NS;00166 DNS_SRV_DATA SRV;00167 DNS_NULL_DATA Null;00168 } Data;00169 };00170 00171 <span class="keyword">typedef</span> DnsRecord * PDNS_RECORD;00172 00173 <span class="keyword">extern</span> <span class="keywordtype">void</span> DnsRecordListFree(PDNS_RECORD rec, <span class="keywordtype">int</span> FreeType);00174 00175 <span class="keyword">extern</span> DNS_STATUS DnsQuery_A(<span class="keyword">const</span> <span class="keywordtype">char</span> * service,00176 WORD requestType,00177 DWORD options,00178 <span class="keywordtype">void</span> *,00179 PDNS_RECORD * results,00180 <span class="keywordtype">void</span> *);00181 00182 00183 <span class="preprocessor">#endif // P_HAS_RESOLVER</span>00184 <span class="preprocessor"></span>00185 <span class="keyword">namespace </span>PDNS {00186 00188 <span class="comment">//</span>00189 <span class="comment">// this template automates the creation of a list of records for</span>00190 <span class="comment">// a specific type of DNS lookup</span>00191 <span class="comment">//</span>00192 00193 <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> type, <span class="keyword">class</span> RecordListType, <span class="keyword">class</span> RecordType>00194 BOOL Lookup(<span class="keyword">const</span> <a class="code" href="classPString.html">PString</a> & name, RecordListType & recordList)00195 {00196 <span class="keywordflow">if</span> (name.<a class="code" href="classPString.html#z235_1">IsEmpty</a>())00197 <span class="keywordflow">return</span> FALSE;00198 00199 recordList.RemoveAll();00200 00201 PDNS_RECORD results = NULL;00202 DNS_STATUS status = DnsQuery_A((<span class="keyword">const</span> <span class="keywordtype">char</span> *)name, 00203 type,00204 DNS_QUERY_STANDARD, 00205 NULL, 00206 &results, 00207 NULL);00208 <span class="keywordflow">if</span> (status != 0)00209 <span class="keywordflow">return</span> FALSE;00210 00211 <span class="comment">// find records matching the correct type</span>00212 PDNS_RECORD dnsRecord = results;00213 <span class="keywordflow">while</span> (dnsRecord != NULL) {00214 RecordType * record = recordList.HandleDNSRecord(dnsRecord, results);00215 <span class="keywordflow">if</span> (record != NULL)00216 recordList.Append(record);00217 dnsRecord = dnsRecord->pNext;00218 }00219 00220 <span class="keywordflow">if</span> (results != NULL)00221 DnsRecordListFree(results, DnsFreeRecordList);00222 00223 <span class="keywordflow">return</span> recordList.GetSize() != 0;00224 }00225 00227 00228 <span class="keyword">class </span>SRVRecord : <span class="keyword">public</span> <a class="code" href="classPObject.html">PObject</a>00229 {00230 <a class="code" href="object_8h.html#a27">PCLASSINFO</a>(SRVRecord, <a class="code" href="classPObject.html">PObject</a>);00231 <span class="keyword">public</span>:00232 SRVRecord()00233 { used = FALSE; }00234 00235 Comparison Compare(<span class="keyword">const</span> <a class="code" href="classPObject.html">PObject</a> & obj) <span class="keyword">const</span>;00236 <span class="keywordtype">void</span> <a class="code" href="array_8h.html#a9">PrintOn</a>(ostream & strm) <span class="keyword">const</span>;00237 00238 <a class="code" href="classPString.html">PString</a> hostName;00239 <a class="code" href="classPIPSocket_1_1Address.html">PIPSocket::Address</a> hostAddress;00240 BOOL used;00241 WORD port;00242 WORD priority;00243 WORD weight;00244 };00245 00246 <a class="code" href="lists_8h.html#a7">PDECLARE_SORTED_LIST</a>(SRVRecordList, PDNS::SRVRecord)00247 <span class="keyword">public</span>:00248 <span class="keywordtype">void</span> <a class="code" href="array_8h.html#a9">PrintOn</a>(ostream & strm) <span class="keyword">const</span>;00249 00250 SRVRecord * GetFirst();00251 SRVRecord * GetNext();00252 00253 PDNS::SRVRecord * HandleDNSRecord(PDNS_RECORD dnsRecord, PDNS_RECORD results);00254 00255 <span class="keyword">protected</span>:00256 PINDEX priPos;00257 <a class="code" href="classPWORDArray.html">PWORDArray</a> priList;00258 };00259 00264 <span class="keyword">inline</span> BOOL GetRecords(<span class="keyword">const</span> <a class="code" href="classPString.html">PString</a> & service, SRVRecordList & serviceList)00265 { <span class="keywordflow">return</span> Lookup<DNS_TYPE_SRV, SRVRecordList, SRVRecord>(service, serviceList); }00266 00270 <span class="keyword">inline</span> BOOL GetSRVRecords(00271 <span class="keyword">const</span> <a class="code" href="classPString.html">PString</a> & service,00272 SRVRecordList & serviceList00273 )00274 { <span class="keywordflow">return</span> GetRecords(service, serviceList); }00275 00280 BOOL GetSRVRecords(00281 <span class="keyword">const</span> <a class="code" href="classPString.html">PString</a> & service,00282 <span class="keyword">const</span> <a class="code" href="classPString.html">PString</a> & type,00283 <span class="keyword">const</span> <a class="code" href="classPString.html">PString</a> & domain,00284 SRVRecordList & serviceList00285 );00286 00288 00289 <span class="keyword">class </span>MXRecord : <span class="keyword">public</span> <a class="code" href="classPObject.html">PObject</a>00290 {00291 <a class="code" href="object_8h.html#a27">PCLASSINFO</a>(MXRecord, <a class="code" href="classPObject.html">PObject</a>);00292 <span class="keyword">public</span>:00293 MXRecord()00294 { used = FALSE; }00295 Comparison <a class="code" href="classPObject.html#z199_1">Compare</a>(<span class="keyword">const</span> <a class="code" href="classPObject.html">PObject</a> & obj) <span class="keyword">const</span>;00296 <span class="keywordtype">void</span> <a class="code" href="classPObject.html#z201_0">PrintOn</a>(ostream & strm) <span class="keyword">const</span>;00297 00298 <a class="code" href="classPString.html">PString</a> hostName;00299 <a class="code" href="classPIPSocket_1_1Address.html">PIPSocket::Address</a> hostAddress;00300 BOOL used;00301 WORD preference;00302 };00303 00304 <a class="code" href="lists_8h.html#a7">PDECLARE_SORTED_LIST</a>(MXRecordList, PDNS::MXRecord)00305 <span class="keyword">public</span>:00306 <span class="keywordtype">void</span> <a class="code" href="array_8h.html#a9">PrintOn</a>(ostream & strm) <span class="keyword">const</span>;00307 00308 MXRecord * GetFirst();00309 MXRecord * GetNext();00310 00311 PDNS::MXRecord * HandleDNSRecord(PDNS_RECORD dnsRecord, PDNS_RECORD results);00312 00313 <span class="keyword">protected</span>:00314 PINDEX lastIndex;00315 };00316 00320 <span class="keyword">inline</span> BOOL GetRecords(00321 <span class="keyword">const</span> <a class="code" href="classPString.html">PString</a> & domain,00322 MXRecordList & serviceList00323 )00324 { <span class="keywordflow">return</span> Lookup<DNS_TYPE_MX, MXRecordList, MXRecord>(domain, serviceList); }00325 00329 <span class="keyword">inline</span> BOOL GetMXRecords(00330 <span class="keyword">const</span> <a class="code" href="classPString.html">PString</a> & domain,00331 MXRecordList & serviceList00332 )00333 {00334 <span class="keywordflow">return</span> GetRecords(domain, serviceList);00335 }00336 00338 00339 }; <span class="comment">// namespace PDNS</span>00340 00341 <span class="preprocessor">#endif // _PDNS_H</span>00342 <span class="preprocessor"></span><span class="preprocessor">#endif // P_DNS</span>00343 <span class="preprocessor"></span>00344 <span class="comment">// End Of File ///////////////////////////////////////////////////////////////</span></pre></div><hr><address style="align: right;"><small>Generated on Wed Sep 29 22:44:11 2004 for PWLib by<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border=0 width=110 height=53></a>1.2.18 </small></address></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -