Skip to content

Commit 28a8717

Browse files
committed
rename packet terminology to message
Signed-off-by: Sanskar Jaiswal <[email protected]>
1 parent 2cad91a commit 28a8717

File tree

7 files changed

+83
-70
lines changed

7 files changed

+83
-70
lines changed

src/bin/client.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ async fn main() -> Result<()> {
1515
let rr_type = rr_types::str_to_record_type(&record_type)?;
1616

1717
let resolver = Resolver::new("0.0.0.0:3400").await?;
18-
let packet = resolver.resolve(domain, &rr_type).await?;
19-
let ips = packet.answers_data(&rr_type);
18+
let message = resolver.resolve(domain, &rr_type).await?;
19+
let ips = message.answers_data(&rr_type);
2020

2121
println!("answer(s): {:?}", ips);
2222
Ok(())

src/bin/server.rs

+12-8
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
use anyhow::Result;
22
use dns_resolver::cache::DNSCache;
3-
use dns_resolver::packet::DNSPacket;
3+
use dns_resolver::message::DNSMessage;
44
use dns_resolver::query::{DNSHeader, DNSQuestion, QR};
55
use dns_resolver::resolver::Resolver;
66
use tokio::net::UdpSocket;
77

88
#[tokio::main]
99
async fn main() -> Result<()> {
10-
let socket = UdpSocket::bind("0.0.0.0:3500").await?;
10+
let socket = UdpSocket::bind("127.0.0.1:3500").await?;
1111
let mut cache = DNSCache::new(100);
1212
loop {
1313
let mut buf = [0; 1024];
@@ -17,7 +17,7 @@ async fn main() -> Result<()> {
1717

1818
let header = DNSHeader::decode(&mut query_iter)?;
1919
let question = DNSQuestion::decode(&mut query_iter)?;
20-
let mut packet: DNSPacket;
20+
let mut message: DNSMessage;
2121
if let Some(answer) = cache.get(question.name(), question.q_type()) {
2222
let mut new_header = DNSHeader::new(
2323
header.id(),
@@ -32,16 +32,20 @@ async fn main() -> Result<()> {
3232
new_header.set_recursion_available(true);
3333
let questions = vec![question];
3434
let answers = answer.data();
35-
packet = DNSPacket::new(new_header, questions, answers, vec![], vec![]);
35+
message = DNSMessage::new(new_header, questions, answers, vec![], vec![]);
3636
} else {
3737
let resolver = Resolver::new("0.0.0.0:3400").await?;
3838
let domain = question.name().0.clone();
39-
packet = resolver.resolve(domain, question.q_type()).await?;
40-
packet.set_id(header.id());
41-
cache.insert(question.name(), question.q_type(), packet.answers().clone());
39+
message = resolver.resolve(domain, question.q_type()).await?;
40+
message.set_id(header.id());
41+
cache.insert(
42+
question.name(),
43+
question.q_type(),
44+
message.answers().clone(),
45+
);
4246
}
4347

44-
let encoded = packet.encode()?;
48+
let encoded = message.encode()?;
4549
socket.send_to(&encoded, addr).await?;
4650
}
4751
}

src/domain_name.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ impl LabelSequenceParser {
1818
}
1919

2020
// Constructs the domain name from its wire format.
21-
// response is supposed to be the entire DNS packet required
21+
// response is supposed to be the entire DNS message required
2222
// to go back to where a pointer is pointing.
2323
pub fn construct_domain_name<'a, T>(
2424
&mut self,
@@ -166,7 +166,7 @@ impl DomainName {
166166
let mut parts_iter = parts.iter();
167167
loop {
168168
if let Some(part) = parts_iter.next() {
169-
// check if the label is already present somewhere in the encoded packet.
169+
// check if the label is already present somewhere in the encoded message.
170170
if let Some(idx) = find_subset_index(&encoded, &part.1) {
171171
// subtract 1 here since we need to include the length octect that appears
172172
// before the start of label.

src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
pub mod cache;
22
pub mod domain_name;
33
pub mod error;
4-
pub mod packet;
4+
pub mod message;
55
pub mod query;
66
pub mod resolver;
77
pub mod resource_record;

src/packet.rs src/message.rs

+16-16
Original file line numberDiff line numberDiff line change
@@ -5,59 +5,60 @@ use crate::{
55
rr_types::RRType,
66
};
77

8-
// DNSPacket represents a DNS packet.
8+
// DNSMessage represents a DNS message.
99
#[derive(Debug)]
10-
pub struct DNSPacket {
10+
pub struct DNSMessage {
1111
header: DNSHeader,
1212
questions: Vec<DNSQuestion>,
1313
answers: Vec<DNSRecord>,
1414
authorities: Vec<DNSRecord>,
1515
additionals: Vec<DNSRecord>,
1616
}
1717

18-
impl DNSPacket {
18+
impl DNSMessage {
1919
pub fn new(
2020
header: DNSHeader,
2121
questions: Vec<DNSQuestion>,
2222
answers: Vec<DNSRecord>,
2323
authorities: Vec<DNSRecord>,
2424
additionals: Vec<DNSRecord>,
25-
) -> DNSPacket {
26-
DNSPacket {
25+
) -> DNSMessage {
26+
DNSMessage {
2727
header,
2828
questions,
2929
answers,
3030
authorities,
3131
additionals,
3232
}
3333
}
34-
// Decode the packet from its wire format into our representation.
35-
pub fn decode(packet: &Vec<u8>) -> Result<DNSPacket> {
36-
let mut packet_iter = packet.iter();
34+
35+
// Decode the message from its wire format into our representation.
36+
pub fn decode(message: &Vec<u8>) -> Result<DNSMessage> {
37+
let mut message_iter = message.iter();
3738
let mut questions = vec![];
3839
let mut answers = vec![];
3940
let mut authorities = vec![];
4041
let mut additionals = vec![];
4142

42-
let header = DNSHeader::decode(&mut packet_iter)?;
43+
let header = DNSHeader::decode(&mut message_iter)?;
4344
for _ in 0..header.num_questions() {
44-
let question = DNSQuestion::decode(&mut packet_iter)?;
45+
let question = DNSQuestion::decode(&mut message_iter)?;
4546
questions.push(question);
4647
}
4748
for _ in 0..header.num_answers() {
48-
let answer = DNSRecord::decode(&mut packet_iter, &mut packet.iter())?;
49+
let answer = DNSRecord::decode(&mut message_iter, &mut message.iter())?;
4950
answers.push(answer);
5051
}
5152
for _ in 0..header.num_authorities() {
52-
let rr = DNSRecord::decode(&mut packet_iter, &mut packet.iter())?;
53+
let rr = DNSRecord::decode(&mut message_iter, &mut message.iter())?;
5354
authorities.push(rr);
5455
}
5556
for _ in 0..header.num_additionals() {
56-
let rr = DNSRecord::decode(&mut packet_iter, &mut packet.iter())?;
57+
let rr = DNSRecord::decode(&mut message_iter, &mut message.iter())?;
5758
additionals.push(rr);
5859
}
5960

60-
Ok(DNSPacket {
61+
Ok(DNSMessage {
6162
header,
6263
questions,
6364
answers,
@@ -66,7 +67,7 @@ impl DNSPacket {
6667
})
6768
}
6869

69-
// Encode the packet into the wire format.
70+
// Encode the message into the wire format.
7071
pub fn encode(&self) -> Result<Vec<u8>> {
7172
let mut encoded = vec![];
7273
self.header.encode(&mut encoded);
@@ -85,7 +86,6 @@ impl DNSPacket {
8586
Ok(encoded)
8687
}
8788

88-
// Sets the provided id as its header's id.
8989
pub fn set_id(&mut self, id: u16) {
9090
self.header.set_id(id);
9191
}

src/query.rs

+11-10
Original file line numberDiff line numberDiff line change
@@ -99,24 +99,29 @@ impl DNSHeader {
9999
}
100100
}
101101

102+
// Set the QR (0th) bit of the header's flags.
103+
// 1 signfies a response; 0 signfies a query.
102104
pub fn set_qr(&mut self, qr: QR) {
103105
self.flags = set_bit(self.flags, qr as u8, 0);
104106
}
105107

106-
pub fn set_opcode_std_query(&mut self) {
107-
for i in 1..5 {
108-
self.flags = set_bit(self.flags, 0, i);
109-
}
110-
}
111-
108+
// Set the RD (7th) bit of the header's flags.
109+
// Signifies whether recursion is desired.
112110
pub fn set_recursion_desired(&mut self, rd: bool) {
113111
self.flags = set_bit(self.flags, rd as u8, 7);
114112
}
115113

114+
// Set the RA (8th) bit of the header's flags.
115+
// Signifies whether recursion is available.
116116
pub fn set_recursion_available(&mut self, ra: bool) {
117117
self.flags = set_bit(self.flags, ra as u8, 8);
118118
}
119119

120+
// Set the header ID.
121+
pub fn set_id(&mut self, id: u16) {
122+
self.id = id
123+
}
124+
120125
pub fn id(&self) -> u16 {
121126
self.id
122127
}
@@ -145,10 +150,6 @@ impl DNSHeader {
145150
return self.ar_count;
146151
}
147152

148-
pub fn set_id(&mut self, id: u16) {
149-
self.id = id
150-
}
151-
152153
// Encode the header into the provided vector in its wire format.
153154
pub fn encode(&self, encoded: &mut Vec<u8>) {
154155
encoded.extend(self.id.to_be_bytes());

src/resolver.rs

+39-31
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::error::{DNSResolverError, Result};
2-
use crate::packet::DNSPacket;
2+
use crate::message::DNSMessage;
33
use crate::query::{self};
44
use crate::rr_types::RRType;
55
use std::future::Future;
@@ -20,8 +20,8 @@ impl Resolver {
2020
}
2121

2222
// 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> {
2525
match record_type {
2626
&RRType::A => self.resolve_a_record(domain).await,
2727
&RRType::CNAME => self.resolve_cname_record(domain).await,
@@ -35,7 +35,9 @@ impl Resolver {
3535
}
3636
}
3737

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> {
3941
let mut nameserver = String::from("198.41.0.4");
4042
let record_type = RRType::NS;
4143

@@ -47,17 +49,17 @@ impl Resolver {
4749
let response = self
4850
.send_query(nameserver, domain.clone(), record_type.clone())
4951
.await?;
50-
let packet = DNSPacket::decode(&response)?;
52+
let message = DNSMessage::decode(&response)?;
5153

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();
5658
let resolved_cname = self.resolve_a_record(cname).await?;
5759
return Ok(resolved_cname);
58-
} else if let Some(ns_ip) = packet.ns_ip() {
60+
} else if let Some(ns_ip) = message.ns_ip() {
5961
nameserver = ns_ip.to_owned();
60-
} else if let Some(ns) = packet.nameserver() {
62+
} else if let Some(ns) = message.nameserver() {
6163
let resolved_ns = self.resolve_a_record(ns.to_owned()).await?;
6264
nameserver = resolved_ns.answers_data(&RRType::A)[0].clone();
6365
} else {
@@ -66,7 +68,9 @@ impl Resolver {
6668
}
6769
}
6870

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> {
7074
let mut nameserver = String::from("198.41.0.4");
7175
let record_type = RRType::CNAME;
7276

@@ -78,13 +82,13 @@ impl Resolver {
7882
let response = self
7983
.send_query(nameserver, domain.clone(), record_type.clone())
8084
.await?;
81-
let packet = DNSPacket::decode(&response)?;
85+
let message = DNSMessage::decode(&response)?;
8286

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() {
8690
nameserver = ns_ip.to_owned();
87-
} else if let Some(ns) = packet.nameserver() {
91+
} else if let Some(ns) = message.nameserver() {
8892
let resolved_ns = self.resolve_a_record(ns.to_owned()).await?;
8993
nameserver = resolved_ns.answers_data(&RRType::A)[0].clone();
9094
} else {
@@ -96,7 +100,9 @@ impl Resolver {
96100
}
97101
}
98102

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> {
100106
let mut nameserver = String::from("198.41.0.4");
101107
let record_type = RRType::TXT;
102108

@@ -108,13 +114,13 @@ impl Resolver {
108114
let response = self
109115
.send_query(nameserver, domain.clone(), record_type.clone())
110116
.await?;
111-
let packet = DNSPacket::decode(&response)?;
117+
let message = DNSMessage::decode(&response)?;
112118

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() {
116122
nameserver = ns_ip.to_owned();
117-
} else if let Some(ns) = packet.nameserver() {
123+
} else if let Some(ns) = message.nameserver() {
118124
let resolved_ns = self.resolve_a_record(ns.to_owned()).await?;
119125
nameserver = resolved_ns.answers_data(&RRType::A)[0].clone();
120126
} else {
@@ -123,10 +129,12 @@ impl Resolver {
123129
}
124130
}
125131

132+
// Constructs a DNS query of type A using the provided domain, resolves
133+
// the same and returns the resolved DNS message.
126134
fn resolve_a_record(
127135
&self,
128136
domain: String,
129-
) -> Pin<Box<dyn Future<Output = Result<DNSPacket>> + '_>> {
137+
) -> Pin<Box<dyn Future<Output = Result<DNSMessage>> + '_>> {
130138
Box::pin(async move {
131139
let mut nameserver = String::from("198.41.0.4");
132140
let record_type = RRType::A;
@@ -139,17 +147,17 @@ impl Resolver {
139147
let response = self
140148
.send_query(nameserver, domain.clone(), record_type.clone())
141149
.await?;
142-
let packet = DNSPacket::decode(&response)?;
150+
let message = DNSMessage::decode(&response)?;
143151

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();
148156
let resolved_cname = self.resolve_a_record(cname).await?;
149157
return Ok(resolved_cname);
150-
} else if let Some(ns_ip) = packet.ns_ip() {
158+
} else if let Some(ns_ip) = message.ns_ip() {
151159
nameserver = ns_ip.to_owned();
152-
} else if let Some(ns) = packet.nameserver() {
160+
} else if let Some(ns) = message.nameserver() {
153161
let resolved_ns = self.resolve_a_record(ns.to_owned()).await?;
154162
nameserver = resolved_ns.answers_data(&RRType::A)[0].clone();
155163
} else {

0 commit comments

Comments
 (0)