Repo of no-std crates for my personal embedded projects
1use alloc::{vec, vec::Vec};
2
3use crate::{
4 dns::{
5 flags::Flags,
6 label::Label,
7 query::{QClass, Query},
8 records::QType,
9 reqres::Request,
10 },
11 encoder::{DnsError, Encoder},
12};
13
14pub fn query_domain<'a, 'b>(domain: &'a str, buf: &'b mut [u8]) -> Result<&'b [u8], DnsError> {
15 let encoder = Encoder::new(buf);
16
17 let query = Query {
18 name: Label::from(domain),
19 qtype: QType::A,
20 qclass: QClass::Multicast,
21 };
22
23 let request = Request {
24 id: 0,
25 flags: Flags::standard_request(),
26 queries: vec![query],
27 };
28
29 encoder.encode(request)
30}
31
32pub fn query_service<'a, 'b>(service: &'a str, buf: &'b mut [u8]) -> Result<&'b [u8], DnsError> {
33 let encoder = Encoder::new(buf);
34
35 let ptr = Query {
36 name: Label::from(service),
37 qtype: QType::PTR,
38 qclass: QClass::Multicast,
39 };
40
41 let request = Request {
42 id: 0,
43 flags: Flags::standard_request(),
44 queries: vec![ptr],
45 };
46
47 encoder.encode(request)
48}
49
50pub fn query_custom<'a, 'b>(
51 queries: Vec<Query<'a>>,
52 buf: &'b mut [u8],
53) -> Result<&'b [u8], DnsError> {
54 let encoder = Encoder::new(buf);
55
56 let request = Request {
57 id: 0,
58 flags: Flags::standard_request(),
59 queries,
60 };
61
62 encoder.encode(request)
63}