ouroboros-network-0.1.0.1: A networking layer for the Ouroboros blockchain protocol
Safe Haskell None
Language Haskell2010

Ouroboros.Network.PeerSelection.RootPeersDNS

Synopsis

DNS based actions for local and public root providers

data DNSActions resolver exception m Source #

Dictionary of DNS actions vocabulary

Constructors

DNSActions

Fields

DNS resolver IO auxiliar functions

DNSActions IO

ioDNSActions :: LookupReqs -> DNSActions Resolver IOException IO Source #

Bundle of DNS Actions that runs in IO 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.

DNS based provider for local root peers

localRootPeersProvider Source #

Arguments

:: forall m peerAddr resolver exception. ( MonadAsync m, MonadDelay m, Eq ( Async m Void ), Ord peerAddr)
=> Tracer m ( TraceLocalRootPeers peerAddr exception)
-> ( IP -> PortNumber -> peerAddr)
-> ResolvConf
-> DNSActions resolver exception m
-> STM m [( Int , Map RelayAccessPoint PeerAdvertise )]

input

-> StrictTVar m ( Seq ( Int , Map peerAddr PeerAdvertise ))

output TVar

-> m Void

Resolve RelayAddress -es of local root peers using dns if needed. Local roots are provided wrapped in a StrictTVar , which value might change (re-read form a config file). The resolved dns names are available through the output StrictTVar .

data DomainAccessPoint Source #

A product of a Domain and PortNumber . After resolving the domain we will use the PortNumber to form SockAddr .

Instances

Instances details
Eq DomainAccessPoint Source #
Instance details

Defined in Ouroboros.Network.PeerSelection.RelayAccessPoint

Ord DomainAccessPoint Source #
Instance details

Defined in Ouroboros.Network.PeerSelection.RelayAccessPoint

Show DomainAccessPoint Source #
Instance details

Defined in Ouroboros.Network.PeerSelection.RelayAccessPoint

ToJSON DomainAccessPoint Source #
Instance details

Defined in Ouroboros.Network.PeerSelection.RelayAccessPoint

FromJSON DomainAccessPoint Source #
Instance details

Defined in Ouroboros.Network.PeerSelection.RelayAccessPoint

data RelayAccessPoint Source #

A relay can have either an IP address and a port number or a domain with a port number

Instances

Instances details
Eq RelayAccessPoint Source #
Instance details

Defined in Ouroboros.Network.PeerSelection.RelayAccessPoint

Ord RelayAccessPoint Source #
Instance details

Defined in Ouroboros.Network.PeerSelection.RelayAccessPoint

Show RelayAccessPoint Source #
Instance details

Defined in Ouroboros.Network.PeerSelection.RelayAccessPoint

ToJSON RelayAccessPoint Source #
Instance details

Defined in Ouroboros.Network.PeerSelection.RelayAccessPoint

FromJSON RelayAccessPoint Source #
Instance details

Defined in Ouroboros.Network.PeerSelection.RelayAccessPoint

NFData RelayAccessPoint Source #
Instance details

Defined in Ouroboros.Network.PeerSelection.RelayAccessPoint

data IP Source #

A unified IP data for IPv4 and IPv6 . To create this, use the data constructors. Or use read "192.0.2.1" :: IP , for example. Also, "192.0.2.1" can be used as literal with OverloadedStrings.

>>> (read "192.0.2.1" :: IP) == IPv4 (read "192.0.2.1" :: IPv4)
True
>>> (read "2001:db8:00:00:00:00:00:01" :: IP) == IPv6 (read "2001:db8:00:00:00:00:00:01" :: IPv6)
True

Constructors

IPv4

Fields

IPv6

Fields

Instances

Instances details
Enum IP
Instance details

Defined in Data.IP.Addr

Eq IP

Equality over IP addresses. Correctly compare IPv4 and IPv4-embedded-in-IPv6 addresses.

>>> (read "2001:db8:00:00:00:00:00:01" :: IP) == (read "2001:db8:00:00:00:00:00:01" :: IP)
True
>>> (read "2001:db8:00:00:00:00:00:01" :: IP) == (read "2001:db8:00:00:00:00:00:05" :: IP)
False
>>> (read "127.0.0.1" :: IP) == (read "127.0.0.1" :: IP)
True
>>> (read "127.0.0.1" :: IP) == (read "10.0.0.1" :: IP)
False
>>> (read "::ffff:127.0.0.1" :: IP) == (read "127.0.0.1" :: IP)
True
>>> (read "::ffff:127.0.0.1" :: IP) == (read "127.0.0.9" :: IP)
False
>>> (read "::ffff:127.0.0.1" :: IP) >= (read "127.0.0.1" :: IP)
True
>>> (read "::ffff:127.0.0.1" :: IP) <= (read "127.0.0.1" :: IP)
True
Instance details

Defined in Data.IP.Addr

Data IP
Instance details

Defined in Data.IP.Addr

