ouroboros-network
Safe HaskellNone
LanguageHaskell2010

Ouroboros.Network.PeerSelection.RootPeersDNS.DNSActions

Synopsis

DNS based actions for local and public root providers

data DNSActions peerAddr resolver (m :: Type -> Type) Source #

Dictionary of DNS actions vocabulary

Constructors

DNSActions 

Fields

data PeerActionsDNS peeraddr resolver (m :: Type -> Type) Source #

Record of some parameters that are commonly used together

TODO: rename as PeerDNSActions; can we bundle paToPeerAddr with DNSActions?

Constructors

PeerActionsDNS 

Fields

type SRVPrefix = Domain #

Type of a DNS SRV prefix as defined by CIP#0155

DNSActions IO

ioDNSActions :: Tracer IO DNSTrace -> DNSLookupType -> (IP -> PortNumber -> peerAddr) -> DNSActions peerAddr Resolver IO Source #

IO DNSActions which resolve domain names with Resolver.

The IPv4 and IPv6 addresses the node will be using should determine the LookupReqs so that we can avoid lookups for address types that wont be used.

It guarantees that returned TTLs are strictly greater than 0.

type DNSLookupResult peerAddr = Either [DNSError] [(peerAddr, TTL)] Source #

Wraps lookup result for client code

Utils

Resource

newtype Resource (m :: Type -> Type) a Source #

Evolving resource; We use it to reinitialise the DNS library if the `etcresolv.conf` file was modified.

Note: constantResource and retryResource are written using a simplified approach inspired by _"The Different Aspects of Monads and Mixins"_, by Bruno C. d S. Oliveira, see https://www.youtube.com/watch?v=pfwP4hXM5hA.

Constructors

Resource 

Fields

Instances

Instances details
Functor m => Functor (Resource m) Source # 
Instance details

Defined in Ouroboros.Network.PeerSelection.RootPeersDNS.DNSActions

Methods

fmap :: (a -> b) -> Resource m a -> Resource m b #

(<$) :: a -> Resource m b -> Resource m a #

retryResource :: forall (m :: Type -> Type) e a. MonadDelay m => Tracer m e -> NonEmpty DiffTime -> Resource m (Either e a) -> Resource m a Source #

A Resource which will exhibit the given Resource but retry it with a given delay until a success. On first success it will reset the delays.

constantResource :: forall (m :: Type -> Type) a. Applicative m => a -> Resource m a Source #

Exposed for testing purposes

dispatchLookupWithTTL :: MonadAsync m => DNSLookupType -> (resolver -> resolvConf -> Domain -> TYPE -> m (Maybe (Either DNSError DNSMessage))) -> Tracer m DNSTrace -> (IP -> PortNumber -> peerAddr) -> DNSPeersKind -> RelayAccessPoint -> resolvConf -> resolver -> StdGen -> m (DNSLookupResult peerAddr) Source #

Error type

Tracing types

data DNSTrace Source #

Provides DNS lookup trace information

Constructors

DNSLookupResult

DNS lookup result

Fields

DNSLookupError DNSPeersKind (Maybe DNSLookupType) Domain DNSError

DNS lookup error

SRVLookupResult DNSPeersKind Domain [(Domain, Word16, Word16, Word16, TTL)] 
SRVLookupError

SRV resolution errors, all dns errors are traced with DNSLookupError

Fields

Instances

Instances details
Show DNSTrace Source # 
Instance details

Defined in Ouroboros.Network.PeerSelection.RootPeersDNS.DNSActions

data DNSPeersKind Source #

Bundled with DNS lookup trace for observability