Cleaning up interfaces of the A and AAAA RData
This commit is contained in:
parent
42b7c0f08b
commit
3e4b50f98b
@ -3,6 +3,9 @@ All notable changes to this project will be documented in this file.
|
||||
This project adheres to [Semantic Versioning](http://semver.org/).
|
||||
|
||||
## unreleased
|
||||
### Added
|
||||
- Documentation on all modules
|
||||
|
||||
### Fixed
|
||||
- Added loop on TCP accept requests
|
||||
- Added loop on UDP reads
|
||||
|
@ -758,10 +758,10 @@ pub mod authority_tests {
|
||||
records.upsert(Record::new().name(origin.clone()).ttl(60).rr_type(RecordType::TXT).dns_class(DNSClass::IN).rdata(RData::TXT{ txt_data: vec!["$Id: example.com 4415 2015-08-24 20:12:23Z davids $".to_string()] }).clone(), 0);
|
||||
|
||||
// example.com. 86400 IN A 93.184.216.34
|
||||
records.upsert(Record::new().name(origin.clone()).ttl(86400).rr_type(RecordType::A).dns_class(DNSClass::IN).rdata(RData::A{ address: Ipv4Addr::new(93,184,216,34) }).clone(), 0);
|
||||
records.upsert(Record::new().name(origin.clone()).ttl(86400).rr_type(RecordType::A).dns_class(DNSClass::IN).rdata(RData::A(Ipv4Addr::new(93,184,216,34))).clone(), 0);
|
||||
|
||||
// example.com. 86400 IN AAAA 2606:2800:220:1:248:1893:25c8:1946
|
||||
records.upsert(Record::new().name(origin.clone()).ttl(86400).rr_type(RecordType::AAAA).dns_class(DNSClass::IN).rdata(RData::AAAA{ address: Ipv6Addr::new(0x2606,0x2800,0x220,0x1,0x248,0x1893,0x25c8,0x1946) }).clone(), 0);
|
||||
records.upsert(Record::new().name(origin.clone()).ttl(86400).rr_type(RecordType::AAAA).dns_class(DNSClass::IN).rdata(RData::AAAA(Ipv6Addr::new(0x2606,0x2800,0x220,0x1,0x248,0x1893,0x25c8,0x1946))).clone(), 0);
|
||||
|
||||
// TODO support these later...
|
||||
|
||||
@ -784,10 +784,10 @@ pub mod authority_tests {
|
||||
records.upsert(Record::new().name(www_name.clone()).ttl(86400).rr_type(RecordType::TXT).dns_class(DNSClass::IN).rdata(RData::TXT{ txt_data: vec!["v=spf1 -all".to_string()] }).clone(), 0);
|
||||
|
||||
// www.example.com. 86400 IN A 93.184.216.34
|
||||
records.upsert(Record::new().name(www_name.clone()).ttl(86400).rr_type(RecordType::A).dns_class(DNSClass::IN).rdata(RData::A{ address: Ipv4Addr::new(93,184,216,34) }).clone(), 0);
|
||||
records.upsert(Record::new().name(www_name.clone()).ttl(86400).rr_type(RecordType::A).dns_class(DNSClass::IN).rdata(RData::A(Ipv4Addr::new(93,184,216,34))).clone(), 0);
|
||||
|
||||
// www.example.com. 86400 IN AAAA 2606:2800:220:1:248:1893:25c8:1946
|
||||
records.upsert(Record::new().name(www_name.clone()).ttl(86400).rr_type(RecordType::AAAA).dns_class(DNSClass::IN).rdata(RData::AAAA{ address: Ipv6Addr::new(0x2606,0x2800,0x220,0x1,0x248,0x1893,0x25c8,0x1946) }).clone(), 0);
|
||||
records.upsert(Record::new().name(www_name.clone()).ttl(86400).rr_type(RecordType::AAAA).dns_class(DNSClass::IN).rdata(RData::AAAA(Ipv6Addr::new(0x2606,0x2800,0x220,0x1,0x248,0x1893,0x25c8,0x1946))).clone(), 0);
|
||||
|
||||
// www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20150925215757 20150905040848 54108 example.com. ZKIVt1IN3O1FWZPSfrQAH7nHt7RUFDjcbh7NxnEqd/uTGCnZ6SrAEgrY E9GMmBwvRjoucphGtjkYOpPJPe5MlnTHoYCjxL4qmG3LsD2KD0bfPufa ibtlQZRrPglxZ92hBKK3ZiPnPRe7I9yni2UQSQA7XDi7CQySYyo490It AxdXjAo=
|
||||
// www.example.com. 3600 IN NSEC example.com. A TXT AAAA RRSIG NSEC
|
||||
@ -820,7 +820,7 @@ pub mod authority_tests {
|
||||
|
||||
assert_eq!(**lookup.first().unwrap(), Record::new().name(authority.get_origin().clone()).ttl(60).rr_type(RecordType::TXT).dns_class(DNSClass::IN).rdata(RData::TXT{ txt_data: vec!["$Id: example.com 4415 2015-08-24 20:12:23Z davids $".to_string()] }).clone());
|
||||
|
||||
assert_eq!(**authority.lookup(authority.get_origin(), RecordType::A).unwrap().first().unwrap(), Record::new().name(authority.get_origin().clone()).ttl(86400).rr_type(RecordType::A).dns_class(DNSClass::IN).rdata(RData::A{ address: Ipv4Addr::new(93,184,216,34) }).clone());
|
||||
assert_eq!(**authority.lookup(authority.get_origin(), RecordType::A).unwrap().first().unwrap(), Record::new().name(authority.get_origin().clone()).ttl(86400).rr_type(RecordType::A).dns_class(DNSClass::IN).rdata(RData::A(Ipv4Addr::new(93,184,216,34))).clone());
|
||||
}
|
||||
|
||||
#[test]
|
||||
@ -866,13 +866,13 @@ pub mod authority_tests {
|
||||
assert_eq!(authority.verify_prerequisites(&[Record::new().name(authority.get_origin().clone()).ttl(0).dns_class(DNSClass::NONE).rr_type(RecordType::A).rdata(RData::NULL(NULL::new())).clone()]), Err(ResponseCode::YXRRSet));
|
||||
|
||||
// * zone rrset rr RRset exists (value dependent)
|
||||
assert!(authority.verify_prerequisites(&[Record::new().name(authority.get_origin().clone()).ttl(0).dns_class(DNSClass::IN).rr_type(RecordType::A).rdata(RData::A{ address: Ipv4Addr::new(93,184,216,34) }).clone()]).is_ok());
|
||||
assert!(authority.verify_prerequisites(&[Record::new().name(authority.get_origin().clone()).ttl(0).dns_class(DNSClass::IN).rr_type(RecordType::A).rdata(RData::A(Ipv4Addr::new(93,184,216,34))).clone()]).is_ok());
|
||||
// wrong class
|
||||
assert_eq!(authority.verify_prerequisites(&[Record::new().name(authority.get_origin().clone()).ttl(0).dns_class(DNSClass::CH).rr_type(RecordType::A).rdata(RData::A{ address: Ipv4Addr::new(93,184,216,34) }).clone()]), Err(ResponseCode::FormErr));
|
||||
assert_eq!(authority.verify_prerequisites(&[Record::new().name(authority.get_origin().clone()).ttl(0).dns_class(DNSClass::CH).rr_type(RecordType::A).rdata(RData::A(Ipv4Addr::new(93,184,216,34))).clone()]), Err(ResponseCode::FormErr));
|
||||
// wrong Name
|
||||
assert_eq!(authority.verify_prerequisites(&[Record::new().name(not_in_zone.clone()).ttl(0).dns_class(DNSClass::IN).rr_type(RecordType::A).rdata(RData::A{ address: Ipv4Addr::new(93,184,216,24) }).clone()]), Err(ResponseCode::NXRRSet));
|
||||
assert_eq!(authority.verify_prerequisites(&[Record::new().name(not_in_zone.clone()).ttl(0).dns_class(DNSClass::IN).rr_type(RecordType::A).rdata(RData::A(Ipv4Addr::new(93,184,216,24))).clone()]), Err(ResponseCode::NXRRSet));
|
||||
// wrong IP
|
||||
assert_eq!(authority.verify_prerequisites(&[Record::new().name(authority.get_origin().clone()).ttl(0).dns_class(DNSClass::IN).rr_type(RecordType::A).rdata(RData::A{ address: Ipv4Addr::new(93,184,216,24) }).clone()]), Err(ResponseCode::NXRRSet));
|
||||
assert_eq!(authority.verify_prerequisites(&[Record::new().name(authority.get_origin().clone()).ttl(0).dns_class(DNSClass::IN).rr_type(RecordType::A).rdata(RData::A(Ipv4Addr::new(93,184,216,24))).clone()]), Err(ResponseCode::NXRRSet));
|
||||
}
|
||||
|
||||
#[test]
|
||||
@ -882,16 +882,16 @@ pub mod authority_tests {
|
||||
|
||||
let authority: Authority = create_example();
|
||||
|
||||
assert_eq!(authority.pre_scan(&[Record::new().name(not_zone.clone()).ttl(86400).rr_type(RecordType::A).dns_class(DNSClass::IN).rdata(RData::A{ address: Ipv4Addr::new(93,184,216,24) }).clone()]), Err(ResponseCode::NotZone));
|
||||
assert_eq!(authority.pre_scan(&[Record::new().name(not_zone.clone()).ttl(86400).rr_type(RecordType::A).dns_class(DNSClass::IN).rdata(RData::A(Ipv4Addr::new(93,184,216,24))).clone()]), Err(ResponseCode::NotZone));
|
||||
|
||||
assert_eq!(authority.pre_scan(&[Record::new().name(up_name.clone()).ttl(86400).rr_type(RecordType::ANY).dns_class(DNSClass::IN).rdata(RData::NULL(NULL::new()) ).clone()]), Err(ResponseCode::FormErr));
|
||||
assert_eq!(authority.pre_scan(&[Record::new().name(up_name.clone()).ttl(86400).rr_type(RecordType::AXFR).dns_class(DNSClass::IN).rdata(RData::NULL(NULL::new()) ).clone()]), Err(ResponseCode::FormErr));
|
||||
assert_eq!(authority.pre_scan(&[Record::new().name(up_name.clone()).ttl(86400).rr_type(RecordType::IXFR).dns_class(DNSClass::IN).rdata(RData::NULL(NULL::new()) ).clone()]), Err(ResponseCode::FormErr));
|
||||
assert!(authority.pre_scan(&[Record::new().name(up_name.clone()).ttl(86400).rr_type(RecordType::A).dns_class(DNSClass::IN).rdata(RData::A{ address: Ipv4Addr::new(93,184,216,24) }).clone()]).is_ok());
|
||||
assert!(authority.pre_scan(&[Record::new().name(up_name.clone()).ttl(86400).rr_type(RecordType::A).dns_class(DNSClass::IN).rdata(RData::A(Ipv4Addr::new(93,184,216,24))).clone()]).is_ok());
|
||||
assert!(authority.pre_scan(&[Record::new().name(up_name.clone()).ttl(86400).rr_type(RecordType::A).dns_class(DNSClass::IN).rdata(RData::NULL(NULL::new())).clone()]).is_ok());
|
||||
|
||||
assert_eq!(authority.pre_scan(&[Record::new().name(up_name.clone()).ttl(86400).rr_type(RecordType::A).dns_class(DNSClass::ANY).rdata(RData::A{ address: Ipv4Addr::new(93,184,216,24) }).clone()]), Err(ResponseCode::FormErr));
|
||||
assert_eq!(authority.pre_scan(&[Record::new().name(up_name.clone()).ttl(0).rr_type(RecordType::A).dns_class(DNSClass::ANY).rdata(RData::A{ address: Ipv4Addr::new(93,184,216,24) }).clone()]), Err(ResponseCode::FormErr));
|
||||
assert_eq!(authority.pre_scan(&[Record::new().name(up_name.clone()).ttl(86400).rr_type(RecordType::A).dns_class(DNSClass::ANY).rdata(RData::A(Ipv4Addr::new(93,184,216,24))).clone()]), Err(ResponseCode::FormErr));
|
||||
assert_eq!(authority.pre_scan(&[Record::new().name(up_name.clone()).ttl(0).rr_type(RecordType::A).dns_class(DNSClass::ANY).rdata(RData::A(Ipv4Addr::new(93,184,216,24))).clone()]), Err(ResponseCode::FormErr));
|
||||
assert_eq!(authority.pre_scan(&[Record::new().name(up_name.clone()).ttl(0).rr_type(RecordType::AXFR).dns_class(DNSClass::ANY).rdata(RData::NULL(NULL::new())).clone()]), Err(ResponseCode::FormErr));
|
||||
assert_eq!(authority.pre_scan(&[Record::new().name(up_name.clone()).ttl(0).rr_type(RecordType::IXFR).dns_class(DNSClass::ANY).rdata(RData::NULL(NULL::new())).clone()]), Err(ResponseCode::FormErr));
|
||||
assert!(authority.pre_scan(&[Record::new().name(up_name.clone()).ttl(0).rr_type(RecordType::ANY).dns_class(DNSClass::ANY).rdata(RData::NULL(NULL::new())).clone()]).is_ok());
|
||||
@ -902,7 +902,7 @@ pub mod authority_tests {
|
||||
assert_eq!(authority.pre_scan(&[Record::new().name(up_name.clone()).ttl(0).rr_type(RecordType::AXFR).dns_class(DNSClass::NONE).rdata(RData::NULL(NULL::new())).clone()]), Err(ResponseCode::FormErr));
|
||||
assert_eq!(authority.pre_scan(&[Record::new().name(up_name.clone()).ttl(0).rr_type(RecordType::IXFR).dns_class(DNSClass::NONE).rdata(RData::NULL(NULL::new())).clone()]), Err(ResponseCode::FormErr));
|
||||
assert!(authority.pre_scan(&[Record::new().name(up_name.clone()).ttl(0).rr_type(RecordType::A).dns_class(DNSClass::NONE).rdata(RData::NULL(NULL::new())).clone()]).is_ok());
|
||||
assert!(authority.pre_scan(&[Record::new().name(up_name.clone()).ttl(0).rr_type(RecordType::A).dns_class(DNSClass::NONE).rdata(RData::A{ address: Ipv4Addr::new(93,184,216,24) }).clone()]).is_ok());
|
||||
assert!(authority.pre_scan(&[Record::new().name(up_name.clone()).ttl(0).rr_type(RecordType::A).dns_class(DNSClass::NONE).rdata(RData::A(Ipv4Addr::new(93,184,216,24))).clone()]).is_ok());
|
||||
|
||||
assert_eq!(authority.pre_scan(&[Record::new().name(up_name.clone()).ttl(86400).rr_type(RecordType::A).dns_class(DNSClass::CH).rdata(RData::NULL(NULL::new())).clone()]), Err(ResponseCode::FormErr));
|
||||
}
|
||||
@ -916,8 +916,8 @@ pub mod authority_tests {
|
||||
|
||||
let mut original_vec: Vec<Record> = vec![
|
||||
Record::new().name(www_name.clone()).ttl(86400).rr_type(RecordType::TXT).dns_class(DNSClass::IN).rdata(RData::TXT{ txt_data: vec!["v=spf1 -all".to_string()] }).clone(),
|
||||
Record::new().name(www_name.clone()).ttl(86400).rr_type(RecordType::A).dns_class(DNSClass::IN).rdata(RData::A{ address: Ipv4Addr::new(93,184,216,34) }).clone(),
|
||||
Record::new().name(www_name.clone()).ttl(86400).rr_type(RecordType::AAAA).dns_class(DNSClass::IN).rdata(RData::AAAA{ address: Ipv6Addr::new(0x2606,0x2800,0x220,0x1,0x248,0x1893,0x25c8,0x1946) }).clone(),
|
||||
Record::new().name(www_name.clone()).ttl(86400).rr_type(RecordType::A).dns_class(DNSClass::IN).rdata(RData::A(Ipv4Addr::new(93,184,216,34))).clone(),
|
||||
Record::new().name(www_name.clone()).ttl(86400).rr_type(RecordType::AAAA).dns_class(DNSClass::IN).rdata(RData::AAAA(Ipv6Addr::new(0x2606,0x2800,0x220,0x1,0x248,0x1893,0x25c8,0x1946))).clone(),
|
||||
];
|
||||
|
||||
original_vec.sort();
|
||||
@ -935,11 +935,11 @@ pub mod authority_tests {
|
||||
|
||||
//
|
||||
// zone rrset rr Add to an RRset
|
||||
let add_record = &[Record::new().name(new_name.clone()).ttl(86400).rr_type(RecordType::A).dns_class(DNSClass::IN).rdata(RData::A{ address: Ipv4Addr::new(93,184,216,24) }).clone()];
|
||||
let add_record = &[Record::new().name(new_name.clone()).ttl(86400).rr_type(RecordType::A).dns_class(DNSClass::IN).rdata(RData::A(Ipv4Addr::new(93,184,216,24))).clone()];
|
||||
assert!(authority.update_records(add_record, 0).is_ok());
|
||||
assert_eq!(authority.lookup(&new_name, RecordType::ANY).unwrap_or(vec![]), add_record.iter().collect::<Vec<&Record>>());
|
||||
|
||||
let add_www_record = &[Record::new().name(www_name.clone()).ttl(86400).rr_type(RecordType::A).dns_class(DNSClass::IN).rdata(RData::A{ address: Ipv4Addr::new(10,0,0,1) }).clone()];
|
||||
let add_www_record = &[Record::new().name(www_name.clone()).ttl(86400).rr_type(RecordType::A).dns_class(DNSClass::IN).rdata(RData::A(Ipv4Addr::new(10,0,0,1))).clone()];
|
||||
assert!(authority.update_records(add_www_record, 0).is_ok());
|
||||
|
||||
{
|
||||
@ -954,7 +954,7 @@ pub mod authority_tests {
|
||||
|
||||
//
|
||||
// NONE rrset rr Delete an RR from an RRset
|
||||
let del_record = &[Record::new().name(new_name.clone()).ttl(86400).rr_type(RecordType::A).dns_class(DNSClass::NONE).rdata(RData::A{ address: Ipv4Addr::new(93,184,216,24) }).clone()];
|
||||
let del_record = &[Record::new().name(new_name.clone()).ttl(86400).rr_type(RecordType::A).dns_class(DNSClass::NONE).rdata(RData::A(Ipv4Addr::new(93,184,216,24))).clone()];
|
||||
assert!(authority.update_records(del_record, 0).is_ok());
|
||||
{
|
||||
println!("after delete of specific record: {:?}", authority.lookup(&new_name, RecordType::ANY));
|
||||
@ -962,7 +962,7 @@ pub mod authority_tests {
|
||||
}
|
||||
|
||||
// remove one from www
|
||||
let del_record = &[Record::new().name(www_name.clone()).ttl(86400).rr_type(RecordType::A).dns_class(DNSClass::NONE).rdata(RData::A{ address: Ipv4Addr::new(10,0,0,1) }).clone()];
|
||||
let del_record = &[Record::new().name(www_name.clone()).ttl(86400).rr_type(RecordType::A).dns_class(DNSClass::NONE).rdata(RData::A(Ipv4Addr::new(10,0,0,1))).clone()];
|
||||
assert!(authority.update_records(del_record, 0).is_ok());
|
||||
{
|
||||
let mut www_rrset = authority.lookup(&www_name, RecordType::ANY).unwrap_or(vec![]);
|
||||
@ -977,7 +977,7 @@ pub mod authority_tests {
|
||||
assert!(authority.update_records(del_record, 0).is_ok());
|
||||
let mut removed_a_vec: Vec<_> = vec![
|
||||
Record::new().name(www_name.clone()).ttl(86400).rr_type(RecordType::TXT).dns_class(DNSClass::IN).rdata(RData::TXT{ txt_data: vec!["v=spf1 -all".to_string()] }).clone(),
|
||||
Record::new().name(www_name.clone()).ttl(86400).rr_type(RecordType::AAAA).dns_class(DNSClass::IN).rdata(RData::AAAA{ address: Ipv6Addr::new(0x2606,0x2800,0x220,0x1,0x248,0x1893,0x25c8,0x1946) }).clone(),
|
||||
Record::new().name(www_name.clone()).ttl(86400).rr_type(RecordType::AAAA).dns_class(DNSClass::IN).rdata(RData::AAAA(Ipv6Addr::new(0x2606,0x2800,0x220,0x1,0x248,0x1893,0x25c8,0x1946))).clone(),
|
||||
];
|
||||
removed_a_vec.sort();
|
||||
|
||||
|
@ -319,7 +319,7 @@ mod catalog_tests {
|
||||
if let Some(result) = Catalog::search(&example, &query) {
|
||||
assert_eq!(result.first().unwrap().get_rr_type(), RecordType::A);
|
||||
assert_eq!(result.first().unwrap().get_dns_class(), DNSClass::IN);
|
||||
assert_eq!(result.first().unwrap().get_rdata(), &RData::A{ address: Ipv4Addr::new(93,184,216,34) });
|
||||
assert_eq!(result.first().unwrap().get_rdata(), &RData::A(Ipv4Addr::new(93,184,216,34)));
|
||||
} else {
|
||||
panic!("expected a result");
|
||||
}
|
||||
@ -337,7 +337,7 @@ mod catalog_tests {
|
||||
if let Some(result) = Catalog::search(&example, &query) {
|
||||
assert_eq!(result.first().unwrap().get_rr_type(), RecordType::A);
|
||||
assert_eq!(result.first().unwrap().get_dns_class(), DNSClass::IN);
|
||||
assert_eq!(result.first().unwrap().get_rdata(), &RData::A{ address: Ipv4Addr::new(93,184,216,34) });
|
||||
assert_eq!(result.first().unwrap().get_rdata(), &RData::A(Ipv4Addr::new(93,184,216,34)));
|
||||
} else {
|
||||
panic!("expected a result");
|
||||
}
|
||||
@ -351,12 +351,12 @@ mod catalog_tests {
|
||||
records.upsert(Record::new().name(origin.clone()).ttl(86400).rr_type(RecordType::NS).dns_class(DNSClass::IN).rdata(RData::NS(Name::parse("a.iana-servers.net.", None).unwrap()) ).clone(), 0);
|
||||
records.upsert(Record::new().name(origin.clone()).ttl(86400).rr_type(RecordType::NS).dns_class(DNSClass::IN).rdata(RData::NS(Name::parse("b.iana-servers.net.", None).unwrap()) ).clone(), 0);
|
||||
|
||||
records.upsert(Record::new().name(origin.clone()).ttl(86400).rr_type(RecordType::A).dns_class(DNSClass::IN).rdata(RData::A{ address: Ipv4Addr::new(94,184,216,34) }).clone(), 0);
|
||||
records.upsert(Record::new().name(origin.clone()).ttl(86400).rr_type(RecordType::AAAA).dns_class(DNSClass::IN).rdata(RData::AAAA{ address: Ipv6Addr::new(0x2606,0x2800,0x220,0x1,0x248,0x1893,0x25c8,0x1946) }).clone(), 0);
|
||||
records.upsert(Record::new().name(origin.clone()).ttl(86400).rr_type(RecordType::A).dns_class(DNSClass::IN).rdata(RData::A(Ipv4Addr::new(94,184,216,34))).clone(), 0);
|
||||
records.upsert(Record::new().name(origin.clone()).ttl(86400).rr_type(RecordType::AAAA).dns_class(DNSClass::IN).rdata(RData::AAAA(Ipv6Addr::new(0x2606,0x2800,0x220,0x1,0x248,0x1893,0x25c8,0x1946))).clone(), 0);
|
||||
|
||||
let www_name: Name = Name::parse("www.test.com.", None).unwrap();
|
||||
records.upsert(Record::new().name(www_name.clone()).ttl(86400).rr_type(RecordType::A).dns_class(DNSClass::IN).rdata(RData::A{ address: Ipv4Addr::new(94,184,216,34) }).clone(), 0);
|
||||
records.upsert(Record::new().name(www_name.clone()).ttl(86400).rr_type(RecordType::AAAA).dns_class(DNSClass::IN).rdata(RData::AAAA{ address: Ipv6Addr::new(0x2606,0x2800,0x220,0x1,0x248,0x1893,0x25c8,0x1946) }).clone(), 0);
|
||||
records.upsert(Record::new().name(www_name.clone()).ttl(86400).rr_type(RecordType::A).dns_class(DNSClass::IN).rdata(RData::A(Ipv4Addr::new(94,184,216,34))).clone(), 0);
|
||||
records.upsert(Record::new().name(www_name.clone()).ttl(86400).rr_type(RecordType::AAAA).dns_class(DNSClass::IN).rdata(RData::AAAA(Ipv6Addr::new(0x2606,0x2800,0x220,0x1,0x248,0x1893,0x25c8,0x1946))).clone(), 0);
|
||||
|
||||
records
|
||||
}
|
||||
@ -388,7 +388,7 @@ mod catalog_tests {
|
||||
|
||||
assert!(!answers.is_empty());
|
||||
assert_eq!(answers.first().unwrap().get_rr_type(), RecordType::A);
|
||||
assert_eq!(answers.first().unwrap().get_rdata(), &RData::A{ address: Ipv4Addr::new(93,184,216,34) });
|
||||
assert_eq!(answers.first().unwrap().get_rdata(), &RData::A(Ipv4Addr::new(93,184,216,34)));
|
||||
|
||||
let mut ns: Vec<Record> = result.get_name_servers().to_vec();
|
||||
ns.sort();
|
||||
@ -414,7 +414,7 @@ mod catalog_tests {
|
||||
|
||||
assert!(!answers.is_empty());
|
||||
assert_eq!(answers.first().unwrap().get_rr_type(), RecordType::A);
|
||||
assert_eq!(answers.first().unwrap().get_rdata(), &RData::A{ address: Ipv4Addr::new(93,184,216,34) });
|
||||
assert_eq!(answers.first().unwrap().get_rdata(), &RData::A(Ipv4Addr::new(93,184,216,34)));
|
||||
}
|
||||
|
||||
#[test]
|
||||
@ -473,10 +473,10 @@ mod catalog_tests {
|
||||
Record::new().name(origin.clone()).ttl(3600).rr_type(RecordType::SOA).dns_class(DNSClass::IN).rdata(RData::SOA(SOA::new(Name::parse("sns.dns.icann.org.", None).unwrap(), Name::parse("noc.dns.icann.org.", None).unwrap(), 2015082403, 7200, 3600, 1209600, 3600 ))).clone(),
|
||||
Record::new().name(origin.clone()).ttl(86400).rr_type(RecordType::NS).dns_class(DNSClass::IN).rdata(RData::NS(Name::parse("a.iana-servers.net.", None).unwrap()) ).clone(),
|
||||
Record::new().name(origin.clone()).ttl(86400).rr_type(RecordType::NS).dns_class(DNSClass::IN).rdata(RData::NS(Name::parse("b.iana-servers.net.", None).unwrap()) ).clone(),
|
||||
Record::new().name(origin.clone()).ttl(86400).rr_type(RecordType::A).dns_class(DNSClass::IN).rdata(RData::A{ address: Ipv4Addr::new(94,184,216,34) }).clone(),
|
||||
Record::new().name(origin.clone()).ttl(86400).rr_type(RecordType::AAAA).dns_class(DNSClass::IN).rdata(RData::AAAA{ address: Ipv6Addr::new(0x2606,0x2800,0x220,0x1,0x248,0x1893,0x25c8,0x1946) }).clone(),
|
||||
Record::new().name(www_name.clone()).ttl(86400).rr_type(RecordType::A).dns_class(DNSClass::IN).rdata(RData::A{ address: Ipv4Addr::new(94,184,216,34) }).clone(),
|
||||
Record::new().name(www_name.clone()).ttl(86400).rr_type(RecordType::AAAA).dns_class(DNSClass::IN).rdata(RData::AAAA{ address: Ipv6Addr::new(0x2606,0x2800,0x220,0x1,0x248,0x1893,0x25c8,0x1946) }).clone(),
|
||||
Record::new().name(origin.clone()).ttl(86400).rr_type(RecordType::A).dns_class(DNSClass::IN).rdata(RData::A(Ipv4Addr::new(94,184,216,34))).clone(),
|
||||
Record::new().name(origin.clone()).ttl(86400).rr_type(RecordType::AAAA).dns_class(DNSClass::IN).rdata(RData::AAAA(Ipv6Addr::new(0x2606,0x2800,0x220,0x1,0x248,0x1893,0x25c8,0x1946))).clone(),
|
||||
Record::new().name(www_name.clone()).ttl(86400).rr_type(RecordType::A).dns_class(DNSClass::IN).rdata(RData::A(Ipv4Addr::new(94,184,216,34))).clone(),
|
||||
Record::new().name(www_name.clone()).ttl(86400).rr_type(RecordType::AAAA).dns_class(DNSClass::IN).rdata(RData::AAAA(Ipv6Addr::new(0x2606,0x2800,0x220,0x1,0x248,0x1893,0x25c8,0x1946))).clone(),
|
||||
Record::new().name(origin.clone()).ttl(3600).rr_type(RecordType::SOA).dns_class(DNSClass::IN).rdata(RData::SOA(SOA::new(Name::parse("sns.dns.icann.org.", None).unwrap(), Name::parse("noc.dns.icann.org.", None).unwrap(), 2015082403, 7200, 3600, 1209600, 3600 ))).clone(),
|
||||
];
|
||||
|
||||
|
@ -271,7 +271,7 @@ mod test {
|
||||
let record_type = RecordType::A;
|
||||
let mut rr_set = RRSet::new(&name, record_type, 0);
|
||||
|
||||
let insert = Record::new().name(name.clone()).ttl(86400).rr_type(record_type).dns_class(DNSClass::IN).rdata(RData::A{ address: Ipv4Addr::new(93,184,216,24) }).clone();
|
||||
let insert = Record::new().name(name.clone()).ttl(86400).rr_type(record_type).dns_class(DNSClass::IN).rdata(RData::A(Ipv4Addr::new(93,184,216,24))).clone();
|
||||
|
||||
assert!(rr_set.insert(insert.clone(), 0));
|
||||
assert_eq!(rr_set.get_records().len(), 1);
|
||||
@ -283,7 +283,7 @@ mod test {
|
||||
assert!(rr_set.get_records().contains(&insert));
|
||||
|
||||
// add one
|
||||
let insert1 = Record::new().name(name.clone()).ttl(86400).rr_type(record_type).dns_class(DNSClass::IN).rdata(RData::A{ address: Ipv4Addr::new(93,184,216,25) }).clone();
|
||||
let insert1 = Record::new().name(name.clone()).ttl(86400).rr_type(record_type).dns_class(DNSClass::IN).rdata(RData::A(Ipv4Addr::new(93,184,216,25))).clone();
|
||||
assert!(rr_set.insert(insert1.clone(), 0));
|
||||
assert_eq!(rr_set.get_records().len(), 2);
|
||||
assert!(rr_set.get_records().contains(&insert));
|
||||
@ -343,8 +343,8 @@ mod test {
|
||||
let record_type = RecordType::A;
|
||||
let mut rr_set = RRSet::new(&name, record_type, 0);
|
||||
|
||||
let insert = Record::new().name(name.clone()).ttl(86400).rr_type(record_type).dns_class(DNSClass::IN).rdata(RData::A{ address: Ipv4Addr::new(93,184,216,24) }).clone();
|
||||
let insert1 = Record::new().name(name.clone()).ttl(86400).rr_type(record_type).dns_class(DNSClass::IN).rdata(RData::A{ address: Ipv4Addr::new(93,184,216,25) }).clone();
|
||||
let insert = Record::new().name(name.clone()).ttl(86400).rr_type(record_type).dns_class(DNSClass::IN).rdata(RData::A(Ipv4Addr::new(93,184,216,24))).clone();
|
||||
let insert1 = Record::new().name(name.clone()).ttl(86400).rr_type(record_type).dns_class(DNSClass::IN).rdata(RData::A(Ipv4Addr::new(93,184,216,25))).clone();
|
||||
|
||||
assert!(rr_set.insert(insert.clone(), 0));
|
||||
assert!(rr_set.insert(insert1.clone(), 0));
|
||||
|
@ -576,7 +576,7 @@ mod test {
|
||||
assert_eq!(record.get_rr_type(), RecordType::A);
|
||||
assert_eq!(record.get_dns_class(), DNSClass::IN);
|
||||
|
||||
if let &RData::A{ ref address } = record.get_rdata() {
|
||||
if let &RData::A(ref address) = record.get_rdata() {
|
||||
assert_eq!(address, &Ipv4Addr::new(93,184,216,34))
|
||||
} else {
|
||||
assert!(false);
|
||||
@ -617,7 +617,7 @@ mod test {
|
||||
assert_eq!(record.get_rr_type(), RecordType::A);
|
||||
assert_eq!(record.get_dns_class(), DNSClass::IN);
|
||||
|
||||
if let &RData::A{ ref address } = record.get_rdata() {
|
||||
if let &RData::A(ref address) = record.get_rdata() {
|
||||
assert_eq!(address, &Ipv4Addr::new(93,184,216,34))
|
||||
} else {
|
||||
assert!(false);
|
||||
|
@ -534,8 +534,8 @@ impl Signer {
|
||||
|
||||
#[test]
|
||||
fn test_hash_rrset() {
|
||||
use ::rr::RecordType;
|
||||
use ::rr::rdata::{Name, SIG};
|
||||
use ::rr::{Name, RecordType};
|
||||
use ::rr::rdata::SIG;
|
||||
|
||||
let mut pkey = PKey::new();
|
||||
pkey.gen(512);
|
||||
@ -564,7 +564,8 @@ fn test_hash_rrset() {
|
||||
#[test]
|
||||
fn test_sign_and_verify_rrset() {
|
||||
use ::rr::RecordType;
|
||||
use ::rr::rdata::{Name, SIG};
|
||||
use ::rr::Name;
|
||||
use ::rr::rdata::SIG;
|
||||
|
||||
let mut pkey = PKey::new();
|
||||
pkey.gen(512);
|
||||
|
@ -18,7 +18,6 @@ use std::net::Ipv4Addr;
|
||||
use ::serialize::txt::*;
|
||||
use ::serialize::binary::*;
|
||||
use ::error::*;
|
||||
use ::rr::record_data::RData;
|
||||
|
||||
// 3.4. Internet specific RRs
|
||||
//
|
||||
@ -41,34 +40,30 @@ use ::rr::record_data::RData;
|
||||
// "10.2.0.52" or "192.0.5.6").
|
||||
//
|
||||
// A { address: Ipv4Addr }
|
||||
pub fn read(decoder: &mut BinDecoder) -> DecodeResult<RData> {
|
||||
Ok(RData::A{ address: Ipv4Addr::new(
|
||||
pub fn read(decoder: &mut BinDecoder) -> DecodeResult<Ipv4Addr> {
|
||||
Ok(Ipv4Addr::new(
|
||||
try!(decoder.pop()),
|
||||
try!(decoder.pop()),
|
||||
try!(decoder.pop()),
|
||||
try!(decoder.pop()))
|
||||
})
|
||||
)
|
||||
}
|
||||
|
||||
pub fn emit(encoder: &mut BinEncoder, a: &RData) -> EncodeResult {
|
||||
if let RData::A { address } = *a {
|
||||
let segments = address.octets();
|
||||
pub fn emit(encoder: &mut BinEncoder, address: &Ipv4Addr) -> EncodeResult {
|
||||
let segments = address.octets();
|
||||
|
||||
try!(encoder.emit(segments[0]));
|
||||
try!(encoder.emit(segments[1]));
|
||||
try!(encoder.emit(segments[2]));
|
||||
try!(encoder.emit(segments[3]));
|
||||
Ok(())
|
||||
} else {
|
||||
panic!("wrong type here {:?}", a)
|
||||
}
|
||||
try!(encoder.emit(segments[0]));
|
||||
try!(encoder.emit(segments[1]));
|
||||
try!(encoder.emit(segments[2]));
|
||||
try!(encoder.emit(segments[3]));
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn parse(tokens: &Vec<Token>) -> ParseResult<RData> {
|
||||
pub fn parse(tokens: &Vec<Token>) -> ParseResult<Ipv4Addr> {
|
||||
let mut token = tokens.iter();
|
||||
|
||||
let address: Ipv4Addr = try!(token.next().ok_or(ParseError::MissingToken("ipv4 address".to_string())).and_then(|t| if let &Token::CharData(ref s) = t {Ok(try!(s.parse()))} else {Err(ParseError::UnexpectedToken(t.clone()))} ));
|
||||
Ok(RData::A{ address: address })
|
||||
Ok(address)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
@ -77,18 +72,17 @@ mod mytests {
|
||||
use std::str::FromStr;
|
||||
|
||||
use super::*;
|
||||
use ::rr::record_data::RData;
|
||||
use ::serialize::binary::bin_tests::{test_read_data_set, test_emit_data_set};
|
||||
|
||||
fn get_data() -> Vec<(RData, Vec<u8>)> {
|
||||
fn get_data() -> Vec<(Ipv4Addr, Vec<u8>)> {
|
||||
vec![
|
||||
(RData::A{ address: Ipv4Addr::from_str("0.0.0.0").unwrap()}, vec![0,0,0,0]), // base case
|
||||
(RData::A{ address: Ipv4Addr::from_str("1.0.0.0").unwrap()}, vec![1,0,0,0]),
|
||||
(RData::A{ address: Ipv4Addr::from_str("0.1.0.0").unwrap()}, vec![0,1,0,0]),
|
||||
(RData::A{ address: Ipv4Addr::from_str("0.0.1.0").unwrap()}, vec![0,0,1,0]),
|
||||
(RData::A{ address: Ipv4Addr::from_str("0.0.0.1").unwrap()}, vec![0,0,0,1]),
|
||||
(RData::A{ address: Ipv4Addr::from_str("127.0.0.1").unwrap()}, vec![127,0,0,1]),
|
||||
(RData::A{ address: Ipv4Addr::from_str("192.168.64.32").unwrap()}, vec![192,168,64,32]),
|
||||
(Ipv4Addr::from_str("0.0.0.0").unwrap(), vec![0,0,0,0]), // base case
|
||||
(Ipv4Addr::from_str("1.0.0.0").unwrap(), vec![1,0,0,0]),
|
||||
(Ipv4Addr::from_str("0.1.0.0").unwrap(), vec![0,1,0,0]),
|
||||
(Ipv4Addr::from_str("0.0.1.0").unwrap(), vec![0,0,1,0]),
|
||||
(Ipv4Addr::from_str("0.0.0.1").unwrap(), vec![0,0,0,1]),
|
||||
(Ipv4Addr::from_str("127.0.0.1").unwrap(), vec![127,0,0,1]),
|
||||
(Ipv4Addr::from_str("192.168.64.32").unwrap(), vec![192,168,64,32]),
|
||||
]
|
||||
}
|
||||
|
||||
|
@ -19,7 +19,6 @@ use std::net::Ipv6Addr;
|
||||
use ::serialize::txt::*;
|
||||
use ::serialize::binary::*;
|
||||
use ::error::*;
|
||||
use ::rr::record_data::RData;
|
||||
|
||||
//-- RFC 1886 -- IPv6 DNS Extensions December 1995
|
||||
|
||||
@ -29,7 +28,7 @@ use ::rr::record_data::RData;
|
||||
// resource record in network byte order (high-order byte first).
|
||||
//
|
||||
// AAAA { address: Ipv6Addr }
|
||||
pub fn read(decoder: &mut BinDecoder) -> DecodeResult<RData> {
|
||||
pub fn read(decoder: &mut BinDecoder) -> DecodeResult<Ipv6Addr> {
|
||||
let a: u16 = try!(decoder.read_u16());
|
||||
let b: u16 = try!(decoder.read_u16());
|
||||
let c: u16 = try!(decoder.read_u16());
|
||||
@ -39,32 +38,28 @@ pub fn read(decoder: &mut BinDecoder) -> DecodeResult<RData> {
|
||||
let g: u16 = try!(decoder.read_u16());
|
||||
let h: u16 = try!(decoder.read_u16());
|
||||
|
||||
Ok(RData::AAAA{ address: Ipv6Addr::new(a,b,c,d,e,f,g,h)})
|
||||
Ok(Ipv6Addr::new(a,b,c,d,e,f,g,h))
|
||||
}
|
||||
|
||||
pub fn emit(encoder: &mut BinEncoder, aaaa: &RData) -> EncodeResult {
|
||||
if let RData::AAAA { address } = *aaaa {
|
||||
let segments = address.segments();
|
||||
pub fn emit(encoder: &mut BinEncoder, address: &Ipv6Addr) -> EncodeResult {
|
||||
let segments = address.segments();
|
||||
|
||||
try!(encoder.emit_u16(segments[0]));
|
||||
try!(encoder.emit_u16(segments[1]));
|
||||
try!(encoder.emit_u16(segments[2]));
|
||||
try!(encoder.emit_u16(segments[3]));
|
||||
try!(encoder.emit_u16(segments[4]));
|
||||
try!(encoder.emit_u16(segments[5]));
|
||||
try!(encoder.emit_u16(segments[6]));
|
||||
try!(encoder.emit_u16(segments[7]));
|
||||
Ok(())
|
||||
} else {
|
||||
panic!("wrong type here {:?}", aaaa)
|
||||
}
|
||||
try!(encoder.emit_u16(segments[0]));
|
||||
try!(encoder.emit_u16(segments[1]));
|
||||
try!(encoder.emit_u16(segments[2]));
|
||||
try!(encoder.emit_u16(segments[3]));
|
||||
try!(encoder.emit_u16(segments[4]));
|
||||
try!(encoder.emit_u16(segments[5]));
|
||||
try!(encoder.emit_u16(segments[6]));
|
||||
try!(encoder.emit_u16(segments[7]));
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn parse(tokens: &Vec<Token>) -> ParseResult<RData> {
|
||||
pub fn parse(tokens: &Vec<Token>) -> ParseResult<Ipv6Addr> {
|
||||
let mut token = tokens.iter();
|
||||
|
||||
let address: Ipv6Addr = try!(token.next().ok_or(ParseError::MissingToken("ipv6 address".to_string())).and_then(|t| if let &Token::CharData(ref s) = t {Ok(try!(s.parse()))} else {Err(ParseError::UnexpectedToken(t.clone()))} ));
|
||||
Ok(RData::AAAA{ address: address })
|
||||
Ok(address)
|
||||
}
|
||||
|
||||
|
||||
@ -74,22 +69,21 @@ mod tests {
|
||||
use std::str::FromStr;
|
||||
|
||||
use super::*;
|
||||
use ::rr::record_data::RData;
|
||||
use ::serialize::binary::bin_tests::{test_read_data_set, test_emit_data_set};
|
||||
|
||||
fn get_data() -> Vec<(RData, Vec<u8>)> {
|
||||
fn get_data() -> Vec<(Ipv6Addr, Vec<u8>)> {
|
||||
vec![
|
||||
(RData::AAAA{ address: Ipv6Addr::from_str("::").unwrap()}, vec![0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0]), // base case
|
||||
(RData::AAAA{ address: Ipv6Addr::from_str("1::").unwrap()}, vec![0,1,0,0,0,0,0,0, 0,0,0,0,0,0,0,0]),
|
||||
(RData::AAAA{ address: Ipv6Addr::from_str("0:1::").unwrap()}, vec![0,0,0,1,0,0,0,0, 0,0,0,0,0,0,0,0]),
|
||||
(RData::AAAA{ address: Ipv6Addr::from_str("0:0:1::").unwrap()}, vec![0,0,0,0,0,1,0,0, 0,0,0,0,0,0,0,0]),
|
||||
(RData::AAAA{ address: Ipv6Addr::from_str("0:0:0:1::").unwrap()}, vec![0,0,0,0,0,0,0,1, 0,0,0,0,0,0,0,0]),
|
||||
(RData::AAAA{ address: Ipv6Addr::from_str("::1:0:0:0").unwrap()}, vec![0,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0]),
|
||||
(RData::AAAA{ address: Ipv6Addr::from_str("::1:0:0").unwrap()}, vec![0,0,0,0,0,0,0,0, 0,0,0,1,0,0,0,0]),
|
||||
(RData::AAAA{ address: Ipv6Addr::from_str("::1:0").unwrap()}, vec![0,0,0,0,0,0,0,0, 0,0,0,0,0,1,0,0]),
|
||||
(RData::AAAA{ address: Ipv6Addr::from_str("::1").unwrap()}, vec![0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,1]),
|
||||
(RData::AAAA{ address: Ipv6Addr::from_str("::127.0.0.1").unwrap()}, vec![0,0,0,0,0,0,0,0, 0,0,0,0,127,0,0,1]),
|
||||
(RData::AAAA{ address: Ipv6Addr::from_str("FF00::192.168.64.32").unwrap()}, vec![255,0,0,0,0,0,0,0, 0,0,0,0,192,168,64,32]),
|
||||
(Ipv6Addr::from_str("::").unwrap(), vec![0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0]), // base case
|
||||
(Ipv6Addr::from_str("1::").unwrap(), vec![0,1,0,0,0,0,0,0, 0,0,0,0,0,0,0,0]),
|
||||
(Ipv6Addr::from_str("0:1::").unwrap(), vec![0,0,0,1,0,0,0,0, 0,0,0,0,0,0,0,0]),
|
||||
(Ipv6Addr::from_str("0:0:1::").unwrap(), vec![0,0,0,0,0,1,0,0, 0,0,0,0,0,0,0,0]),
|
||||
(Ipv6Addr::from_str("0:0:0:1::").unwrap(), vec![0,0,0,0,0,0,0,1, 0,0,0,0,0,0,0,0]),
|
||||
(Ipv6Addr::from_str("::1:0:0:0").unwrap(), vec![0,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0]),
|
||||
(Ipv6Addr::from_str("::1:0:0").unwrap(), vec![0,0,0,0,0,0,0,0, 0,0,0,1,0,0,0,0]),
|
||||
(Ipv6Addr::from_str("::1:0").unwrap(), vec![0,0,0,0,0,0,0,0, 0,0,0,0,0,1,0,0]),
|
||||
(Ipv6Addr::from_str("::1").unwrap(), vec![0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,1]),
|
||||
(Ipv6Addr::from_str("::127.0.0.1").unwrap(), vec![0,0,0,0,0,0,0,0, 0,0,0,0,127,0,0,1]),
|
||||
(Ipv6Addr::from_str("FF00::192.168.64.32").unwrap(), vec![255,0,0,0,0,0,0,0, 0,0,0,0,192,168,64,32]),
|
||||
]
|
||||
}
|
||||
|
||||
|
@ -33,7 +33,6 @@ pub mod soa;
|
||||
pub mod srv;
|
||||
pub mod txt;
|
||||
|
||||
pub use ::rr::Name;
|
||||
pub use self::null::NULL;
|
||||
pub use self::sig::SIG;
|
||||
pub use self::soa::SOA;
|
||||
|
@ -66,7 +66,7 @@ pub enum RData {
|
||||
// an A line in a master file is an Internet address expressed as four
|
||||
// decimal numbers separated by dots without any imbedded spaces (e.g.,
|
||||
// "10.2.0.52" or "192.0.5.6").
|
||||
A { address: Ipv4Addr },
|
||||
A(Ipv4Addr),
|
||||
|
||||
//-- RFC 1886 -- IPv6 DNS Extensions December 1995
|
||||
//
|
||||
@ -74,7 +74,7 @@ pub enum RData {
|
||||
//
|
||||
// A 128 bit IPv6 address is encoded in the data portion of an AAAA
|
||||
// resource record in network byte order (high-order byte first).
|
||||
AAAA { address: Ipv6Addr },
|
||||
AAAA(Ipv6Addr),
|
||||
|
||||
|
||||
// 3.3. Standard RRs
|
||||
@ -593,8 +593,8 @@ pub enum RData {
|
||||
impl RData {
|
||||
pub fn parse(record_type: RecordType, tokens: &Vec<Token>, origin: Option<&Name>) -> ParseResult<Self> {
|
||||
match record_type {
|
||||
RecordType::A => rdata::a::parse(tokens),
|
||||
RecordType::AAAA => rdata::aaaa::parse(tokens),
|
||||
RecordType::A => Ok(RData::A(try!(rdata::a::parse(tokens)))),
|
||||
RecordType::AAAA => Ok(RData::AAAA(try!(rdata::aaaa::parse(tokens)))),
|
||||
RecordType::ANY => panic!("parsing ANY doesn't make sense"),
|
||||
RecordType::AXFR => panic!("parsing AXFR doesn't make sense"),
|
||||
RecordType::CNAME => Ok(RData::CNAME(try!(rdata::name::parse(tokens, origin)))),
|
||||
@ -656,8 +656,8 @@ impl RData {
|
||||
let start_idx = decoder.index();
|
||||
|
||||
let result = try!(match record_type {
|
||||
RecordType::A => {debug!("reading A");rdata::a::read(decoder)},
|
||||
RecordType::AAAA => {debug!("reading AAAA"); rdata::aaaa::read(decoder)},
|
||||
RecordType::A => {debug!("reading A"); Ok(RData::A(try!(rdata::a::read(decoder)))) },
|
||||
RecordType::AAAA => {debug!("reading AAAA"); Ok(RData::AAAA(try!(rdata::aaaa::read(decoder)))) },
|
||||
rt @ RecordType::ANY => Err(DecodeError::UnknownRecordTypeValue(rt.into())),
|
||||
rt @ RecordType::AXFR => Err(DecodeError::UnknownRecordTypeValue(rt.into())),
|
||||
RecordType::CNAME => {debug!("reading CNAME"); Ok(RData::CNAME(try!(rdata::name::read(decoder)))) },
|
||||
@ -690,8 +690,8 @@ impl RData {
|
||||
|
||||
pub fn emit(&self, encoder: &mut BinEncoder) -> EncodeResult {
|
||||
match *self {
|
||||
RData::A{..} => rdata::a::emit(encoder, self),
|
||||
RData::AAAA{..} => rdata::aaaa::emit(encoder, self),
|
||||
RData::A(ref address) => rdata::a::emit(encoder, address),
|
||||
RData::AAAA(ref address) => rdata::aaaa::emit(encoder, address),
|
||||
RData::CNAME(ref name) => rdata::name::emit(encoder, name),
|
||||
RData::DS{..} => rdata::ds::emit(encoder, self),
|
||||
RData::DNSKEY{..} => rdata::dnskey::emit(encoder, self),
|
||||
@ -716,8 +716,8 @@ impl RData {
|
||||
impl<'a> From<&'a RData> for RecordType {
|
||||
fn from(rdata: &'a RData) -> Self {
|
||||
match *rdata {
|
||||
RData::A{..} => RecordType::A,
|
||||
RData::AAAA{..} => RecordType::AAAA,
|
||||
RData::A(..) => RecordType::A,
|
||||
RData::AAAA(..) => RecordType::AAAA,
|
||||
RData::CNAME(..) => RecordType::CNAME,
|
||||
RData::DS{..} => RecordType::DS,
|
||||
RData::DNSKEY{..} => RecordType::DNSKEY,
|
||||
@ -799,8 +799,8 @@ mod tests {
|
||||
0xFF,0xFF,0xFF,0xFF]),
|
||||
(RData::TXT{txt_data: vec!["abcdef".to_string(), "ghi".to_string(), "".to_string(), "j".to_string()]},
|
||||
vec![6,b'a',b'b',b'c',b'd',b'e',b'f', 3,b'g',b'h',b'i', 0, 1,b'j']),
|
||||
(RData::A{ address: Ipv4Addr::from_str("0.0.0.0").unwrap()}, vec![0,0,0,0]),
|
||||
(RData::AAAA{ address: Ipv6Addr::from_str("::").unwrap()}, vec![0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0]),
|
||||
(RData::A(Ipv4Addr::from_str("0.0.0.0").unwrap()), vec![0,0,0,0]),
|
||||
(RData::AAAA(Ipv6Addr::from_str("::").unwrap()), vec![0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0]),
|
||||
(RData::SRV{ priority: 1, weight: 2, port: 3, target: Name::with_labels(vec!["www".to_string(),"example".to_string(),"com".to_string()]),}, vec![0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 3,b'w',b'w',b'w',7,b'e',b'x',b'a',b'm',b'p',b'l',b'e',3,b'c',b'o',b'm',0]),
|
||||
]
|
||||
}
|
||||
@ -809,8 +809,8 @@ mod tests {
|
||||
#[test]
|
||||
fn test_order() {
|
||||
let ordered: Vec<RData> = vec![
|
||||
RData::A{ address: Ipv4Addr::from_str("0.0.0.0").unwrap()},
|
||||
RData::AAAA{ address: Ipv6Addr::from_str("::").unwrap()},
|
||||
RData::A(Ipv4Addr::from_str("0.0.0.0").unwrap()),
|
||||
RData::AAAA(Ipv6Addr::from_str("::").unwrap()),
|
||||
RData::SRV{ priority: 1, weight: 2, port: 3, target: Name::with_labels(vec!["www".to_string(),"example".to_string(),"com".to_string()]),},
|
||||
RData::MX{preference: 256, exchange: Name::with_labels(vec!["n".to_string()])},
|
||||
RData::CNAME(Name::with_labels(vec!["www".to_string(),"example".to_string(),"com".to_string()])),
|
||||
@ -830,8 +830,8 @@ mod tests {
|
||||
Name::with_labels(vec!["xxx".to_string(),"example".to_string(),"com".to_string()]),
|
||||
u32::max_value(), -1 as i32, -1 as i32, -1 as i32, u32::max_value())),
|
||||
RData::TXT{txt_data: vec!["abcdef".to_string(), "ghi".to_string(), "".to_string(), "j".to_string()]},
|
||||
RData::A{ address: Ipv4Addr::from_str("0.0.0.0").unwrap()},
|
||||
RData::AAAA{ address: Ipv6Addr::from_str("::").unwrap()},
|
||||
RData::A(Ipv4Addr::from_str("0.0.0.0").unwrap()),
|
||||
RData::AAAA(Ipv6Addr::from_str("::").unwrap()),
|
||||
RData::SRV{ priority: 1, weight: 2, port: 3, target: Name::with_labels(vec!["www".to_string(),"example".to_string(),"com".to_string()]),},
|
||||
];
|
||||
|
||||
|
@ -103,7 +103,7 @@ impl Record {
|
||||
rr_type: RecordType::A,
|
||||
dns_class: DNSClass::IN,
|
||||
ttl: 0,
|
||||
rdata: RData::A { address: Ipv4Addr::new(0,0,0,0) }
|
||||
rdata: RData::A(Ipv4Addr::new(0,0,0,0))
|
||||
}
|
||||
}
|
||||
|
||||
@ -322,7 +322,7 @@ mod tests {
|
||||
let mut record = Record::new();
|
||||
record.add_name("www".to_string()).add_name("example".to_string()).add_name("com".to_string())
|
||||
.rr_type(RecordType::A).dns_class(DNSClass::IN).ttl(5)
|
||||
.rdata(RData::A { address: Ipv4Addr::new(192, 168, 0, 1)});
|
||||
.rdata(RData::A(Ipv4Addr::new(192, 168, 0, 1)));
|
||||
|
||||
let mut vec_bytes: Vec<u8> = Vec::with_capacity(512);
|
||||
{
|
||||
@ -342,7 +342,7 @@ mod tests {
|
||||
let mut record = Record::new();
|
||||
record.add_name("www".to_string()).add_name("example".to_string()).add_name("com".to_string())
|
||||
.rr_type(RecordType::A).dns_class(DNSClass::IN).ttl(5)
|
||||
.rdata(RData::A { address: Ipv4Addr::new(192, 168, 0, 1)});
|
||||
.rdata(RData::A(Ipv4Addr::new(192, 168, 0, 1)));
|
||||
|
||||
let mut greater_name = record.clone();
|
||||
greater_name.name(Name::new().label("zzz").label("example").label("com"));
|
||||
@ -354,7 +354,7 @@ mod tests {
|
||||
greater_class.dns_class(DNSClass::NONE);
|
||||
|
||||
let mut greater_rdata = record.clone();
|
||||
greater_rdata.rdata(RData::A { address: Ipv4Addr::new(192, 168, 0, 255) });
|
||||
greater_rdata.rdata(RData::A(Ipv4Addr::new(192, 168, 0, 255)));
|
||||
|
||||
let compares = vec![(&record, &greater_name),
|
||||
(&record, &greater_type),
|
||||
|
@ -119,7 +119,7 @@ VENERA A 10.1.0.52
|
||||
assert_eq!(60, a_record.get_ttl()); // TODO: should this be minimum or expire?
|
||||
assert_eq!(DNSClass::IN, a_record.get_dns_class());
|
||||
assert_eq!(RecordType::A, a_record.get_rr_type());
|
||||
if let RData::A{ ref address } = *a_record.get_rdata() {
|
||||
if let RData::A(ref address) = *a_record.get_rdata() {
|
||||
assert_eq!(&Ipv4Addr::new(26u8,3u8,0u8,103u8), address);
|
||||
} else {
|
||||
panic!("Not an A record!!!")
|
||||
@ -128,7 +128,7 @@ VENERA A 10.1.0.52
|
||||
// AAAA
|
||||
let aaaa_record: &Record = authority.lookup(&Name::new().label("aaaa").label("isi").label("edu"), RecordType::AAAA).unwrap().first().cloned().unwrap();
|
||||
assert_eq!(&Name::new().label("aaaa").label("isi").label("edu"), aaaa_record.get_name());
|
||||
if let RData::AAAA{ ref address } = *aaaa_record.get_rdata() {
|
||||
if let RData::AAAA(ref address) = *aaaa_record.get_rdata() {
|
||||
assert_eq!(&Ipv6Addr::from_str("4321:0:1:2:3:4:567:89ab").unwrap(), address);
|
||||
} else {
|
||||
panic!("Not a AAAA record!!!")
|
||||
@ -138,7 +138,7 @@ VENERA A 10.1.0.52
|
||||
let short_record: &Record = authority.lookup(&Name::new().label("short").label("isi").label("edu"), RecordType::A).unwrap().first().cloned().unwrap();
|
||||
assert_eq!(&Name::new().label("short").label("isi").label("edu"), short_record.get_name());
|
||||
assert_eq!(70, short_record.get_ttl());
|
||||
if let RData::A{ ref address } = *short_record.get_rdata() {
|
||||
if let RData::A(ref address) = *short_record.get_rdata() {
|
||||
assert_eq!(&Ipv4Addr::new(26u8,3u8,0u8,104u8), address);
|
||||
} else {
|
||||
panic!("Not an A record!!!")
|
||||
|
@ -423,7 +423,7 @@ mod server_tests {
|
||||
assert_eq!(record.get_rr_type(), RecordType::A);
|
||||
assert_eq!(record.get_dns_class(), DNSClass::IN);
|
||||
|
||||
if let &RData::A{ ref address } = record.get_rdata() {
|
||||
if let &RData::A(ref address) = record.get_rdata() {
|
||||
assert_eq!(address, &Ipv4Addr::new(93,184,216,34))
|
||||
} else {
|
||||
assert!(false);
|
||||
|
Loading…
Reference in New Issue
Block a user