Added full IPv6 support for DNS-resolver upstreams.

This commit is contained in:
Revertron
2021-03-06 23:53:30 +01:00
parent ce212ab749
commit 1cd1fed178
3 changed files with 79 additions and 10 deletions
+3 -2
View File
@@ -8,6 +8,7 @@ use derive_more::{Display, Error, From};
use crate::dns::context::ServerContext;
use crate::dns::protocol::{DnsPacket, QueryType, ResultCode};
use rand::seq::IteratorRandom;
#[derive(Debug, Display, From, Error)]
pub enum ResolveError {
@@ -83,8 +84,8 @@ impl DnsResolver for ForwardingDnsResolver {
}
fn perform(&mut self, qname: &str, qtype: QueryType) -> Result<DnsPacket> {
let index: usize = rand::random::<usize>() % self.upstreams.len();
let upstream = self.upstreams[index].as_ref();
let mut random = rand::thread_rng();
let upstream = self.upstreams.iter().choose(&mut random).unwrap();
let result = match self.context.cache.lookup(qname, qtype) {
None => {
self.context.client.send_query(qname, qtype, upstream, true)?