1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283openLwt.Infixletsrc=Logs.Src.create"dns_client_mirage"~doc:"effectful DNS client layer"moduleLog=(valLogs.src_logsrc:Logs.LOG)moduleMake(R:Mirage_random.S)(C:Mirage_clock.MCLOCK)(S:Mirage_stack.V4)=structmoduleTransport:Dns_client.Swithtypeflow=S.TCPV4.flowandtypestack=S.tandtype+'aio='aLwt.tandtypeio_addr=Ipaddr.V4.t*int=structtypeflow=S.TCPV4.flowtypestack=S.ttypeio_addr=Ipaddr.V4.t*inttypens_addr=[`TCP|`UDP]*io_addrtype+'aio='aLwt.ttypet={rng:(int->Cstruct.t);nameserver:ns_addr;stack:stack;}letcreate?rng?(nameserver=`TCP,(Ipaddr.V4.of_string_exnDns_client.default_resolver,53))stack=letrng=matchrngwithNone->R.generate?g:None|Somex->xin{rng;nameserver;stack}letnameserver{nameserver;_}=nameserverletrng{rng;_}=rngletbind=Lwt.bindletlift=Lwt.returnletconnect?nameserver:nst=let_proto,addr=matchnswithNone->nameservert|Somex->xinS.TCPV4.create_connection(S.tcpv4t.stack)addr>|=function|Errore->Log.err(funm->m"error connecting to nameserver %a"S.TCPV4.pp_errore);Error(`Msg"connect failure")|Okflow->Okflowletclosef=S.TCPV4.closefletrecvflow=S.TCPV4.readflow>|=function|Errore->Error(`Msg(Fmt.to_to_stringS.TCPV4.pp_errore))|Ok(`Datacs)->Okcs|Ok`Eof->OkCstruct.emptyletsendflows=S.TCPV4.writeflows>|=function|Errore->Error(`Msg(Fmt.to_to_stringS.TCPV4.pp_write_errore))|Ok()->Ok()endincludeDns_client.Make(Transport)letcreate?size?nameserverstack=create?size~rng:R.generate?nameserver~clock:C.elapsed_nsstackend(*
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
*)