@@ -8,12 +8,13 @@ use std::str::FromStr;
8
8
use std:: { error:: Error , fmt} ;
9
9
10
10
#[ derive( Clone , Debug , PartialEq ) ]
11
- pub struct PtrResult {
12
- // For example: one.one.one.one.
13
- // For example: dns.google.
11
+ /// The result of resolving the pointer or the IP
12
+ pub struct ResolvedResult {
13
+ /// For example: one.one.one.one.
14
+ /// For example: dns.google.
14
15
pub query : Name ,
15
- // For example: 1.1.1.1.in-addr.arpa.
16
- // For example: 8.8.8.8.in-addr.arpa.
16
+ /// For example: 1.1.1.1.in-addr.arpa.
17
+ /// For example: 8.8.8.8.in-addr.arpa.
17
18
pub result : Option < Name > ,
18
19
pub error : Option < String > ,
19
20
}
@@ -33,11 +34,32 @@ impl fmt::Display for ResolvingError {
33
34
34
35
/**
35
36
* Resolve a DNS IP adddress (IPv4/IPv6) into a DNS pointer
37
+ * ```
38
+ * use hickory_client::client::SyncClient;
39
+ * use hickory_client::rr::Name;
40
+ * use hickory_client::tcp::TcpClientConnection;
41
+ *
42
+ * use dns_ptr_resolver::{get_ptr, ResolvedResult};
43
+ *
44
+ * let server = "1.1.1.1:53".parse().expect("To parse");
45
+ * let conn = TcpClientConnection::with_timeout(server, std::time::Duration::new(5, 0)).unwrap();
46
+ * let client = SyncClient::new(conn);
47
+ * let query_address = "8.8.8.8".parse().expect("To parse");
48
+ *
49
+ * assert_eq!(
50
+ * get_ptr(query_address, client).unwrap(),
51
+ * ResolvedResult {
52
+ * query: Name::from_str_relaxed("8.8.8.8.in-addr.arpa.").unwrap(),
53
+ * result: Some(Name::from_str_relaxed("dns.google.").unwrap()),
54
+ * error: None,
55
+ * }
56
+ * );
57
+ * ```
36
58
*/
37
59
pub fn get_ptr (
38
60
ip_address : IpAddr ,
39
61
client : SyncClient < TcpClientConnection > ,
40
- ) -> Result < PtrResult , ResolvingError > {
62
+ ) -> Result < ResolvedResult , ResolvingError > {
41
63
// Specify the name, note the final '.' which specifies it's an FQDN
42
64
match Name :: from_str ( & reverse ( ip_address) ) {
43
65
Ok ( name) => ptr_resolve ( name, client) ,
@@ -53,11 +75,33 @@ pub fn get_ptr(
53
75
54
76
/**
55
77
* This will resolve a name into its DNS pointer value
78
+ * ```
79
+ * use hickory_client::client::SyncClient;
80
+ * use hickory_client::rr::Name;
81
+ * use hickory_client::tcp::TcpClientConnection;
82
+ *
83
+ * use dns_ptr_resolver::{ptr_resolve, ResolvedResult};
84
+ *
85
+ * let server = "8.8.8.8:53".parse().expect("To parse");
86
+ * let conn = TcpClientConnection::with_timeout(server, std::time::Duration::new(5, 0)).unwrap();
87
+ * let client = SyncClient::new(conn);
88
+ *
89
+ * let name_to_resolve = Name::from_str_relaxed("1.1.1.1.in-addr.arpa.").unwrap();
90
+ *
91
+ * assert_eq!(
92
+ * ptr_resolve(name_to_resolve.clone(), client).unwrap(),
93
+ * ResolvedResult {
94
+ * query: name_to_resolve,
95
+ * result: Some(Name::from_str_relaxed("one.one.one.one.").unwrap()),
96
+ * error: None,
97
+ * }
98
+ * );
99
+ * ```
56
100
*/
57
101
pub fn ptr_resolve (
58
102
name : Name ,
59
103
client : SyncClient < TcpClientConnection > ,
60
- ) -> Result < PtrResult , ResolvingError > {
104
+ ) -> Result < ResolvedResult , ResolvingError > {
61
105
let response: DnsResponse = match client. query ( & name, DNSClass :: IN , RecordType :: PTR ) {
62
106
Ok ( res) => res,
63
107
Err ( err) => {
@@ -70,7 +114,7 @@ pub fn ptr_resolve(
70
114
let answers: & [ Record ] = response. answers ( ) ;
71
115
72
116
if answers. len ( ) == 0 {
73
- return Ok ( PtrResult {
117
+ return Ok ( ResolvedResult {
74
118
query : name,
75
119
result : None ,
76
120
error : None ,
@@ -79,7 +123,7 @@ pub fn ptr_resolve(
79
123
80
124
match answers[ 0 ] . data ( ) {
81
125
Some ( RData :: PTR ( res) ) => {
82
- return Ok ( PtrResult {
126
+ return Ok ( ResolvedResult {
83
127
query : name,
84
128
result : Some ( res. to_lowercase ( ) ) ,
85
129
error : None ,
@@ -130,7 +174,7 @@ mod test {
130
174
131
175
assert_eq ! (
132
176
get_ptr( query_address, client) . unwrap( ) ,
133
- PtrResult {
177
+ ResolvedResult {
134
178
query: Name :: from_str_relaxed( "8.8.8.8.in-addr.arpa." ) . unwrap( ) ,
135
179
result: Some ( Name :: from_str_relaxed( "dns.google." ) . unwrap( ) ) ,
136
180
error: None ,
@@ -157,7 +201,7 @@ mod test {
157
201
158
202
assert_eq ! (
159
203
ptr_resolve( name_to_resolve. clone( ) , client) . unwrap( ) ,
160
- PtrResult {
204
+ ResolvedResult {
161
205
query: name_to_resolve,
162
206
result: Some ( Name :: from_str_relaxed( "one.one.one.one." ) . unwrap( ) ) ,
163
207
error: None ,
0 commit comments