// 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