Working on multiple insert
This commit is contained in:
parent
76dc806583
commit
8bd7e7b1b4
86
src/dns.rs
86
src/dns.rs
|
@ -13,27 +13,25 @@ use trust_dns_server::store::in_memory::InMemoryAuthority;
|
||||||
|
|
||||||
static DEFAULT_TCP_REQUEST_TIMEOUT: u64 = 5;
|
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));
|
struct DnsManager {
|
||||||
let listen_port: u16 = 12323;
|
catalog: Catalog,
|
||||||
let tcp_request_timeout = Duration::from_secs(DEFAULT_TCP_REQUEST_TIMEOUT);
|
}
|
||||||
|
|
||||||
let sock_addr = SocketAddr::new(ip_addr, listen_port);
|
impl DnsManager {
|
||||||
let udp_socket = UdpSocket::bind(&sock_addr)
|
pub fn new() -> DnsManager {
|
||||||
.await
|
|
||||||
.expect("could not bind udp socket");
|
let catalog: Catalog = Catalog::new();
|
||||||
let tcp_listener = TcpListener::bind(&sock_addr)
|
|
||||||
.await
|
return DnsManager {
|
||||||
.expect("could not bind tcp listener");
|
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 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_serial = 1;
|
||||||
let soa_name = Name::from_str("dyn.peach.cloud.").unwrap();
|
let soa_name = Name::from_str("dyn.peach.cloud.").unwrap();
|
||||||
|
@ -52,8 +50,12 @@ pub async fn server() -> ServerFuture<Catalog> {
|
||||||
LowerName::new(&authority_name),
|
LowerName::new(&authority_name),
|
||||||
soa_record_set.record_type(),
|
soa_record_set.record_type(),
|
||||||
);
|
);
|
||||||
|
let mut authority_records = BTreeMap::new();
|
||||||
authority_records.insert(soa_rr_key, soa_record_set);
|
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(
|
let mut authority = InMemoryAuthority::new(
|
||||||
authority_name.clone(),
|
authority_name.clone(),
|
||||||
authority_records,
|
authority_records,
|
||||||
|
@ -70,30 +72,56 @@ pub async fn server() -> ServerFuture<Catalog> {
|
||||||
authority.upsert(ns_record, authority.serial());
|
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_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);
|
let dyn_record = Record::from_rdata(dyn_name, dyn_ttl, dyn_rdata);
|
||||||
authority.upsert(dyn_record, authority.serial());
|
authority.upsert(dyn_record, authority.serial());
|
||||||
|
|
||||||
catalog.upsert(
|
self.catalog.upsert(
|
||||||
LowerName::new(&authority_name),
|
LowerName::new(&authority_name),
|
||||||
Box::new(Arc::new(RwLock::new(authority))),
|
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(
|
pub async fn server() -> ServerFuture<Catalog> {
|
||||||
LowerName::new(&authority_name),
|
info!("Trust-DNS {} starting", trust_dns_server::version());
|
||||||
Box::new(Arc::new(RwLock::new(authority))),
|
|
||||||
|
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
|
// load all the listeners
|
||||||
info!("DNS server listening for UDP on {:?}", udp_socket);
|
info!("DNS server listening for UDP on {:?}", udp_socket);
|
||||||
|
|
Loading…
Reference in New Issue