package dns-client
Pure DNS resolver API
Install
Dune Dependency
Authors
Maintainers
Sources
dns-v4.4.1.tbz
sha256=c8b2a49485c7a1bed06c3be47c80c6e865728e3f6658407e179bc5099c4c80a1
sha512=f9997cf9bbe4705ff9d49b3b69300cf5eec12c79bec68e32e20c0356e10fb9e7a150b08e627e429d2eaaf35befcdbabc738dff8535a763e7c57d825d006e21ea
doc/src/dns-client.mirage/dns_client_mirage.ml.html
Source file dns_client_mirage.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
open Lwt.Infix let src = Logs.Src.create "dns_client_mirage" ~doc:"effectful DNS client layer" module Log = (val Logs.src_log src : Logs.LOG) module Make (R : Mirage_random.S) (C : Mirage_clock.MCLOCK) (S : Mirage_stack.V4) = struct module Transport : Dns_client.S with type flow = S.TCPV4.flow and type stack = S.t and type +'a io = 'a Lwt.t and type io_addr = Ipaddr.V4.t * int = struct type flow = S.TCPV4.flow type stack = S.t type io_addr = Ipaddr.V4.t * int type ns_addr = [`TCP | `UDP] * io_addr type +'a io = 'a Lwt.t type t = { rng : (int -> Cstruct.t) ; nameserver : ns_addr ; stack : stack ; } let create ?rng ?(nameserver = `TCP, (Ipaddr.V4.of_string_exn Dns_client.default_resolver, 53)) stack = let rng = match rng with None -> R.generate ?g:None | Some x -> x in { rng ; nameserver ; stack } let nameserver { nameserver ; _ } = nameserver let rng { rng ; _ } = rng let bind = Lwt.bind let lift = Lwt.return let connect ?nameserver:ns t = let _proto, addr = match ns with None -> nameserver t | Some x -> x in S.TCPV4.create_connection (S.tcpv4 t.stack) addr >|= function | Error e -> Log.err (fun m -> m "error connecting to nameserver %a" S.TCPV4.pp_error e) ; Error (`Msg "connect failure") | Ok flow -> Ok flow let close f = S.TCPV4.close f let recv flow = S.TCPV4.read flow >|= function | Error e -> Error (`Msg (Fmt.to_to_string S.TCPV4.pp_error e)) | Ok (`Data cs) -> Ok cs | Ok `Eof -> Ok Cstruct.empty let send flow s = S.TCPV4.write flow s >|= function | Error e -> Error (`Msg (Fmt.to_to_string S.TCPV4.pp_write_error e)) | Ok () -> Ok () end include Dns_client.Make(Transport) let create ?size ?nameserver stack = create ?size ~rng:R.generate ?nameserver ~clock:C.elapsed_ns stack end (* type dns_ty = Dns_client let config : 'a Mirage.impl = let open Mirage in impl @@ object inherit Mirage.base_configurable method module_name = "Dns_client" method name = "Dns_client" method ty : 'a typ = Type Dns_client method! packages : package list value = (Key.match_ Key.(value target) @@ begin function | `Unix -> [package "dns-client.unix"] | _ -> [] end ) method! deps = [] end *)
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>