Repo of no-std crates for my personal embedded projects
at main 63 lines 1.3 kB view raw
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}