answer a query for test.dyn.peach.cloud!
This commit is contained in:
1
Cargo.lock
generated
1
Cargo.lock
generated
@ -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)",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -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"
|
||||||
|
55
src/main.rs
55
src/main.rs
@ -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> =
|
||||||
|
Reference in New Issue
Block a user