523 lines
32 KiB
HTML
523 lines
32 KiB
HTML
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source to the Rust file `/Users/sambuc/.cargo/registry/src/github.com-1ecc6299db9ec823/trust-dns-resolver-0.11.1/src/lib.rs`."><meta name="keywords" content="rust, rustlang, rust-lang"><title>lib.rs.html -- source</title><link rel="stylesheet" type="text/css" href="../../normalize.css"><link rel="stylesheet" type="text/css" href="../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../../dark.css"><link rel="stylesheet" type="text/css" href="../../light.css" id="themeStyle"><script src="../../storage.js"></script><noscript><link rel="stylesheet" href="../../noscript.css"></noscript><link rel="shortcut icon" href="../../favicon.ico"><style type="text/css">#crate-search{background-image:url("../../down-arrow.svg");}</style></head><body class="rustdoc source"><!--[if lte IE 8]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu">☰</div><a href='../../trust_dns_resolver/index.html'><div class='logo-container'><img src='../../rust-logo.png' alt='logo'></div></a></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!"><img src="../../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices"></div></div><script src="../../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"></div><a id="settings-menu" href="../../settings.html"><img src="../../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><pre class="line-numbers"><span id="1"> 1</span>
|
||
<span id="2"> 2</span>
|
||
<span id="3"> 3</span>
|
||
<span id="4"> 4</span>
|
||
<span id="5"> 5</span>
|
||
<span id="6"> 6</span>
|
||
<span id="7"> 7</span>
|
||
<span id="8"> 8</span>
|
||
<span id="9"> 9</span>
|
||
<span id="10"> 10</span>
|
||
<span id="11"> 11</span>
|
||
<span id="12"> 12</span>
|
||
<span id="13"> 13</span>
|
||
<span id="14"> 14</span>
|
||
<span id="15"> 15</span>
|
||
<span id="16"> 16</span>
|
||
<span id="17"> 17</span>
|
||
<span id="18"> 18</span>
|
||
<span id="19"> 19</span>
|
||
<span id="20"> 20</span>
|
||
<span id="21"> 21</span>
|
||
<span id="22"> 22</span>
|
||
<span id="23"> 23</span>
|
||
<span id="24"> 24</span>
|
||
<span id="25"> 25</span>
|
||
<span id="26"> 26</span>
|
||
<span id="27"> 27</span>
|
||
<span id="28"> 28</span>
|
||
<span id="29"> 29</span>
|
||
<span id="30"> 30</span>
|
||
<span id="31"> 31</span>
|
||
<span id="32"> 32</span>
|
||
<span id="33"> 33</span>
|
||
<span id="34"> 34</span>
|
||
<span id="35"> 35</span>
|
||
<span id="36"> 36</span>
|
||
<span id="37"> 37</span>
|
||
<span id="38"> 38</span>
|
||
<span id="39"> 39</span>
|
||
<span id="40"> 40</span>
|
||
<span id="41"> 41</span>
|
||
<span id="42"> 42</span>
|
||
<span id="43"> 43</span>
|
||
<span id="44"> 44</span>
|
||
<span id="45"> 45</span>
|
||
<span id="46"> 46</span>
|
||
<span id="47"> 47</span>
|
||
<span id="48"> 48</span>
|
||
<span id="49"> 49</span>
|
||
<span id="50"> 50</span>
|
||
<span id="51"> 51</span>
|
||
<span id="52"> 52</span>
|
||
<span id="53"> 53</span>
|
||
<span id="54"> 54</span>
|
||
<span id="55"> 55</span>
|
||
<span id="56"> 56</span>
|
||
<span id="57"> 57</span>
|
||
<span id="58"> 58</span>
|
||
<span id="59"> 59</span>
|
||
<span id="60"> 60</span>
|
||
<span id="61"> 61</span>
|
||
<span id="62"> 62</span>
|
||
<span id="63"> 63</span>
|
||
<span id="64"> 64</span>
|
||
<span id="65"> 65</span>
|
||
<span id="66"> 66</span>
|
||
<span id="67"> 67</span>
|
||
<span id="68"> 68</span>
|
||
<span id="69"> 69</span>
|
||
<span id="70"> 70</span>
|
||
<span id="71"> 71</span>
|
||
<span id="72"> 72</span>
|
||
<span id="73"> 73</span>
|
||
<span id="74"> 74</span>
|
||
<span id="75"> 75</span>
|
||
<span id="76"> 76</span>
|
||
<span id="77"> 77</span>
|
||
<span id="78"> 78</span>
|
||
<span id="79"> 79</span>
|
||
<span id="80"> 80</span>
|
||
<span id="81"> 81</span>
|
||
<span id="82"> 82</span>
|
||
<span id="83"> 83</span>
|
||
<span id="84"> 84</span>
|
||
<span id="85"> 85</span>
|
||
<span id="86"> 86</span>
|
||
<span id="87"> 87</span>
|
||
<span id="88"> 88</span>
|
||
<span id="89"> 89</span>
|
||
<span id="90"> 90</span>
|
||
<span id="91"> 91</span>
|
||
<span id="92"> 92</span>
|
||
<span id="93"> 93</span>
|
||
<span id="94"> 94</span>
|
||
<span id="95"> 95</span>
|
||
<span id="96"> 96</span>
|
||
<span id="97"> 97</span>
|
||
<span id="98"> 98</span>
|
||
<span id="99"> 99</span>
|
||
<span id="100">100</span>
|
||
<span id="101">101</span>
|
||
<span id="102">102</span>
|
||
<span id="103">103</span>
|
||
<span id="104">104</span>
|
||
<span id="105">105</span>
|
||
<span id="106">106</span>
|
||
<span id="107">107</span>
|
||
<span id="108">108</span>
|
||
<span id="109">109</span>
|
||
<span id="110">110</span>
|
||
<span id="111">111</span>
|
||
<span id="112">112</span>
|
||
<span id="113">113</span>
|
||
<span id="114">114</span>
|
||
<span id="115">115</span>
|
||
<span id="116">116</span>
|
||
<span id="117">117</span>
|
||
<span id="118">118</span>
|
||
<span id="119">119</span>
|
||
<span id="120">120</span>
|
||
<span id="121">121</span>
|
||
<span id="122">122</span>
|
||
<span id="123">123</span>
|
||
<span id="124">124</span>
|
||
<span id="125">125</span>
|
||
<span id="126">126</span>
|
||
<span id="127">127</span>
|
||
<span id="128">128</span>
|
||
<span id="129">129</span>
|
||
<span id="130">130</span>
|
||
<span id="131">131</span>
|
||
<span id="132">132</span>
|
||
<span id="133">133</span>
|
||
<span id="134">134</span>
|
||
<span id="135">135</span>
|
||
<span id="136">136</span>
|
||
<span id="137">137</span>
|
||
<span id="138">138</span>
|
||
<span id="139">139</span>
|
||
<span id="140">140</span>
|
||
<span id="141">141</span>
|
||
<span id="142">142</span>
|
||
<span id="143">143</span>
|
||
<span id="144">144</span>
|
||
<span id="145">145</span>
|
||
<span id="146">146</span>
|
||
<span id="147">147</span>
|
||
<span id="148">148</span>
|
||
<span id="149">149</span>
|
||
<span id="150">150</span>
|
||
<span id="151">151</span>
|
||
<span id="152">152</span>
|
||
<span id="153">153</span>
|
||
<span id="154">154</span>
|
||
<span id="155">155</span>
|
||
<span id="156">156</span>
|
||
<span id="157">157</span>
|
||
<span id="158">158</span>
|
||
<span id="159">159</span>
|
||
<span id="160">160</span>
|
||
<span id="161">161</span>
|
||
<span id="162">162</span>
|
||
<span id="163">163</span>
|
||
<span id="164">164</span>
|
||
<span id="165">165</span>
|
||
<span id="166">166</span>
|
||
<span id="167">167</span>
|
||
<span id="168">168</span>
|
||
<span id="169">169</span>
|
||
<span id="170">170</span>
|
||
<span id="171">171</span>
|
||
<span id="172">172</span>
|
||
<span id="173">173</span>
|
||
<span id="174">174</span>
|
||
<span id="175">175</span>
|
||
<span id="176">176</span>
|
||
<span id="177">177</span>
|
||
<span id="178">178</span>
|
||
<span id="179">179</span>
|
||
<span id="180">180</span>
|
||
<span id="181">181</span>
|
||
<span id="182">182</span>
|
||
<span id="183">183</span>
|
||
<span id="184">184</span>
|
||
<span id="185">185</span>
|
||
<span id="186">186</span>
|
||
<span id="187">187</span>
|
||
<span id="188">188</span>
|
||
<span id="189">189</span>
|
||
<span id="190">190</span>
|
||
<span id="191">191</span>
|
||
<span id="192">192</span>
|
||
<span id="193">193</span>
|
||
<span id="194">194</span>
|
||
<span id="195">195</span>
|
||
<span id="196">196</span>
|
||
<span id="197">197</span>
|
||
<span id="198">198</span>
|
||
<span id="199">199</span>
|
||
<span id="200">200</span>
|
||
<span id="201">201</span>
|
||
<span id="202">202</span>
|
||
<span id="203">203</span>
|
||
<span id="204">204</span>
|
||
<span id="205">205</span>
|
||
<span id="206">206</span>
|
||
<span id="207">207</span>
|
||
<span id="208">208</span>
|
||
<span id="209">209</span>
|
||
<span id="210">210</span>
|
||
<span id="211">211</span>
|
||
<span id="212">212</span>
|
||
<span id="213">213</span>
|
||
<span id="214">214</span>
|
||
<span id="215">215</span>
|
||
<span id="216">216</span>
|
||
<span id="217">217</span>
|
||
<span id="218">218</span>
|
||
<span id="219">219</span>
|
||
<span id="220">220</span>
|
||
<span id="221">221</span>
|
||
<span id="222">222</span>
|
||
<span id="223">223</span>
|
||
<span id="224">224</span>
|
||
<span id="225">225</span>
|
||
<span id="226">226</span>
|
||
<span id="227">227</span>
|
||
<span id="228">228</span>
|
||
<span id="229">229</span>
|
||
<span id="230">230</span>
|
||
<span id="231">231</span>
|
||
<span id="232">232</span>
|
||
<span id="233">233</span>
|
||
<span id="234">234</span>
|
||
<span id="235">235</span>
|
||
<span id="236">236</span>
|
||
<span id="237">237</span>
|
||
<span id="238">238</span>
|
||
<span id="239">239</span>
|
||
<span id="240">240</span>
|
||
<span id="241">241</span>
|
||
<span id="242">242</span>
|
||
<span id="243">243</span>
|
||
<span id="244">244</span>
|
||
<span id="245">245</span>
|
||
<span id="246">246</span>
|
||
<span id="247">247</span>
|
||
<span id="248">248</span>
|
||
<span id="249">249</span>
|
||
<span id="250">250</span>
|
||
<span id="251">251</span>
|
||
<span id="252">252</span>
|
||
<span id="253">253</span>
|
||
<span id="254">254</span>
|
||
<span id="255">255</span>
|
||
<span id="256">256</span>
|
||
<span id="257">257</span>
|
||
<span id="258">258</span>
|
||
<span id="259">259</span>
|
||
<span id="260">260</span>
|
||
</pre><div class="example-wrap"><pre class="rust ">
|
||
<span class="comment">// Copyright 2015-2017 Benjamin Fry <benjaminfry@me.com></span>
|
||
<span class="comment">//</span>
|
||
<span class="comment">// Licensed under the Apache License, Version 2.0, <LICENSE-APACHE or</span>
|
||
<span class="comment">// http://apache.org/licenses/LICENSE-2.0> or the MIT license <LICENSE-MIT or</span>
|
||
<span class="comment">// http://opensource.org/licenses/MIT>, at your option. This file may not be</span>
|
||
<span class="comment">// copied, modified, or distributed except according to those terms.</span>
|
||
|
||
<span class="doccomment">//! The Resolver is responsible for performing recursive queries to lookup domain names.</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! This is a 100% in process DNS resolver. It *does not* use the Host OS' resolver. If what is desired is to use the Host OS' resolver, generally in the system's libc, then the `std::net::ToSocketAddrs` variant over `&str` should be used.</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! Unlike the `trust-dns` client, this tries to provide a simpler interface to perform DNS queries. For update options, i.e. Dynamic DNS, the `trust-dns` crate must be used instead. The Resolver library is capable of searching multiple domains (this can be disabled by using an FQDN during lookup), dual-stack IPv4/IPv6 lookups, performing chained CNAME lookups, and features connection metric tracking for attempting to pick the best upstream DNS resolver.</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! There are two types for performing DNS queries, `Resolver` and `ResolverFuture`. `Resolver` is the easiest to work with, it is a wrapper around `ResolverFuture`. `ResolverFuture` is a `Tokio` based async resolver, and can be used inside any `Tokio` based system.</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! This as best as possible attempts to abide by the the DNS RFCs, please file issues at https://github.com/bluejekyll/trust-dns .</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! # Usage</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! ## Declare dependency</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! ```toml</span>
|
||
<span class="doccomment">//! [dependency]</span>
|
||
<span class="doccomment">//! trust-dns-resolver = "^0.9"</span>
|
||
<span class="doccomment">//! ```</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! ## Extern the crate for usage in the library</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! ```rust</span>
|
||
<span class="doccomment">//! extern crate trust_dns_resolver;</span>
|
||
<span class="doccomment">//! ```</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! ## Using the Synchronous Resolver</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! This uses the default configuration, which sets the [Google Public DNS](https://developers.google.com/speed/public-dns/) as the upstream resolvers. Please see their [privacy statement](https://developers.google.com/speed/public-dns/privacy) for important information about what they track, many ISP's track similar information in DNS.</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! ```rust</span>
|
||
<span class="doccomment">//! # extern crate trust_dns_resolver;</span>
|
||
<span class="doccomment">//! # fn main() {</span>
|
||
<span class="doccomment">//! # #[cfg(feature = "tokio")]</span>
|
||
<span class="doccomment">//! # {</span>
|
||
<span class="doccomment">//! use std::net::*;</span>
|
||
<span class="doccomment">//! use trust_dns_resolver::Resolver;</span>
|
||
<span class="doccomment">//! use trust_dns_resolver::config::*;</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! // Construct a new Resolver with default configuration options</span>
|
||
<span class="doccomment">//! let resolver = Resolver::new(ResolverConfig::default(), ResolverOpts::default()).unwrap();</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! // Lookup the IP addresses associated with a name.</span>
|
||
<span class="doccomment">//! // The final dot forces this to be an FQDN, otherwise the search rules as specified</span>
|
||
<span class="doccomment">//! // in `ResolverOpts` will take effect. FQDN's are generally cheaper queries.</span>
|
||
<span class="doccomment">//! let response = resolver.lookup_ip("www.example.com.").unwrap();</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! // There can be many addresses associated with the name,</span>
|
||
<span class="doccomment">//! // this can return IPv4 and/or IPv6 addresses</span>
|
||
<span class="doccomment">//! let address = response.iter().next().expect("no addresses returned!");</span>
|
||
<span class="doccomment">//! if address.is_ipv4() {</span>
|
||
<span class="doccomment">//! assert_eq!(address, IpAddr::V4(Ipv4Addr::new(93, 184, 216, 34)));</span>
|
||
<span class="doccomment">//! } else {</span>
|
||
<span class="doccomment">//! assert_eq!(address, IpAddr::V6(Ipv6Addr::new(0x2606, 0x2800, 0x220, 0x1, 0x248, 0x1893, 0x25c8, 0x1946)));</span>
|
||
<span class="doccomment">//! }</span>
|
||
<span class="doccomment">//! # }</span>
|
||
<span class="doccomment">//! # }</span>
|
||
<span class="doccomment">//! ```</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! ## Using the host system config</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! On Unix systems, the `/etc/resolv.conf` can be used for configuration. Not all options specified in the host systems `resolv.conf` are applicable or compatible with this software. In addition there may be additional options supported which the host system does not. Example:</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! ```rust,no_run</span>
|
||
<span class="doccomment">//! # extern crate trust_dns_resolver;</span>
|
||
<span class="doccomment">//! # fn main() {</span>
|
||
<span class="doccomment">//! # #[cfg(feature = "tokio")]</span>
|
||
<span class="doccomment">//! # {</span>
|
||
<span class="doccomment">//! # use std::net::*;</span>
|
||
<span class="doccomment">//! # use trust_dns_resolver::Resolver;</span>
|
||
<span class="doccomment">//! // Use the host OS'es `/etc/resolv.conf`</span>
|
||
<span class="doccomment">//! # #[cfg(unix)]</span>
|
||
<span class="doccomment">//! let resolver = Resolver::from_system_conf().unwrap();</span>
|
||
<span class="doccomment">//! # #[cfg(unix)]</span>
|
||
<span class="doccomment">//! let response = resolver.lookup_ip("www.example.com.").unwrap();</span>
|
||
<span class="doccomment">//! # }</span>
|
||
<span class="doccomment">//! # }</span>
|
||
<span class="doccomment">//! ```</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! ## Using the Tokio/Async Resolver</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! For more advanced asynchronous usage, the ResolverFuture is integrated with Tokio. In fact, the ResolverFuture is used by the synchronous Resolver for all lookups.</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! ```rust</span>
|
||
<span class="doccomment">//! # extern crate futures;</span>
|
||
<span class="doccomment">//! # extern crate tokio;</span>
|
||
<span class="doccomment">//! # extern crate trust_dns_resolver;</span>
|
||
<span class="doccomment">//! # fn main() {</span>
|
||
<span class="doccomment">//! use std::net::*;</span>
|
||
<span class="doccomment">//! use tokio::runtime::current_thread::Runtime;</span>
|
||
<span class="doccomment">//! use trust_dns_resolver::AsyncResolver;</span>
|
||
<span class="doccomment">//! use trust_dns_resolver::config::*;</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! // We need a Tokio Runtime to run the resolver</span>
|
||
<span class="doccomment">//! // this is responsible for running all Future tasks and registering interest in IO channels</span>
|
||
<span class="doccomment">//! let mut io_loop = Runtime::new().unwrap();</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! // Construct a new Resolver with default configuration options</span>
|
||
<span class="doccomment">//! let (resolver, background) = AsyncResolver::new(</span>
|
||
<span class="doccomment">//! ResolverConfig::default(),</span>
|
||
<span class="doccomment">//! ResolverOpts::default()</span>
|
||
<span class="doccomment">//! );</span>
|
||
<span class="doccomment">//! // AsyncResolver::new returns a handle for sending resolve requests and a background task</span>
|
||
<span class="doccomment">//! // that must be spawned on an executor.</span>
|
||
<span class="doccomment">//! io_loop.spawn(background);</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! // Lookup the IP addresses associated with a name.</span>
|
||
<span class="doccomment">//! // This returns a future that will lookup the IP addresses, it must be run in the Core to</span>
|
||
<span class="doccomment">//! // to get the actual result.</span>
|
||
<span class="doccomment">//! let lookup_future = resolver.lookup_ip("www.example.com.");</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! // Run the lookup until it resolves or errors</span>
|
||
<span class="doccomment">//! let mut response = io_loop.block_on(lookup_future).unwrap();</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! // There can be many addresses associated with the name,</span>
|
||
<span class="doccomment">//! // this can return IPv4 and/or IPv6 addresses</span>
|
||
<span class="doccomment">//! let address = response.iter().next().expect("no addresses returned!");</span>
|
||
<span class="doccomment">//! if address.is_ipv4() {</span>
|
||
<span class="doccomment">//! assert_eq!(address, IpAddr::V4(Ipv4Addr::new(93, 184, 216, 34)));</span>
|
||
<span class="doccomment">//! } else {</span>
|
||
<span class="doccomment">//! assert_eq!(address, IpAddr::V6(Ipv6Addr::new(0x2606, 0x2800, 0x220, 0x1, 0x248, 0x1893, 0x25c8, 0x1946)));</span>
|
||
<span class="doccomment">//! }</span>
|
||
<span class="doccomment">//! # }</span>
|
||
<span class="doccomment">//! ```</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! Generally after a lookup in an asynchornous context, there would probably be a connection made to a server, for example:</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! ```c</span>
|
||
<span class="doccomment">//! let result = io_loop.block_on(lookup_future.and_then(|ips| {</span>
|
||
<span class="doccomment">//! let ip = ips.next().unwrap();</span>
|
||
<span class="doccomment">//! TcpStream::connect()</span>
|
||
<span class="doccomment">//! }).and_then(|conn| /* do something with the connection... */)</span>
|
||
<span class="doccomment">//! ).unwrap();</span>
|
||
<span class="doccomment">//! ```</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! It's beyond the scope of these examples to show how to deal with connection failures and looping etc. But if you wanted to say try a different address from the result set after a connection failure, it will be necessary to create a type that implements the `Future` trait. Inside the `Future::poll` method would be the place to implement a loop over the different IP addresses.</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! ## DNS-over-TLS</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! DNS over TLS is experimental in the Trust-DNS Resolver library. The underlying implementations have been available as addon libraries to the Client and Server, but the configuration is experimental in Trust-DNS Resolver. *WARNING* The trust-dns developers make no claims on the security and/or privacy guarantees of this implementation.</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! To use you must compile in support with one of the `dns-over-tls` features. There are three: `dns-over-openssl`, `dns-over-native-tls`, and `dns-over-rustls`. The reason for each is to make the Trust-DNS libraries flexible for different deployments, and/or security concerns. The easiest to use will generally be `dns-over-rustls` which utilizes the native Rust library (a rework of the `boringssl` project), this should compile and be usable on most ARM and x86 platforms. `dns-over-native-tls` will utilize the hosts TLS implementation where available or fallback to `openssl` where not. `dns-over-openssl` will specify that `openssl` should be used (which is a perfect fine option if required). If more than one is specified, the presidence will be in this order (i.e. only one can be used at a time) `dns-over-rustls`, `dns-over-native-tls`, and then `dns-over-openssl`. *NOTICE* thetrust-dns developers are not responsible for any choice of library that does not meet required security requirements.</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! ### Example</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! Enable the TLS library through the dependency on `trust-dns-resolver`:</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! ```toml</span>
|
||
<span class="doccomment">//! trust-dns-resolver = { version = "*", features = ["dns-over-rustls"] }</span>
|
||
<span class="doccomment">//! ```</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! A default TLS configuration is available for Cloudflare's `1.1.1.1` DNS service (Quad9 as well):</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! ```rust,no_run</span>
|
||
<span class="doccomment">//! # extern crate trust_dns_resolver;</span>
|
||
<span class="doccomment">//! # fn main() {</span>
|
||
<span class="doccomment">//! # #[cfg(feature = "tokio")]</span>
|
||
<span class="doccomment">//! # {</span>
|
||
<span class="doccomment">//! use trust_dns_resolver::Resolver;</span>
|
||
<span class="doccomment">//! use trust_dns_resolver::config::*;</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! // Construct a new Resolver with default configuration options</span>
|
||
<span class="doccomment">//! # #[cfg(feature = "dns-over-tls")]</span>
|
||
<span class="doccomment">//! let mut resolver = Resolver::new(ResolverConfig::cloudflare_tls(), ResolverOpts::default()).unwrap();</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! // see example above...</span>
|
||
<span class="doccomment">//! # }</span>
|
||
<span class="doccomment">//! # }</span>
|
||
<span class="doccomment">//! ```</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! ## mDNS (multicast DNS)</span>
|
||
<span class="doccomment">//!</span>
|
||
<span class="doccomment">//! Multicast DNS is an experimental feature in Trust-DNS at the moment. It's support on different platforms is not yet ideal. Initial support is only for IPv4 mDNS, as there are some complexities to figure out with IPv6. Once enabled, an mDNS `NameServer` will automatically be added to the `Resolver` and used for any lookups performed in the `.local.` zone.</span>
|
||
|
||
<span class="attribute">#![<span class="ident">warn</span>(<span class="ident">missing_docs</span>)]</span>
|
||
<span class="attribute">#![<span class="ident">recursion_limit</span> <span class="op">=</span> <span class="string">"128"</span>]</span>
|
||
|
||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">feature</span> <span class="op">=</span> <span class="string">"dns-over-tls"</span>)]</span>
|
||
<span class="attribute">#[<span class="ident">macro_use</span>]</span>
|
||
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">cfg_if</span>;
|
||
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">failure</span>;
|
||
<span class="attribute">#[<span class="ident">macro_use</span>]</span>
|
||
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">futures</span>;
|
||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">target_os</span> <span class="op">=</span> <span class="string">"windows"</span>)]</span>
|
||
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">ipconfig</span>;
|
||
<span class="attribute">#[<span class="ident">macro_use</span>]</span>
|
||
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">lazy_static</span>;
|
||
<span class="attribute">#[<span class="ident">macro_use</span>]</span>
|
||
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">log</span>;
|
||
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">lru_cache</span>;
|
||
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">resolv_conf</span>;
|
||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">feature</span> <span class="op">=</span> <span class="string">"serde-config"</span>)]</span>
|
||
<span class="attribute">#[<span class="ident">macro_use</span>]</span>
|
||
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">serde</span>;
|
||
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">smallvec</span>;
|
||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">any</span>(<span class="ident">feature</span> <span class="op">=</span> <span class="string">"tokio"</span>, <span class="ident">test</span>))]</span>
|
||
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">tokio</span>;
|
||
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">tokio_executor</span>;
|
||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">feature</span> <span class="op">=</span> <span class="string">"dns-over-https"</span>)]</span>
|
||
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">trust_dns_https</span>;
|
||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">feature</span> <span class="op">=</span> <span class="string">"dns-over-native-tls"</span>)]</span>
|
||
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">trust_dns_native_tls</span>;
|
||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">feature</span> <span class="op">=</span> <span class="string">"dns-over-openssl"</span>)]</span>
|
||
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">trust_dns_openssl</span>;
|
||
<span class="kw">pub</span> <span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">trust_dns_proto</span> <span class="kw">as</span> <span class="ident">proto</span>;
|
||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">feature</span> <span class="op">=</span> <span class="string">"dns-over-rustls"</span>)]</span>
|
||
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">trust_dns_rustls</span>;
|
||
|
||
<span class="kw">mod</span> <span class="ident">async_resolver</span>;
|
||
<span class="kw">pub</span> <span class="kw">mod</span> <span class="ident">config</span>;
|
||
<span class="kw">mod</span> <span class="ident">dns_lru</span>;
|
||
<span class="kw">pub</span> <span class="kw">mod</span> <span class="ident">dns_sd</span>;
|
||
<span class="kw">pub</span> <span class="kw">mod</span> <span class="ident">error</span>;
|
||
<span class="kw">mod</span> <span class="ident">hosts</span>;
|
||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">feature</span> <span class="op">=</span> <span class="string">"dns-over-https"</span>)]</span>
|
||
<span class="kw">mod</span> <span class="ident">https</span>;
|
||
<span class="kw">pub</span> <span class="kw">mod</span> <span class="ident">lookup</span>;
|
||
<span class="kw">pub</span> <span class="kw">mod</span> <span class="ident">lookup_ip</span>;
|
||
<span class="kw">pub</span> <span class="kw">mod</span> <span class="ident">lookup_state</span>;
|
||
<span class="attribute">#[<span class="ident">doc</span>(<span class="ident">hidden</span>)]</span>
|
||
<span class="kw">pub</span> <span class="kw">mod</span> <span class="ident">name_server</span>;
|
||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">any</span>(<span class="ident">feature</span> <span class="op">=</span> <span class="string">"tokio"</span>, <span class="ident">test</span>))]</span>
|
||
<span class="kw">mod</span> <span class="ident">resolver</span>;
|
||
<span class="kw">pub</span> <span class="kw">mod</span> <span class="ident">system_conf</span>;
|
||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">feature</span> <span class="op">=</span> <span class="string">"dns-over-tls"</span>)]</span>
|
||
<span class="kw">mod</span> <span class="ident">tls</span>;
|
||
|
||
<span class="comment">// reexports from proto</span>
|
||
<span class="kw">pub</span> <span class="kw">use</span> <span class="self">self</span>::<span class="ident">proto</span>::<span class="ident">rr</span>::{<span class="ident">IntoName</span>, <span class="ident">Name</span>, <span class="ident">TryParseIp</span>};
|
||
|
||
<span class="kw">pub</span> <span class="kw">use</span> <span class="ident">async_resolver</span>::{<span class="ident">AsyncResolver</span>, <span class="ident">Background</span>, <span class="ident">BackgroundLookup</span>, <span class="ident">BackgroundLookupIp</span>};
|
||
<span class="kw">pub</span> <span class="kw">use</span> <span class="ident">hosts</span>::<span class="ident">Hosts</span>;
|
||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">any</span>(<span class="ident">feature</span> <span class="op">=</span> <span class="string">"tokio"</span>, <span class="ident">test</span>))]</span>
|
||
<span class="kw">pub</span> <span class="kw">use</span> <span class="ident">resolver</span>::<span class="ident">Resolver</span>;
|
||
|
||
<span class="doccomment">/// This is an alias for [`AsyncResolver`], which replaced the type previously</span>
|
||
<span class="doccomment">/// called `ResolverFuture`.</span>
|
||
<span class="doccomment">///</span>
|
||
<span class="doccomment">/// # Note</span>
|
||
<span class="doccomment">///</span>
|
||
<span class="doccomment">/// For users of `ResolverFuture`, the return type for `ResolverFuture::new`</span>
|
||
<span class="doccomment">/// has changed since version 0.9 of `trust-dns-resolver`. It now returns</span>
|
||
<span class="doccomment">/// a tuple of an [`AsyncResolver`] _and_ a background future, which must</span>
|
||
<span class="doccomment">/// be spawned on a reactor before any lookup futures will run.</span>
|
||
<span class="doccomment">///</span>
|
||
<span class="doccomment">/// See the [`AsyncResolver`] documentation for more information on how to</span>
|
||
<span class="doccomment">/// use the background future.</span>
|
||
<span class="attribute">#[<span class="ident">deprecated</span>(<span class="ident">note</span> <span class="op">=</span> <span class="string">"use [`trust_dns_resolver::AsyncResolver`] instead"</span>)]</span>
|
||
<span class="kw">pub</span> <span class="kw">type</span> <span class="ident">ResolverFuture</span> <span class="op">=</span> <span class="ident">AsyncResolver</span>;
|
||
|
||
<span class="doccomment">/// returns a version as specified in Cargo.toml</span>
|
||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">version</span>() <span class="op">-</span><span class="op">></span> <span class="kw-2">&</span><span class="lifetime">'static</span> <span class="ident">str</span> {
|
||
<span class="macro">env</span><span class="macro">!</span>(<span class="string">"CARGO_PKG_VERSION"</span>)
|
||
}
|
||
</pre></div>
|
||
</section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../../";window.currentCrate = "trust_dns_resolver";</script><script src="../../aliases.js"></script><script src="../../main.js"></script><script src="../../source-script.js"></script><script src="../../source-files.js"></script><script defer src="../../search-index.js"></script></body></html> |