···1818let empty = { ptrs = []; srvs = []; txts = []; addrs = []; addrs6 = [] }
19192020(* Binary helpers *)
2121-let get_u16 buf off = (Char.code buf.[off] lsl 8) lor Char.code buf.[off + 1]
2121+let u16 buf off = (Char.code buf.[off] lsl 8) lor Char.code buf.[off + 1]
22222323(* Collect labels from a DNS name, following compression pointers *)
2424let collect_labels buf off =
···3232 | b when b land 0xc0 = 0xc0 ->
3333 (* Compression pointer: need 2 bytes *)
3434 if off + 2 > len then acc
3535- else loop (get_u16 buf off land 0x3fff) (followed + 1) acc
3535+ else loop (u16 buf off land 0x3fff) (followed + 1) acc
3636 | b ->
3737 (* Label: need 1 + b bytes *)
3838 if off + 1 + b > len then acc
···8282let random_u16 () = Random.int 0x10000
83838484(* Create mDNS query using dns library *)
8585-let make_query name =
8585+let query name =
8686 let header = (random_u16 (), Dns.Packet.Flags.empty) in
8787 Dns.Packet.create header
8888 (Dns.Packet.Question.create name Dns.Rr_map.Ptr)
8989 `Query
90909191let encode_query name =
9292- let pkt = make_query name in
9292+ let pkt = query name in
9393 fst (Dns.Packet.encode `Udp pkt)
94949595(* Parse mDNS response *)
···9797 let len = String.length buf in
9898 if len < 12 then None
9999 else
100100- let qdcount = get_u16 buf 4 in
101101- let rr_count = get_u16 buf 6 + get_u16 buf 8 + get_u16 buf 10 in
100100+ let qdcount = u16 buf 4 in
101101+ let rr_count = u16 buf 6 + u16 buf 8 + u16 buf 10 in
102102 let off = ref 12 in
103103 (* Skip question section with bounds checking *)
104104 for _ = 1 to qdcount do
···116116 let off' = skip_name buf !off in
117117 (* Verify off' + 10 <= len before reading RR header *)
118118 if off' + 10 <= len then begin
119119- let typ = get_u16 buf off' in
120120- let rdlen = get_u16 buf (off' + 8) in
119119+ let typ = u16 buf off' in
120120+ let rdlen = u16 buf (off' + 8) in
121121 let rdata = off' + 10 in
122122 off := rdata + rdlen;
123123 (* Verify rdata region is within bounds *)
···135135 let lo = String.get_int64_be buf (rdata + 8) in
136136 addrs6 := (name, Ipaddr.V6.of_int64 (hi, lo)) :: !addrs6
137137 | 33 when rdlen >= 6 ->
138138- let port = get_u16 buf (rdata + 4) in
138138+ let port = u16 buf (rdata + 4) in
139139 let target =
140140 domain_of_labels (collect_labels buf (rdata + 6))
141141 in