our %opcode_id = (
query => 0,
iquery => 1,
status => 2,
notify => 4,
update => 5,
map +($_ => $_), 3, 6..15
);
our %opcode_str = reverse %opcode_id;
our %rcode_id = (
noerror => 0,
formerr => 1,
servfail => 2,
nxdomain => 3,
notimp => 4,
refused => 5,
yxdomain => 6, # Name Exists when it should not [RFC 2136]
yxrrset => 7, # RR Set Exists when it should not [RFC 2136]
nxrrset => 8, # RR Set that should exist does not [RFC 2136]
notauth => 9, # Server Not Authoritative for zone [RFC 2136]
notzone => 10, # Name not contained in zone [RFC 2136]
# EDNS0 16 BADVERS Bad OPT Version [RFC 2671]
# EDNS0 16 BADSIG TSIG Signature Failure [RFC 2845]
# EDNS0 17 BADKEY Key not recognized [RFC 2845]
# EDNS0 18 BADTIME Signature out of time window [RFC 2845]
# EDNS0 19 BADMODE Bad TKEY Mode [RFC 2930]
# EDNS0 20 BADNAME Duplicate key name [RFC 2930]
# EDNS0 21 BADALG Algorithm not supported [RFC 2930]
map +($_ => $_), 11..15
);
our %rcode_str = reverse %rcode_id;
our %type_id = (
a => 1,
ns => 2,
md => 3,
mf => 4,
cname => 5,
soa => 6,
mb => 7,
mg => 8,
mr => 9,
null => 10,
wks => 11,
ptr => 12,
hinfo => 13,
minfo => 14,
mx => 15,
txt => 16,
aaaa => 28,
srv => 33,
naptr => 35, # rfc2915
opt => 41,
spf => 99,
tkey => 249,
tsig => 250,
ixfr => 251,
axfr => 252,
mailb => 253,
"*" => 255,
);
our %type_str = reverse %type_id;
our %class_id = (
in => 1,
ch => 3,
hs => 4,
none => 254,
"*" => 255,
);
our %class_str = reverse %class_id;
sub _enc_name($) {
pack "(C/a*)*", (split /\./, shift), ""
}
sub _enc_qd() {
(_enc_name $_->[0]) . pack "nn",
($_->[1] > 0 ? $_->[1] : $type_id {$_->[1]}),
($_->[2] > 0 ? $_->[2] : $class_id{$_->[2] || "in"})
}
sub _enc_rr() {
die "encoding of resource records is not supported";
}
=item $pkt = AnyEvent::DNS::dns_pack $dns
Packs a perl data structure into a DNS packet. Reading RFC 1035 is strongly
recommended, then everything will be totally clear. Or maybe not.
Resource records are not yet encodable.
Examples:
=4= |