https-dns 0.2.0

Minimal and efficient DNS-over-HTTPS (DoH) client
Documentation
use crate::local::UdpListener;
use crate::upstream::HttpsClient;
use rand::{thread_rng, Rng};
use trust_dns_proto::{
    op::{Message, MessageType, Query},
    rr::{Name, RecordType},
};

pub fn build_request_message(name: Name, record_type: RecordType) -> Message {
    let mut request_message = Message::new();

    let mut rng = thread_rng();
    let message_id = rng.gen_range(0..=65535);
    request_message.set_id(message_id);
    request_message.set_message_type(MessageType::Query);
    request_message.set_recursion_desired(true);

    let query = Query::query(name, record_type);
    request_message.add_query(query);

    request_message
}

#[allow(dead_code)]
pub async fn build_test_listener() -> UdpListener {
    let upstream_address = String::from("cloudflare-dns.com");
    let upstream_port = 443;
    let local_address = String::from("127.0.0.1");
    let local_port = 10053;

    let https_client = HttpsClient::new(upstream_address, upstream_port)
        .await
        .unwrap();
    UdpListener::new(local_address, local_port, https_client)
        .await
        .unwrap()
}