Working on multiple insert

This commit is contained in:
notplants 2021-05-07 12:20:22 +02:00
parent 76dc806583
commit 8bd7e7b1b4
1 changed files with 103 additions and 75 deletions

View File

@ -13,27 +13,25 @@ use trust_dns_server::store::in_memory::InMemoryAuthority;
static DEFAULT_TCP_REQUEST_TIMEOUT: u64 = 5;
pub async fn server() -> ServerFuture<Catalog> {
info!("Trust-DNS {} starting", trust_dns_server::version());
let ip_addr = IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0));
let listen_port: u16 = 12323;
let tcp_request_timeout = Duration::from_secs(DEFAULT_TCP_REQUEST_TIMEOUT);
struct DnsManager {
catalog: Catalog,
}
let sock_addr = SocketAddr::new(ip_addr, listen_port);
let udp_socket = UdpSocket::bind(&sock_addr)
.await
.expect("could not bind udp socket");
let tcp_listener = TcpListener::bind(&sock_addr)
.await
.expect("could not bind tcp listener");
impl DnsManager {
pub fn new() -> DnsManager {
let catalog: Catalog = Catalog::new();
return DnsManager {
catalog,
};
}
pub fn upsert(&mut self, domain: String, ip: Ipv4Addr) {
let mut catalog: Catalog = Catalog::new();
let authority_name = Name::from_str("dyn.peach.cloud.").unwrap();
let mut authority_records = BTreeMap::new();
let authority_zone_type = ZoneType::Master;
let authority_allow_axfr = false;
let soa_serial = 1;
let soa_name = Name::from_str("dyn.peach.cloud.").unwrap();
@ -52,8 +50,12 @@ pub async fn server() -> ServerFuture<Catalog> {
LowerName::new(&authority_name),
soa_record_set.record_type(),
);
let mut authority_records = BTreeMap::new();
authority_records.insert(soa_rr_key, soa_record_set);
let authority_zone_type = ZoneType::Master;
let authority_allow_axfr = false;
let mut authority = InMemoryAuthority::new(
authority_name.clone(),
authority_records,
@ -70,30 +72,56 @@ pub async fn server() -> ServerFuture<Catalog> {
authority.upsert(ns_record, authority.serial());
*/
let dyn_name = Name::from_str("test.dyn.peach.cloud.").unwrap();
let dyn_name = Name::from_str(&domain).unwrap();
let dyn_ttl = 60;
let dyn_rdata = RData::A(Ipv4Addr::new(1, 1, 1, 1));
let dyn_rdata = RData::A(ip);
let dyn_record = Record::from_rdata(dyn_name, dyn_ttl, dyn_rdata);
authority.upsert(dyn_record, authority.serial());
catalog.upsert(
self.catalog.upsert(
LowerName::new(&authority_name),
Box::new(Arc::new(RwLock::new(authority))),
);
}
}
// second insert
let dyn_name = Name::from_str("test.dyn.peach.cloud.").unwrap();
let dyn_ttl = 60;
let dyn_rdata = RData::A(Ipv4Addr::new(1, 1, 1, 3));
let dyn_record = Record::from_rdata(dyn_name, dyn_ttl, dyn_rdata);
authority.upsert(dyn_record, authority.serial());
catalog.upsert(
LowerName::new(&authority_name),
Box::new(Arc::new(RwLock::new(authority))),
pub async fn server() -> ServerFuture<Catalog> {
info!("Trust-DNS {} starting", trust_dns_server::version());
let mut dns_manager = DnsManager::new();
// first insert
dns_manager.upsert(
"test.dyn.peachcloud.org".to_string(),
Ipv4Addr::new(1, 1, 1, 1),
);
let mut server = ServerFuture::new(catalog);
// // second insert
// dns_manager.upsert(
// "test.dyn.peachcloud.org.".to_string(),
// Ipv4Addr::new(1, 1, 1, 3),
// );
//
// // third insert
// dns_manager.upsert(
// "peach.dyn.peachcloud.org.".to_string(),
// Ipv4Addr::new(1, 1, 2, 3),
// );
let ip_addr = IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0));
let listen_port: u16 = 12323;
let tcp_request_timeout = Duration::from_secs(DEFAULT_TCP_REQUEST_TIMEOUT);
let sock_addr = SocketAddr::new(ip_addr, listen_port);
let udp_socket = UdpSocket::bind(&sock_addr)
.await
.expect("could not bind udp socket");
let tcp_listener = TcpListener::bind(&sock_addr)
.await
.expect("could not bind tcp listener");
let mut server = ServerFuture::new(dns_manager.catalog);
// load all the listeners
info!("DNS server listening for UDP on {:?}", udp_socket);