1
1
use crate :: error:: { DNSResolverError , Result } ;
2
- use crate :: packet :: DNSPacket ;
2
+ use crate :: message :: DNSMessage ;
3
3
use crate :: query:: { self } ;
4
4
use crate :: rr_types:: RRType ;
5
5
use std:: future:: Future ;
@@ -20,8 +20,8 @@ impl Resolver {
20
20
}
21
21
22
22
// Constructs a DNS query out of the provided domain and record type, resolves
23
- // the same and returns the resolved DNS packet .
24
- pub async fn resolve ( & self , domain : String , record_type : & RRType ) -> Result < DNSPacket > {
23
+ // the same and returns the resolved DNS message .
24
+ pub async fn resolve ( & self , domain : String , record_type : & RRType ) -> Result < DNSMessage > {
25
25
match record_type {
26
26
& RRType :: A => self . resolve_a_record ( domain) . await ,
27
27
& RRType :: CNAME => self . resolve_cname_record ( domain) . await ,
@@ -35,7 +35,9 @@ impl Resolver {
35
35
}
36
36
}
37
37
38
- async fn resolve_ns_record ( & self , domain : String ) -> Result < DNSPacket > {
38
+ // Constructs a DNS query of type NS using the provided domain, resolves
39
+ // the same and returns the resolved DNS message.
40
+ async fn resolve_ns_record ( & self , domain : String ) -> Result < DNSMessage > {
39
41
let mut nameserver = String :: from ( "198.41.0.4" ) ;
40
42
let record_type = RRType :: NS ;
41
43
@@ -47,17 +49,17 @@ impl Resolver {
47
49
let response = self
48
50
. send_query ( nameserver, domain. clone ( ) , record_type. clone ( ) )
49
51
. await ?;
50
- let packet = DNSPacket :: decode ( & response) ?;
52
+ let message = DNSMessage :: decode ( & response) ?;
51
53
52
- if packet . answers_data ( & record_type) . len ( ) > 0 {
53
- return Ok ( packet ) ;
54
- } else if packet . answers_data ( & RRType :: CNAME ) . len ( ) > 0 {
55
- let cname = packet . answers_data ( & RRType :: CNAME ) [ 0 ] . clone ( ) ;
54
+ if message . answers_data ( & record_type) . len ( ) > 0 {
55
+ return Ok ( message ) ;
56
+ } else if message . answers_data ( & RRType :: CNAME ) . len ( ) > 0 {
57
+ let cname = message . answers_data ( & RRType :: CNAME ) [ 0 ] . clone ( ) ;
56
58
let resolved_cname = self . resolve_a_record ( cname) . await ?;
57
59
return Ok ( resolved_cname) ;
58
- } else if let Some ( ns_ip) = packet . ns_ip ( ) {
60
+ } else if let Some ( ns_ip) = message . ns_ip ( ) {
59
61
nameserver = ns_ip. to_owned ( ) ;
60
- } else if let Some ( ns) = packet . nameserver ( ) {
62
+ } else if let Some ( ns) = message . nameserver ( ) {
61
63
let resolved_ns = self . resolve_a_record ( ns. to_owned ( ) ) . await ?;
62
64
nameserver = resolved_ns. answers_data ( & RRType :: A ) [ 0 ] . clone ( ) ;
63
65
} else {
@@ -66,7 +68,9 @@ impl Resolver {
66
68
}
67
69
}
68
70
69
- async fn resolve_cname_record ( & self , domain : String ) -> Result < DNSPacket > {
71
+ // Constructs a DNS query of type CNAME using the provided domain, resolves
72
+ // the same and returns the resolved DNS message.
73
+ async fn resolve_cname_record ( & self , domain : String ) -> Result < DNSMessage > {
70
74
let mut nameserver = String :: from ( "198.41.0.4" ) ;
71
75
let record_type = RRType :: CNAME ;
72
76
@@ -78,13 +82,13 @@ impl Resolver {
78
82
let response = self
79
83
. send_query ( nameserver, domain. clone ( ) , record_type. clone ( ) )
80
84
. await ?;
81
- let packet = DNSPacket :: decode ( & response) ?;
85
+ let message = DNSMessage :: decode ( & response) ?;
82
86
83
- if packet . answers_data ( & record_type) . len ( ) > 0 {
84
- return Ok ( packet ) ;
85
- } else if let Some ( ns_ip) = packet . ns_ip ( ) {
87
+ if message . answers_data ( & record_type) . len ( ) > 0 {
88
+ return Ok ( message ) ;
89
+ } else if let Some ( ns_ip) = message . ns_ip ( ) {
86
90
nameserver = ns_ip. to_owned ( ) ;
87
- } else if let Some ( ns) = packet . nameserver ( ) {
91
+ } else if let Some ( ns) = message . nameserver ( ) {
88
92
let resolved_ns = self . resolve_a_record ( ns. to_owned ( ) ) . await ?;
89
93
nameserver = resolved_ns. answers_data ( & RRType :: A ) [ 0 ] . clone ( ) ;
90
94
} else {
@@ -96,7 +100,9 @@ impl Resolver {
96
100
}
97
101
}
98
102
99
- async fn resolve_txt_record ( & self , domain : String ) -> Result < DNSPacket > {
103
+ // Constructs a DNS query of type TXT using the provided domain, resolves
104
+ // the same and returns the resolved DNS message.
105
+ async fn resolve_txt_record ( & self , domain : String ) -> Result < DNSMessage > {
100
106
let mut nameserver = String :: from ( "198.41.0.4" ) ;
101
107
let record_type = RRType :: TXT ;
102
108
@@ -108,13 +114,13 @@ impl Resolver {
108
114
let response = self
109
115
. send_query ( nameserver, domain. clone ( ) , record_type. clone ( ) )
110
116
. await ?;
111
- let packet = DNSPacket :: decode ( & response) ?;
117
+ let message = DNSMessage :: decode ( & response) ?;
112
118
113
- if packet . answers_data ( & record_type) . len ( ) > 0 {
114
- return Ok ( packet ) ;
115
- } else if let Some ( ns_ip) = packet . ns_ip ( ) {
119
+ if message . answers_data ( & record_type) . len ( ) > 0 {
120
+ return Ok ( message ) ;
121
+ } else if let Some ( ns_ip) = message . ns_ip ( ) {
116
122
nameserver = ns_ip. to_owned ( ) ;
117
- } else if let Some ( ns) = packet . nameserver ( ) {
123
+ } else if let Some ( ns) = message . nameserver ( ) {
118
124
let resolved_ns = self . resolve_a_record ( ns. to_owned ( ) ) . await ?;
119
125
nameserver = resolved_ns. answers_data ( & RRType :: A ) [ 0 ] . clone ( ) ;
120
126
} else {
@@ -123,10 +129,12 @@ impl Resolver {
123
129
}
124
130
}
125
131
132
+ // Constructs a DNS query of type A using the provided domain, resolves
133
+ // the same and returns the resolved DNS message.
126
134
fn resolve_a_record (
127
135
& self ,
128
136
domain : String ,
129
- ) -> Pin < Box < dyn Future < Output = Result < DNSPacket > > + ' _ > > {
137
+ ) -> Pin < Box < dyn Future < Output = Result < DNSMessage > > + ' _ > > {
130
138
Box :: pin ( async move {
131
139
let mut nameserver = String :: from ( "198.41.0.4" ) ;
132
140
let record_type = RRType :: A ;
@@ -139,17 +147,17 @@ impl Resolver {
139
147
let response = self
140
148
. send_query ( nameserver, domain. clone ( ) , record_type. clone ( ) )
141
149
. await ?;
142
- let packet = DNSPacket :: decode ( & response) ?;
150
+ let message = DNSMessage :: decode ( & response) ?;
143
151
144
- if packet . answers_data ( & record_type) . len ( ) > 0 {
145
- return Ok ( packet ) ;
146
- } else if packet . answers_data ( & RRType :: CNAME ) . len ( ) > 0 {
147
- let cname = packet . answers_data ( & RRType :: CNAME ) [ 0 ] . clone ( ) ;
152
+ if message . answers_data ( & record_type) . len ( ) > 0 {
153
+ return Ok ( message ) ;
154
+ } else if message . answers_data ( & RRType :: CNAME ) . len ( ) > 0 {
155
+ let cname = message . answers_data ( & RRType :: CNAME ) [ 0 ] . clone ( ) ;
148
156
let resolved_cname = self . resolve_a_record ( cname) . await ?;
149
157
return Ok ( resolved_cname) ;
150
- } else if let Some ( ns_ip) = packet . ns_ip ( ) {
158
+ } else if let Some ( ns_ip) = message . ns_ip ( ) {
151
159
nameserver = ns_ip. to_owned ( ) ;
152
- } else if let Some ( ns) = packet . nameserver ( ) {
160
+ } else if let Some ( ns) = message . nameserver ( ) {
153
161
let resolved_ns = self . resolve_a_record ( ns. to_owned ( ) ) . await ?;
154
162
nameserver = resolved_ns. answers_data ( & RRType :: A ) [ 0 ] . clone ( ) ;
155
163
} else {
0 commit comments