Methods

gfoldl :: ( forall d b. Data d => c (d -> b) -> d -> c b) -> ( forall g. g -> c g) -> IP -> c IP Source #

gunfold :: ( forall b r. Data b => c (b -> r) -> c r) -> ( forall r. r -> c r) -> Constr -> c IP Source #

toConstr :: IP -> Constr Source #

dataTypeOf :: IP -> DataType Source #

dataCast1 :: Typeable t => ( forall d. Data d => c (t d)) -> Maybe (c IP ) Source #

dataCast2 :: Typeable t => ( forall d e. ( Data d, Data e) => c (t d e)) -> Maybe (c IP ) Source #

gmapT :: ( forall b. Data b => b -> b) -> IP -> IP Source #

gmapQl :: (r -> r' -> r) -> r -> ( forall d. Data d => d -> r') -> IP -> r Source #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> ( forall d. Data d => d -> r') -> IP -> r Source #

gmapQ :: ( forall d. Data d => d -> u) -> IP -> [u] Source #

gmapQi :: Int -> ( forall d. Data d => d -> u) -> IP -> u Source #

gmapM :: Monad m => ( forall d. Data d => d -> m d) -> IP -> m IP Source #

gmapMp :: MonadPlus m => ( forall d. Data d => d -> m d) -> IP -> m IP Source #

gmapMo :: MonadPlus m => ( forall d. Data d => d -> m d) -> IP -> m IP Source #

Ord IP
Instance details

Defined in Data.IP.Addr

Read IP
Instance details

Defined in Data.IP.Addr

Show IP
Instance details

Defined in Data.IP.Addr

IsString IP
Instance details

Defined in Data.IP.Addr

Generic IP
Instance details

Defined in Data.IP.Addr

Associated Types

type Rep IP :: Type -> Type Source #

type Rep IP
Instance details

Defined in Data.IP.Addr

DNS based provider for public root peers

publicRootPeersProvider :: forall peerAddr resolver exception a m. ( MonadThrow m, MonadAsync m, Exception exception, Ord peerAddr) => Tracer m TracePublicRootPeers -> ( IP -> PortNumber -> peerAddr) -> ResolvConf -> STM m [ RelayAccessPoint ] -> DNSActions resolver exception m -> (( Int -> m ( Set peerAddr, DiffTime )) -> m a) -> m a Source #

TODO track PeerAdvertise

resolveDomainAccessPoint :: forall exception resolver m. ( MonadThrow m, MonadAsync m, Exception exception) => Tracer m TracePublicRootPeers -> ResolvConf -> DNSActions resolver exception m -> [ DomainAccessPoint ] -> m ( Map DomainAccessPoint ( Set SockAddr )) Source #

Provides DNS resolution functionality.

DNS type re-exports

data ResolvConf Source #

Type for resolver configuration. Use defaultResolvConf to create a new value.

An example to use Google's public DNS cache instead of resolv.conf:

>>> let conf = defaultResolvConf { resolvInfo = RCHostName "8.8.8.8" }

An example to use multiple Google's public DNS cache concurrently:

>>> let conf = defaultResolvConf { resolvInfo = RCHostNames ["8.8.8.8","8.8.4.4"], resolvConcurrent = True }

An example to disable EDNS0:

>>> let conf = defaultResolvConf { resolvEDNS = [] }

An example to enable EDNS0 with a 1,280-bytes buffer:

>>> let conf = defaultResolvConf { resolvEDNS = [fromEDNS0 defaultEDNS0 { udpSize = 1280 }] }

An example to enable cache:

>>> let conf = defaultResolvConf { resolvCache = Just defaultCacheConf }

type Domain = ByteString Source #

Type for domain.

type TTL = Word32 Source #

Time to live in second.

Socket type re-exports

data PortNumber Source #

Port number. Use the Num instance (i.e. use a literal) to create a PortNumber value.

>>> 1 :: PortNumber
1
>>> read "1" :: PortNumber
1
>>> show (12345 :: PortNumber)
"12345"
>>> 50000 < (51000 :: PortNumber)
True
>>> 50000 < (52000 :: PortNumber)
True
>>> 50000 + (10000 :: PortNumber)
60000

Instances

Instances details
Bounded PortNumber
Instance details

Defined in Network.Socket.Types

Enum PortNumber
Instance details

Defined in Network.Socket.Types

Eq PortNumber
Instance details

Defined in Network.Socket.Types

Integral PortNumber
Instance details

Defined in Network.Socket.Types

Num PortNumber
Instance details

Defined in Network.Socket.Types

Ord PortNumber
Instance details

Defined in Network.Socket.Types

Read PortNumber
Instance details

Defined in Network.Socket.Types

Real PortNumber
Instance details

Defined in Network.Socket.Types

Show PortNumber
Instance details

Defined in Network.Socket.Types

Storable PortNumber
Instance details

Defined in Network.Socket.Types