bend-kit-dns Releases (13): 0.7.0.0 0xdbc01a0099d30ce4f89d905b5f1c9e76 indexed https://jend.leeeet.dev/files.txt?path=bend-kit-dns@0.7.0.0 0.6.0.4 0xac8010b37d14ff08858877ea88da2fba unindexed https://jend.leeeet.dev/files.txt?path=bend-kit-dns@0.6.0.4 0.6.0.3 0x05a09f98d96d56a0c035bd422b4c5cdd unindexed https://jend.leeeet.dev/files.txt?path=bend-kit-dns@0.6.0.3 0.6.0.2 0x9bf2c4100bf9328348d215e7ae1657de unindexed https://jend.leeeet.dev/files.txt?path=bend-kit-dns@0.6.0.2 0.6.0.1 0x36c17029a046b100673721d969a146f0 unindexed https://jend.leeeet.dev/files.txt?path=bend-kit-dns@0.6.0.1 0.6.0.0 0x324c9fdeb673656969cbd2b699632579 unindexed https://jend.leeeet.dev/files.txt?path=bend-kit-dns@0.6.0.0 0.5.0.0 0x446af397a026226591f85538ecbba2c4 unindexed https://jend.leeeet.dev/files.txt?path=bend-kit-dns@0.5.0.0 0.4.0.2 0x3032c733631327d69c18d386991b6af3 unindexed https://jend.leeeet.dev/files.txt?path=bend-kit-dns@0.4.0.2 0.4.0.1 0x296c14c91cb121bd2f42e9d9f730480d unindexed https://jend.leeeet.dev/files.txt?path=bend-kit-dns@0.4.0.1 0.4.0.0 0x2a6c5e2244ba7e5d8901504763796738 unindexed https://jend.leeeet.dev/files.txt?path=bend-kit-dns@0.4.0.0 0.3.2.1 0xc10a5eaaa9c896e1570e279945f4241e unindexed https://jend.leeeet.dev/files.txt?path=bend-kit-dns@0.3.2.1 0.3.2.0 0xa9d8dfccdb396356924785d43e105c3d unindexed https://jend.leeeet.dev/files.txt?path=bend-kit-dns@0.3.2.0 0.3.1.1 0xef7fb3464d57d2b70573cabf3289c442 unindexed https://jend.leeeet.dev/files.txt?path=bend-kit-dns@0.3.1.1 Definitions (110, 1 to 100 shown): Dns.label.ok (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=label.ok) def label.ok(+l: String) -> Bool: Dns.label.ascii (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=label.ascii) def label.ascii(s: String) -> Bool: Dns.labels.ok (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=labels.ok) def labels.ok(xs: List<&2, String>) -> Bool: Dns.labels.len (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=labels.len) # QNAME's length without its final zero octet. def labels.len(xs: List<&2, String>, +n: U32) -> U32: Dns.written (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=written) # The query buffer is allocated to its exact size before writing. def written(r: Bytes.Cursor & Bool) -> Bytes.Cursor: Dns.label.put (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=label.put) def label.put(s: String, c: Bytes.Cursor) -> Bytes.Cursor: Dns.labels.put (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=labels.put) def labels.put(xs: List<&2, String>, c: Bytes.Cursor) -> Bytes.Cursor: Dns.query.done (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=query.done) def query.done(r: Bytes.Bytes & U32) -> Maybe<&1, Bytes.Bytes>: Dns.query.if (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=query.if) def query.if(+id: U32, +xs: List<&2, String>, ok: Bool) -> Maybe<&1, Bytes.Bytes>: Dns.query.labels (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=query.labels) # §2.3.4: a name is at most 255 octets in wire form, its final zero octet included. def query.labels(+id: U32, +xs: List<&2, String>) -> Maybe<&1, Bytes.Bytes>: Dns.strip_dot.if (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=strip_dot.if) def strip_dot.if(+s: String, dot: Bool) -> String: Dns.strip_dot (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=strip_dot) def strip_dot(+s: String) -> String: Dns.query (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=query) # RFC 1035 §4.1: a standard query for the A record of name. def query(id: U32, name: String) -> Maybe<&1, Bytes.Bytes>: Dns.Step (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=Step) # One step through a name: continue at the next label or stop after the name. type Step is Data: Go{} Stop{ok: Bool} Dns.name.advance (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=name.advance) def name.advance(stop: Bool, r: Bytes.Cursor & Bool) -> Bytes.Cursor & Step: Dns.name.label (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=name.label) # §4.1.4: zero terminates, 192..255 starts a pointer, 64..191 is reserved. def name.label(ok: Bool, c: Bytes.Cursor, l: U32) -> Bytes.Cursor & Step: Dns.name.pointer (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=name.pointer) def name.pointer(pointer: Bool, +l: U32, c: Bytes.Cursor) -> Bytes.Cursor & Step: Dns.name.step.of (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=name.step.of) def name.step.of(+l: U32, c: Bytes.Cursor) -> Bytes.Cursor & Step: Dns.name.step (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=name.step) def name.step(r: Bytes.Cursor & Maybe<&2, U32>) -> Bytes.Cursor & Step: Dns.name.walk (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=name.walk) def name.walk(fuel: Nat, r: Bytes.Cursor & Step) -> Bytes.Cursor & Bool: Dns.name.skip (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=name.skip) # §2.3.4: a name is at most 255 octets, so retain the 128-step limit. def name.skip(c: Bytes.Cursor) -> Bytes.Cursor & Bool: Dns.RR (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=RR) type RR is Data: RRBad{} RRA{ip: String} RRSkip{} Dns.dotted (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=dotted) def dotted(+ip: U32) -> String: Dns.rr.a (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=rr.a) def rr.a(limit: Bytes.CursorLimit, r: Bytes.Cursor & Maybe<&2, U32>) -> Bytes.Cursor & RR: Dns.rr.data.some (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=rr.data.some) def rr.data.some(a: Bool, c: Bytes.Cursor, limit: Bytes.CursorLimit) -> Bytes.Cursor & RR: Dns.rr.data (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=rr.data) # Bound RDATA in the original packed buffer, then resume after the entire region. def rr.data(a: Bool, r: Bytes.Cursor & Maybe<&1, Bytes.CursorLimit>) -> Bytes.Cursor & RR: Dns.rr.len (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=rr.len) def rr.len(+ty: U32, +cl: U32, r: Bytes.Cursor & Maybe<&2, U32>) -> Bytes.Cursor & RR: Dns.rr.ttl (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=rr.ttl) def rr.ttl(+ty: U32, +cl: U32, r: Bytes.Cursor & Bool) -> Bytes.Cursor & RR: Dns.rr.cl (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=rr.cl) def rr.cl(+ty: U32, r: Bytes.Cursor & Maybe<&2, U32>) -> Bytes.Cursor & RR: Dns.rr.ty (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=rr.ty) def rr.ty(r: Bytes.Cursor & Maybe<&2, U32>) -> Bytes.Cursor & RR: Dns.rr.name (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=rr.name) def rr.name(r: Bytes.Cursor & Bool) -> Bytes.Cursor & RR: Dns.rr (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=rr) # §4.1.3: NAME, TYPE, CLASS, TTL, RDLENGTH, RDATA. def rr(c: Bytes.Cursor) -> Bytes.Cursor & RR: Dns.answers.scan (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=answers.scan) # fuel = records left. The first A record wins; CNAMEs before it are skipped. def answers.scan(fuel: Nat, r: Bytes.Cursor & RR) -> Maybe<&2, String>: Dns.question.end (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=question.end) # QTYPE and QCLASS follow the name. def question.end(r: Bytes.Cursor & Bool) -> Bytes.Cursor & Bool: Dns.questions (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=questions) def questions(fuel: Nat, r: Bytes.Cursor & Bool) -> Bytes.Cursor & Bool: Dns.body.go (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=body.go) def body.go(+an: U32, r: Bytes.Cursor & Bool) -> Maybe<&2, String>: Dns.body.an (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=body.an) # The header ends with NSCOUNT and ARCOUNT; questions follow. def body.an(+qd: U32, r: Bytes.Cursor & Maybe<&2, U32>) -> Maybe<&2, String>: Dns.body.qd (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=body.qd) def body.qd(r: Bytes.Cursor & Maybe<&2, U32>) -> Maybe<&2, String>: Dns.flags.ok (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=flags.ok) # §4.1.1: QR set, opcode QUERY, not truncated, RCODE 0. def flags.ok(+f: U32) -> Bool: Dns.head.flags.if (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=head.flags.if) def head.flags.if(ok: Bool, c: Bytes.Cursor) -> Maybe<&2, String>: Dns.head.flags (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=head.flags) def head.flags(r: Bytes.Cursor & Maybe<&2, U32>) -> Maybe<&2, String>: Dns.head.id.if (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=head.id.if) def head.id.if(ok: Bool, c: Bytes.Cursor) -> Maybe<&2, String>: Dns.head.id (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=head.id) def head.id(+id: U32, r: Bytes.Cursor & Maybe<&2, U32>) -> Maybe<&2, String>: Dns.answer (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=answer) # The IPv4 address the response gives for the query with this id. def answer(id: U32, msg: Bytes.Bytes) -> Maybe<&2, String>: Dns.nameservers.add (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=nameservers.add) def nameservers.add(+line: String, rest: List<&2, String>, hit: Bool) -> List<&2, String>: Dns.nameservers.go (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=nameservers.go) def nameservers.go(xs: List<&2, String>) -> List<&2, String>: Dns.nameservers (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=nameservers) # Every nameserver line, in file order. def nameservers(conf: String) -> List<&2, String>: Dns.nameserver.first (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=nameserver.first) def nameserver.first(xs: List<&2, String>) -> Maybe<&2, String>: Dns.nameserver (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=nameserver) # The first nameserver line of a resolv.conf. def nameserver(conf: String) -> Maybe<&2, String>: Dns.none (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=none) def none() -> IO(Maybe<&2, String>): Dns.list.append (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=list.append) def list.append(xs: List<&2, String>, ys: List<&2, String>) -> List<&2, String>: Dns.list.one (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=list.one) def list.one(+x: String) -> List<&2, String>: Dns.list.any (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=list.any) def list.any(+xs: List<&2, String>) -> Bool: Dns.list.first (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=list.first) def list.first(xs: List<&2, String>) -> Maybe<&2, String>: Dns.ipv4.go (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=ipv4.go) def ipv4.go(s: String) -> Bool: Dns.ipv4 (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=ipv4) # Digits and dots; TCP.connect rejects anything else that is not an address. def ipv4(+s: String) -> Bool: Dns.ipv6.ch (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=ipv6.ch) def ipv6.ch(+c: U32) -> Bool: Dns.ipv6.go (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=ipv6.go) def ipv6.go(s: String) -> Bool: Dns.ipv6.has (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=ipv6.has) def ipv6.has(s: String) -> Bool: Dns.ipv6 (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=ipv6) # Bracket-free IPv6 text; connect validates the address. def ipv6(+s: String) -> Bool: Dns.ip (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=ip) def ip(+s: String) -> Bool: Dns.Try (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=Try) # One attempt's outcome: try again, or this answer (None: no address). type Try is Data: Again{} Got{ip: Maybe<&2, String>} Dns.try.pure (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=try.pure) def try.pure(s: Socket, t: Try) -> IO(Socket & Try): Dns.try.from (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=try.from) # A datagram from anyone but the nameserver's port 53 is ignored (retried). def try.from(s: Socket, +ns: String, id: U32, hpd: String & U32 & (U32 & Array)) -> IO(Socket & Try): Dns.try.back (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=try.back) def try.back(ns: String, id: U32, m: Socket & Result<&1, &1, U32 & String, String & U32 & (U32 & Array)>) -> IO(Socket & Try): Dns.try.sent (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=try.sent) # §4.2.1 and resolv.conf defaults: 5 s per attempt. def try.sent(ns: String, id: U32, m: Socket & Result<&1, &1, U32 & String, Unit>) -> IO(Socket & Try): Dns.try.send (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=try.send) # Bytes cannot be copied, so each attempt builds its own query. A name that query rejects ends the tries. def try.send(s: Socket, +ns: String, id: U32, q: Maybe<&1, Bytes.Bytes>) -> IO(Socket & Try): Dns.try.once (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=try.once) def try.once(s: Socket, +ns: String, +id: U32, name: String) -> IO(Socket & Try): Dns.try.close (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=try.close) def try.close(s: Socket, r: Maybe<&2, String>) -> IO(Maybe<&2, String>): Dns.tries.end (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=tries.end) def tries.end(st: Socket & Try) -> IO(Maybe<&2, String>): Dns.tries (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=tries) # fuel: attempts left (resolv.conf's default is 2). def tries(fuel: Nat, +ns: String, +id: U32, +name: String, st: Socket & Try) -> IO(Maybe<&2, String>): Dns.resolve.sock (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=resolve.sock) def resolve.sock(ns: String, id: U32, name: String, r: Result<&1, &1, U32 & String, Socket>) -> IO(Maybe<&2, String>): Dns.resolve.id (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=resolve.id) # §7.3: a random id makes forged answers harder to land. def resolve.id(name: String, ns: String, r: Result<&1, &1, U32 & String, U32>) -> IO(Maybe<&2, String>): Dns.resolve.ns (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=resolve.ns) def resolve.ns(name: String, ns: Maybe<&2, String>) -> IO(Maybe<&2, String>): Dns.resolve.at (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=resolve.at) # Ask one nameserver. Tests use this; resolve reads /etc/resolv.conf. def resolve.at(+host: String, ns: String) -> IO(Maybe<&2, String>): Dns.conf.text (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=conf.text) def conf.text(r: Result<&1, &1, U32 & String, String>) -> String: Dns.resolve.n3 (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=resolve.n3) # ponytail: 3 nameservers; a longer resolv.conf ignores the rest def resolve.n3(+name: String, xs: List<&2, String>) -> IO(Maybe<&2, String>): Dns.resolve.n2b (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=resolve.n2b) def resolve.n2b(+name: String, rest: List<&2, String>, ip: Maybe<&2, String>) -> IO(Maybe<&2, String>): Dns.resolve.n2 (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=resolve.n2) def resolve.n2(+name: String, xs: List<&2, String>) -> IO(Maybe<&2, String>): Dns.resolve.n1b (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=resolve.n1b) def resolve.n1b(+name: String, rest: List<&2, String>, ip: Maybe<&2, String>) -> IO(Maybe<&2, String>): Dns.resolve.list (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=resolve.list) def resolve.list(+name: String, xs: List<&2, String>) -> IO(Maybe<&2, String>): Dns.resolve.read (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=resolve.read) def resolve.read(name: String, m: File & Result<&1, &1, U32 & String, String>) -> IO(Maybe<&2, String>): Dns.resolve.conf (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=resolve.conf) def resolve.conf(name: String, r: Result<&1, &1, U32 & String, File>) -> IO(Maybe<&2, String>): Dns.resolve.dns (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=resolve.dns) def resolve.dns(name: String) -> IO(Maybe<&2, String>): Dns.hosts.on_line (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=hosts.on_line) def hosts.on_line(+name: String, ns: List<&2, String>) -> Bool: Dns.hosts.line.all (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=hosts.line.all) def hosts.line.all(+name: String, xs: List<&2, String>) -> List<&2, String>: Dns.hosts.sp (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=hosts.sp) def hosts.sp(+c: U32, tab: Bool) -> U32: Dns.hosts.flat (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=hosts.flat) def hosts.flat(s: String) -> String: Dns.hosts.scan.all (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=hosts.scan.all) def hosts.scan.all(xs: List<&2, String>, +name: String, acc: List<&2, String>) -> List<&2, String>: Dns.hosts.all (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=hosts.all) # Every address for name in an /etc/hosts file. The name is already lowercase. def hosts.all(+name: String, text: String) -> List<&2, String>: Dns.hosts (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=hosts) # First address for name in an /etc/hosts file. The name is already lowercase. def hosts(+name: String, text: String) -> Maybe<&2, String>: Dns.lookup.split (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=lookup.split) def lookup.split(+s: String) -> List<&2, String>: Dns.lookup.all (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=lookup.all) # OS resolver: every address, NUL-separated in getaddrinfo order. def lookup.all(host: String) -> IO(Result<&1, &1, U32 & String, String>): Dns.resolve.literal.all (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=resolve.literal.all) # Literals and localhost without the OS (for laws and fast paths). def resolve.literal.all(+host: String) -> List<&2, String>: Dns.resolve.literal (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=resolve.literal) def resolve.literal(+host: String) -> Maybe<&2, String>: Dns.resolve.all.got (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=resolve.all.got) def resolve.all.got(r: Result<&1, &1, U32 & String, String>) -> IO(List<&2, String>): Dns.resolve.all.os (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=resolve.all.os) def resolve.all.os(+name: String) -> IO(List<&2, String>): Dns.resolve.all.dns.one (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=resolve.all.dns.one) def resolve.all.dns.one(m: Maybe<&2, String>) -> IO(List<&2, String>): Dns.resolve.all.dns (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=resolve.all.dns) # ponytail: UDP path still asks for A records only def resolve.all.dns(+name: String) -> IO(List<&2, String>): Dns.resolve.all.from (https://jend.leeeet.dev/definition.txt?path=bend-kit-dns@0.7.0.0/dns.bend&name=resolve.all.from) def resolve.all.from(+name: String, +xs: List<&2, String>) -> IO(List<&2, String>): More: https://jend.leeeet.dev/packages/bend-kit-dns.txt?definitions_offset=100