cabal-version: 3.12 name: dnsbase version: 1.0.2.0 build-type: Simple synopsis: Stub DNS resolver with a typed RData model and value-based extension API description: A DNS stub resolver library for Haskell. The IO layer is derived from Kazu Yamamoto's @dns@ package; what @dnsbase@ adds is a rich set of RRtypes and a runtime-extensible RRtype data model with a simple configuration interface. . Every RR type's payload is modeled as a dedicated Haskell type — these include, for example, the recent SVCB and HTTPS service-binding records, with extensible up-to-date SvcParam coverage. EDNS option support includes Extended DNS Errors (EDE) whose info-code name table is user-extensible. Coverage of both widely used and historical DNS RR types is comprehensive — only the most marginal obsolete or experimental types remain unimplemented. . Applications can extend the library with any /missing/ RRTYPEs, EDNS(0) options, SVCB and HTTPS SvcParam values. Application-specified data types take precedence over any existing or later added built-in implementations. . Extensions are registered by constructing a pure resolver configuration value, rather than via IO actions on mutable global state. Adding custom data types to the library does not require a source-code fork. See the module for . The library has been deployed as part of a DANE/DNSSEC survey for many years, and performs ~108 million queries each day, over approximately 3.5 hours (while also saving results to a database and performing some SMTP STARTTLS probes). Domain-name parsing supports 8-bit RFC 1035 names directly and also supports pluggable @Text@-based parsers via external libraries, for example from the companion package. . license: BSD-3-Clause license-files: LICENSE LICENSE.dns author: Viktor Dukhovni maintainer: ietf-dane@dukhovni.org homepage: https://github.com/dnsbase/dnsbase bug-reports: https://github.com/dnsbase/dnsbase/issues copyright: 2018-2026 Viktor Dukhovni category: Network tested-with: GHC == 9.10.3 , GHC == 9.12.3 extra-source-files: CHANGELOG.md README.md common all ghc-options: -O2 -Wall default-language: GHC2024 default-extensions: BlockArguments DerivingVia MultiWayIf PatternSynonyms RequiredTypeArguments StrictData TypeFamilies ViewPatterns common deps build-depends: base >=4.20 && <5 , base16 ^>=1.0 , base32 >=0.3 && <0.5 , base64 ^>=1.0 , bytestring >=0.10.8 && <0.13 , crypton >=0.30 && <1.2 , containers >=0.6 && <0.9 , deepseq ^>=1.5 , hashtables >=1.2 && <1.6 , hourglass ^>=0.2.12 , iproute ^>=1.7.9 , monad-ste ^>=0.1 , mtl >=2.2 && <2.4 , network >=3.1 && <3.3 , primitive >=0.8 && <0.10 , template-haskell >=2.22 && <2.25 , text >=2.0 && <2.2 , time >=1.11 && <1.16 , transformers >=0.5 && <2.7 , unordered-containers ^>=0.2 -- Shared source layout for both the main library and the -- test-only internal library. Both compile the same .hs files -- under @src@ and @internal@; the two library stanzas differ -- only in which modules they expose. common library-source hs-source-dirs: src internal -- Test-only sub-library that exposes every module of the package. -- Tests @build-depends: dnsbase:internal@ instead of @dnsbase@ so -- they can reach internal modules without going through a hidden -- import. Built only when the package's test components are built. library internal import: all, deps, library-source visibility: private exposed-modules: Net.DNSBase Net.DNSBase.Bytes Net.DNSBase.Decode.Domain Net.DNSBase.Decode.State Net.DNSBase.Domain Net.DNSBase.EDNS Net.DNSBase.EDNS.OptNum Net.DNSBase.EDNS.Option Net.DNSBase.EDNS.Option.ECS Net.DNSBase.EDNS.Option.EDE Net.DNSBase.EDNS.Option.NSID Net.DNSBase.EDNS.Option.Opaque Net.DNSBase.EDNS.Option.Secalgs Net.DNSBase.Encode.Metric Net.DNSBase.Encode.State Net.DNSBase.Error Net.DNSBase.Extensible Net.DNSBase.Flags Net.DNSBase.Lookup Net.DNSBase.Message Net.DNSBase.Nat16 Net.DNSBase.NonEmpty Net.DNSBase.NsecTypes Net.DNSBase.Opcode Net.DNSBase.Present Net.DNSBase.RCODE Net.DNSBase.RData Net.DNSBase.RData.A Net.DNSBase.RData.CAA Net.DNSBase.RData.CSYNC Net.DNSBase.RData.Dnssec Net.DNSBase.RData.NSEC Net.DNSBase.RData.Obsolete Net.DNSBase.RData.SOA Net.DNSBase.RData.SRV Net.DNSBase.RData.SVCB Net.DNSBase.RData.SVCB.SPV Net.DNSBase.RData.SVCB.SPVList Net.DNSBase.RData.SVCB.SPVSet Net.DNSBase.RData.SVCB.SVCParamKey Net.DNSBase.RData.SVCB.SVCParamValue Net.DNSBase.RData.TLSA Net.DNSBase.RData.TXT Net.DNSBase.RData.WKS Net.DNSBase.RData.XNAME Net.DNSBase.RR Net.DNSBase.RRCLASS Net.DNSBase.RRTYPE Net.DNSBase.RRSet Net.DNSBase.Resolver Net.DNSBase.Secalgs Net.DNSBase.Text Net.DNSBase.Decode.Internal.Domain Net.DNSBase.Decode.Internal.Message Net.DNSBase.Decode.Internal.Option Net.DNSBase.Decode.Internal.RData Net.DNSBase.Decode.Internal.State Net.DNSBase.EDNS.Internal.OptNum Net.DNSBase.EDNS.Internal.Option Net.DNSBase.EDNS.Internal.Option.Opaque Net.DNSBase.Encode.Internal.Metric Net.DNSBase.Encode.Internal.State Net.DNSBase.Internal.Bytes Net.DNSBase.Internal.Domain Net.DNSBase.Internal.EDNS Net.DNSBase.Internal.Error Net.DNSBase.Internal.Flags Net.DNSBase.Internal.Message Net.DNSBase.Internal.NameComp Net.DNSBase.Internal.Nat16 Net.DNSBase.Internal.Opcode Net.DNSBase.Internal.Peer Net.DNSBase.Internal.Present Net.DNSBase.Internal.RCODE Net.DNSBase.Internal.RData Net.DNSBase.Internal.RR Net.DNSBase.Internal.RRCLASS Net.DNSBase.Internal.RRTYPE Net.DNSBase.Internal.SockIO Net.DNSBase.Internal.Text Net.DNSBase.Internal.Transport Net.DNSBase.Internal.Util Net.DNSBase.RData.Internal.XNAME Net.DNSBase.Resolver.Internal.Encoding Net.DNSBase.Resolver.Internal.Parser Net.DNSBase.Resolver.Internal.Types -- The main library. This is what downstream packages (and Hackage) -- see; @other-modules@ keeps the implementation hidden but compiled -- into the same library, so haddocks on internal symbols propagate -- to their public re-exports. library import: all, deps, library-source exposed-modules: Net.DNSBase Net.DNSBase.Bytes Net.DNSBase.Decode.Domain Net.DNSBase.Decode.State Net.DNSBase.Domain Net.DNSBase.EDNS Net.DNSBase.EDNS.Option Net.DNSBase.EDNS.Option.ECS Net.DNSBase.EDNS.Option.EDE Net.DNSBase.EDNS.Option.NSID Net.DNSBase.EDNS.Option.Opaque Net.DNSBase.EDNS.Option.Secalgs Net.DNSBase.EDNS.OptNum Net.DNSBase.Encode.Metric Net.DNSBase.Encode.State Net.DNSBase.Error Net.DNSBase.Extensible Net.DNSBase.Flags Net.DNSBase.Lookup Net.DNSBase.Message Net.DNSBase.Nat16 Net.DNSBase.NonEmpty Net.DNSBase.NsecTypes Net.DNSBase.Opcode Net.DNSBase.Present Net.DNSBase.RCODE Net.DNSBase.RData Net.DNSBase.RData.A Net.DNSBase.RData.CAA Net.DNSBase.RData.CSYNC Net.DNSBase.RData.Dnssec Net.DNSBase.RData.NSEC Net.DNSBase.RData.Obsolete Net.DNSBase.RData.SOA Net.DNSBase.RData.SRV Net.DNSBase.RData.SVCB Net.DNSBase.RData.SVCB.SPV Net.DNSBase.RData.SVCB.SPVList Net.DNSBase.RData.SVCB.SPVSet Net.DNSBase.RData.SVCB.SVCParamKey Net.DNSBase.RData.SVCB.SVCParamValue Net.DNSBase.RData.TLSA Net.DNSBase.RData.TXT Net.DNSBase.RData.WKS Net.DNSBase.RData.XNAME Net.DNSBase.Resolver Net.DNSBase.RR Net.DNSBase.RRCLASS Net.DNSBase.RRSet Net.DNSBase.RRTYPE Net.DNSBase.Secalgs Net.DNSBase.Text other-modules: Net.DNSBase.Decode.Internal.Domain Net.DNSBase.Decode.Internal.Message Net.DNSBase.Decode.Internal.Option Net.DNSBase.Decode.Internal.RData Net.DNSBase.Decode.Internal.State Net.DNSBase.EDNS.Internal.OptNum Net.DNSBase.EDNS.Internal.Option Net.DNSBase.EDNS.Internal.Option.Opaque Net.DNSBase.Encode.Internal.Metric Net.DNSBase.Encode.Internal.State Net.DNSBase.Internal.Bytes Net.DNSBase.Internal.Domain Net.DNSBase.Internal.EDNS Net.DNSBase.Internal.Error Net.DNSBase.Internal.Flags Net.DNSBase.Internal.Message Net.DNSBase.Internal.NameComp Net.DNSBase.Internal.Nat16 Net.DNSBase.Internal.Opcode Net.DNSBase.Internal.Peer Net.DNSBase.Internal.Present Net.DNSBase.Internal.RCODE Net.DNSBase.Internal.RData Net.DNSBase.Internal.RR Net.DNSBase.Internal.RRCLASS Net.DNSBase.Internal.RRTYPE Net.DNSBase.Internal.SockIO Net.DNSBase.Internal.Text Net.DNSBase.Internal.Transport Net.DNSBase.Internal.Util Net.DNSBase.RData.Internal.XNAME Net.DNSBase.Resolver.Internal.Encoding Net.DNSBase.Resolver.Internal.Parser Net.DNSBase.Resolver.Internal.Types -- Test framework dependencies, split out so individual stanzas -- can opt in. common test-deps build-depends: tasty , tasty-hunit , tasty-quickcheck common test import: all, deps hs-source-dirs: tests build-depends: dnsbase:internal test-suite domain import: test type: exitcode-stdio-1.0 main-is: domain.hs test-suite literals import: test type: exitcode-stdio-1.0 main-is: literals.hs other-modules: LiteralsParser test-suite message import: test type: exitcode-stdio-1.0 main-is: message.hs test-suite extensibility import: test, test-deps type: exitcode-stdio-1.0 main-is: extensibility.hs test-suite test import: test, test-deps type: exitcode-stdio-1.0 main-is: test.hs benchmark bench import: test hs-source-dirs: bench type: exitcode-stdio-1.0 main-is: bench.hs build-depends: tasty-bench