answer a query for test.dyn.peach.cloud!

This commit is contained in:
2019-04-19 14:55:17 +12:00
parent a20da0f699
commit ab2fed3599
3 changed files with 54 additions and 3 deletions

1
Cargo.lock generated
View File

@ -528,6 +528,7 @@ dependencies = [
"tokio 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)", "tokio 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio-udp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-udp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
"trust-dns 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)",
"trust-dns-server 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)", "trust-dns-server 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)",
] ]

View File

@ -13,4 +13,5 @@ serde = { version = "1.0.88", features = ["derive"] }
tokio = "0.1.15" tokio = "0.1.15"
tokio-tcp = "0.1" tokio-tcp = "0.1"
tokio-udp = "0.1" tokio-udp = "0.1"
trust-dns = "0.16"
trust-dns-server = "0.16" trust-dns-server = "0.16"

View File

@ -6,8 +6,11 @@ extern crate tokio_tcp;
extern crate trust_dns_server; extern crate trust_dns_server;
use std::io; use std::io;
use std::collections::BTreeMap;
use std::net::{IpAddr, Ipv4Addr, SocketAddr}; use std::net::{IpAddr, Ipv4Addr, SocketAddr};
use std::path::{Path, PathBuf}; use std::path::{Path, PathBuf};
use std::str::FromStr;
use std::sync::Arc;
use std::time::{Duration}; use std::time::{Duration};
use futures::{future, Future}; use futures::{future, Future};
@ -16,7 +19,8 @@ use tokio::runtime::TaskExecutor;
use tokio_tcp::TcpListener; use tokio_tcp::TcpListener;
use tokio_udp::UdpSocket; use tokio_udp::UdpSocket;
use trust_dns_server::proto::rr::Name; use trust_dns::rr::{LowerName, Name, Record, RecordSet, RecordType, RData, RrKey};
use trust_dns::rr::rdata::soa::SOA;
use trust_dns_server::authority::{AuthorityObject, Catalog, ZoneType}; use trust_dns_server::authority::{AuthorityObject, Catalog, ZoneType};
use trust_dns_server::config::{Config, ZoneConfig}; use trust_dns_server::config::{Config, ZoneConfig};
use trust_dns_server::logger; use trust_dns_server::logger;
@ -34,8 +38,6 @@ fn main() {
let mut io_loop = Runtime::new().expect("error when creating tokio Runtime"); let mut io_loop = Runtime::new().expect("error when creating tokio Runtime");
let executor = io_loop.executor(); let executor = io_loop.executor();
let mut catalog: Catalog = Catalog::new();
let ip_addr = IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)); let ip_addr = IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0));
let listen_port: u16 = 12323; let listen_port: u16 = 12323;
let tcp_request_timeout = Duration::from_secs(DEFAULT_TCP_REQUEST_TIMEOUT); let tcp_request_timeout = Duration::from_secs(DEFAULT_TCP_REQUEST_TIMEOUT);
@ -44,6 +46,53 @@ fn main() {
let udp_socket = UdpSocket::bind(&sock_addr).unwrap_or_else(|_| panic!("could not bind to udp: {}", sock_addr)); let udp_socket = UdpSocket::bind(&sock_addr).unwrap_or_else(|_| panic!("could not bind to udp: {}", sock_addr));
let tcp_listener = TcpListener::bind(&sock_addr).unwrap_or_else(|_| panic!("could not bind to tcp: {}", sock_addr)); let tcp_listener = TcpListener::bind(&sock_addr).unwrap_or_else(|_| panic!("could not bind to tcp: {}", sock_addr));
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 serial = 2;
let soa_name = Name::from_str("dyn.peach.cloud.").unwrap();
let soa_ttl = 60;
let soa_rdata = RData::SOA(SOA::new(
Name::from_str("dyn.peach.cloud.").unwrap(), // mname
Name::from_str("root.dyn.peach.cloud.").unwrap(), // rname
serial, // serial
604800, // refresh
86400, // retry
2419200, // expire
86400 // negtive cache ttl
));
let mut soa_record_set = RecordSet::new(&soa_name, RecordType::SOA, serial);
soa_record_set.add_rdata(soa_rdata);
let soa_rr_key = RrKey::new(LowerName::new(&authority_name), soa_record_set.record_type());
authority_records.insert(soa_rr_key, soa_record_set);
let mut authority = InMemoryAuthority::new(
authority_name.clone(),
authority_records,
authority_zone_type,
authority_allow_axfr
).unwrap();
/*
let ns_name = Name::from_str("dyn.peach.cloud.").unwrap();
let ns_ttl = 60;
let ns_rdata = RData::NS(Name::from_str("localhost.").unwrap());
let ns_record = Record::from_rdata(ns_name, ns_ttl, ns_rdata);
authority.upsert(ns_record, authority.serial());
*/
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, 1));
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(authority));
let mut server = ServerFuture::new(catalog); let mut server = ServerFuture::new(catalog);
let server_future: Box<Future<Item = (), Error = ()> + Send> = let server_future: Box<Future<Item = (), Error = ()> + Send> =