dns_message_parser/encode/rr/
rfc_4034.rs1use crate::encode::Encoder;
2use crate::rr::{AlgorithmType, DigestType, Type, DNSKEY, DS};
3use crate::EncodeResult;
4
5impl Encoder {
6 fn rr_algorithm_type(&mut self, algorithm_type: AlgorithmType) {
7 self.u8(algorithm_type as u8);
8 }
9
10 fn rr_digest_type(&mut self, digest_type: DigestType) {
11 self.u8(digest_type as u8);
12 }
13
14 pub(super) fn rr_dnskey(&mut self, dnskey: &DNSKEY) -> EncodeResult<()> {
15 self.domain_name(&dnskey.domain_name)?;
16 self.rr_type(&Type::DNSKEY);
17 self.rr_class(&dnskey.class);
18 self.u32(dnskey.ttl);
19 let length_index = self.create_length_index();
20 self.u16(dnskey.get_flags());
21 self.u8(3);
22 self.rr_algorithm_type(dnskey.algorithm_type);
23 self.vec(&dnskey.public_key);
24 self.set_length_index(length_index)
25 }
26
27 pub(super) fn rr_ds(&mut self, ds: &DS) -> EncodeResult<()> {
28 self.domain_name(&ds.domain_name)?;
29 self.rr_type(&Type::DS);
30 self.rr_class(&ds.class);
31 self.u32(ds.ttl);
32 let length_index = self.create_length_index();
33 self.u16(ds.key_tag);
34 self.rr_algorithm_type(ds.algorithm_type);
35 self.rr_digest_type(ds.digest_type);
36 self.vec(&ds.digest);
37 self.set_length_index(length_index)
38 }
39}