1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
use crate::encode::Encoder; use crate::rr::{Class, Type, A, HINFO, SOA, WKS}; use crate::EncodeResult; impl Encoder { pub(super) fn rr_a(&mut self, a: &A) -> EncodeResult<()> { self.domain_name(&a.domain_name)?; self.rr_type(&Type::A); self.rr_class(&Class::IN); self.u32(a.ttl); let length_index = self.create_length_index(); self.ipv4_addr(&a.ipv4_addr); self.set_length_index(length_index) } impl_encode_rr_domain_name!(NS, ns_d_name, rr_ns); impl_encode_rr_domain_name!(MD, mad_name, rr_md); impl_encode_rr_domain_name!(MF, mad_name, rr_mf); impl_encode_rr_domain_name!(CNAME, c_name, rr_cname); pub(super) fn rr_soa(&mut self, soa: &SOA) -> EncodeResult<()> { self.domain_name(&soa.domain_name)?; self.rr_type(&Type::SOA); self.rr_class(&soa.class); self.u32(soa.ttl); let length_index = self.create_length_index(); self.domain_name(&soa.m_name)?; self.domain_name(&soa.r_name)?; self.u32(soa.serial); self.u32(soa.refresh); self.u32(soa.retry); self.u32(soa.expire); self.u32(soa.min_ttl); self.set_length_index(length_index) } impl_encode_rr_domain_name!(MB, mad_name, rr_mb); impl_encode_rr_domain_name!(MG, mgm_name, rr_mg); impl_encode_rr_domain_name!(MR, new_name, rr_mr); impl_encode_rr_vec!(NULL, data, rr_null); pub(super) fn rr_wks(&mut self, wks: &WKS) -> EncodeResult<()> { self.domain_name(&wks.domain_name)?; self.rr_type(&Type::WKS); self.rr_class(&Class::IN); self.u32(wks.ttl); let length_index = self.create_length_index(); self.ipv4_addr(&wks.ipv4_addr); self.u8(wks.protocol); self.vec(&wks.bit_map); self.set_length_index(length_index) } impl_encode_rr_domain_name!(PTR, ptr_d_name, rr_ptr); pub(super) fn rr_hinfo(&mut self, hinfo: &HINFO) -> EncodeResult<()> { self.domain_name(&hinfo.domain_name)?; self.rr_type(&Type::HINFO); self.rr_class(&hinfo.class); self.u32(hinfo.ttl); let length_index = self.create_length_index(); self.string(&hinfo.cpu)?; self.string(&hinfo.os)?; self.set_length_index(length_index) } impl_encode_rr_domain_name_domain_name!(MINFO, r_mail_bx, e_mail_bx, rr_minfo); impl_encode_rr_u16_domain_name!(MX, preference, exchange, rr_mx); impl_encode_rr_string!(TXT, string, rr_txt); } impl_encode_rr!(A, rr_a); impl_encode_rr!(NS, rr_ns); impl_encode_rr!(MD, rr_md); impl_encode_rr!(MF, rr_mf); impl_encode_rr!(CNAME, rr_cname); impl_encode_rr!(SOA, rr_soa); impl_encode_rr!(MB, rr_mb); impl_encode_rr!(MG, rr_mg); impl_encode_rr!(MR, rr_mr); impl_encode_rr!(NULL, rr_null); impl_encode_rr!(WKS, rr_wks); impl_encode_rr!(PTR, rr_ptr); impl_encode_rr!(HINFO, rr_hinfo); impl_encode_rr!(MINFO, rr_minfo); impl_encode_rr!(MX, rr_mx); impl_encode_rr!(TXT, rr_txt);