dnsbase-1.0.2.0: dnsbase.cabal
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
<https://hackage-content.haskell.org/package/dnsbase-1.0.0.0/candidate/docs/Net-DNSBase-Extensible.html Net.DNSBase.Extensible>
module for
<https://hackage-content.haskell.org/package/dnsbase-1.0.0.0/candidate/docs/Net-DNSBase-Extensible.html#customRRtype detailed examples>
.
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
<https://hackage.haskell.org/package/idna2008 idna2008>
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