dns_message/
wire_length.rs1use crate::header::{Flags, Header};
2use crate::message::Message;
3use crate::question::{Label, NameElement, Question};
4use crate::resource_record::ResourceRecord;
5use mt::WireLength;
6
7impl WireLength<usize> for Header {
8 fn wire_length(&self) -> usize {
9 12
10 }
11}
12
13impl WireLength<usize> for &Flags {
14 fn wire_length(&self) -> usize {
15 2
16 }
17}
18
19impl<'a> WireLength<usize> for &Label<'a> {
20 fn wire_length(&self) -> usize {
21 1 + self.data.len()
22 }
23}
24
25impl<'a> WireLength<usize> for NameElement<'a> {
26 fn wire_length(&self) -> usize {
27 match self {
28 NameElement::Label(l) => l.wire_length(),
29 NameElement::Pointer(_) => 2,
30 NameElement::Root => 1,
31 NameElement::Reserved => 0,
32 }
33 }
34}
35
36impl<'a> WireLength<usize> for Question<'a> {
37 fn wire_length(&self) -> usize {
38 self.q_name.wire_length() + 4
39 }
40}
41
42impl<'a> WireLength<usize> for ResourceRecord<'a> {
43 fn wire_length(&self) -> usize {
44 self.rr_name.wire_length() + 10 + self.rr_data.len()
45 }
46}
47
48impl<'a> WireLength<usize> for Message<'a> {
49 fn wire_length(&self) -> usize {
50 self.header.wire_length()
51 + self.question.wire_length()
52 + self.answer.wire_length()
53 + self.authority.wire_length()
54 + self.additional.wire_length()
55 }
56}