// DNS protocol constants.
// Record types (qtype) — let with lowercase to avoid conflict with RData constructors
///|
pub let qtype_a : UInt16 = 1
///|
pub let qtype_ns : UInt16 = 2
///|
pub let qtype_cname : UInt16 = 5
///|
pub let qtype_soa : UInt16 = 6
///|
pub let qtype_ptr : UInt16 = 12
///|
pub let qtype_mx : UInt16 = 15
///|
pub let qtype_txt : UInt16 = 16
///|
pub let qtype_aaaa : UInt16 = 28
///|
pub let qtype_srv : UInt16 = 33
// Record class
///|
pub let qclass_in : UInt16 = 1
// Response codes (rcode)
///|
pub let rcode_noerror : Int = 0
///|
pub let rcode_formerr : Int = 1
///|
pub let rcode_servfail : Int = 2
///|
pub let rcode_nxdomain : Int = 3
///|
pub let rcode_notimp : Int = 4
///|
pub let rcode_refused : Int = 5
// Default DNS port
///|
pub let dns_port : UInt16 = 53
// Limits
///|
pub let max_label_len : Int = 63
///|
pub let max_name_len : Int = 255
///|
pub let max_udp_payload : UInt16 = 512
// DNS packets carried by TCP are limited by their two-byte length prefix. We
// use the same limit for codec input so a hostile packet cannot cause an
// unbounded allocation before it is rejected.
///|
pub let max_dns_message_len : Int = 65535
// RFC 1035 does not prescribe a pointer depth. A generous finite limit keeps
// legitimate packets working while making pointer-loop attacks bounded.
///|
pub let max_pointer_hops : Int = 128
///|
pub let max_dns_labels : Int = 127
///|
pub let max_section_records : Int = 4096
///|
pub let max_edns_options : Int = 1024
///|
pub let max_cname_depth : Int = 16
// Additional record types (less common but standardized)
///|
pub let qtype_md : UInt16 = 3
///|
pub let qtype_mf : UInt16 = 4
///|
pub let qtype_mb : UInt16 = 7
///|
pub let qtype_mg : UInt16 = 8
///|
pub let qtype_mr : UInt16 = 9
///|
pub let qtype_null : UInt16 = 10
///|
pub let qtype_wks : UInt16 = 11
///|
pub let qtype_hinfo : UInt16 = 13
///|
pub let qtype_minfo : UInt16 = 14
///|
pub let qtype_rp : UInt16 = 17
///|
pub let qtype_afsdb : UInt16 = 18
///|
pub let qtype_x25 : UInt16 = 19
///|
pub let qtype_isdn : UInt16 = 20
///|
pub let qtype_rt : UInt16 = 21
///|
pub let qtype_sig : UInt16 = 24
///|
pub let qtype_key : UInt16 = 25
///|
pub let qtype_px : UInt16 = 26
///|
pub let qtype_loc : UInt16 = 29
///|
pub let qtype_naptr : UInt16 = 35
///|
pub let qtype_kx : UInt16 = 36
///|
pub let qtype_cert : UInt16 = 37
///|
pub let qtype_dname : UInt16 = 39
///|
pub let qtype_opt : UInt16 = 41
///|
pub let qtype_ds : UInt16 = 43
///|
pub let qtype_sshfp : UInt16 = 44
///|
pub let qtype_rrsig : UInt16 = 46
///|
pub let qtype_nsec : UInt16 = 47
///|
pub let qtype_dnskey : UInt16 = 48
///|
pub let qtype_tlsa : UInt16 = 52
///|
pub let qtype_svcb : UInt16 = 64
///|
pub let qtype_https : UInt16 = 65
///|
pub let qtype_spf : UInt16 = 99
///|
pub let qtype_caa : UInt16 = 257
///|
pub let qtype_any : UInt16 = 255
///|
pub let qtype_axfr : UInt16 = 252
///|
pub let qtype_ixfr : UInt16 = 251
// Additional response codes (EDNS extended)
///|
pub let rcode_badvers : Int = 16
///|
pub let rcode_badkey : Int = 17
///|
pub let rcode_badtime : Int = 18
///|
pub let rcode_badmode : Int = 19
///|
pub let rcode_badname : Int = 20
///|
pub let rcode_badalg : Int = 21
///|
pub let rcode_badtrunc : Int = 22
///|
pub let rcode_badcookie : Int = 23
// DNS opcodes
///|
pub let opcode_query : UInt16 = 0
///|
pub let opcode_iquery : UInt16 = 1
///|
pub let opcode_status : UInt16 = 2
///|
pub let opcode_notify : UInt16 = 4
///|
pub let opcode_update : UInt16 = 5
// DNS flag masks
///|
pub let mask_qr : UInt16 = 0x8000
///|
pub let mask_opcode : UInt16 = 0x7800
///|
pub let mask_aa : UInt16 = 0x0400
///|
pub let mask_tc : UInt16 = 0x0200
///|
pub let mask_rd : UInt16 = 0x0100
///|
pub let mask_ra : UInt16 = 0x0080
///|
pub let mask_z : UInt16 = 0x0070
///|
pub let mask_rcode : UInt16 = 0x000F
// Timing constants
///|
pub let default_timeout_ms : Int = 5000
///|
pub let default_retries : Int = 2
///|
pub let default_udp_size : Int = 1232
///|
pub let tcp_dns_max_len : Int = 65535
///|
pub let dns_header_size : Int = 12
///|
pub let max_lifetime_ms : Int = 86400000
// Well-known DNS server addresses
///|
pub let dns_google_primary : String = "8.8.8.8"
///|
pub let dns_google_secondary : String = "8.8.4.4"
///|
pub let dns_cloudflare_primary : String = "1.1.1.1"
///|
pub let dns_cloudflare_secondary : String = "1.0.0.1"
///|
pub let dns_quad9_primary : String = "9.9.9.9"
// Common SOA values
///|
pub let soa_default_refresh : UInt = 3600
///|
pub let soa_default_retry : UInt = 900
///|
pub let soa_default_expire : UInt = 86400
///|
pub let soa_default_minimum : UInt = 300