Copyright | No rights reserved |
---|---|
License | UNLICENSE |
Maintainer | xenog@protonmail.com |
Stability | experimental |
Portability | POSIX |
Safe Haskell | None |
Language | Haskell2010 |
Logic and data for peer manager.
Synopsis
- versionPeerDB :: Word32
- type Score = Word8
- data PeerAddress
- = PeerAddress { }
- | PeerAddressBase
- data PeerScore
- data PeerDataVersionKey = PeerDataVersionKey
- data PeerData = PeerData !Score !Bool
- updatePeerDB :: MonadIO m => DB -> SockAddr -> Score -> Bool -> m ()
- newPeerDB :: MonadIO m => DB -> Score -> SockAddr -> m ()
- initPeerDB :: MonadUnliftIO m => DB -> Bool -> m ()
- purgePeerDB :: MonadUnliftIO m => DB -> m ()
- networkSeeds :: Network -> [HostPort]
- staticPeerScore :: Score
- netSeedScore :: Score
- netPeerScore :: Score
- encodeSockAddr :: SockAddr -> Put
- decodeSockAddr :: Get SockAddr
- getPeerDB :: MonadIO m => DB -> SockAddr -> m (Maybe PeerData)
- promotePeerDB :: MonadIO m => DB -> SockAddr -> m ()
- demotePeerDB :: MonadIO m => DB -> SockAddr -> m ()
- getNewPeerDB :: MonadUnliftIO m => DB -> [SockAddr] -> m (Maybe SockAddr)
- gotPong :: TVar [OnlinePeer] -> Word64 -> UTCTime -> Peer -> STM (Maybe NominalDiffTime)
- lastPing :: TVar [OnlinePeer] -> Peer -> STM (Maybe UTCTime)
- setPeerPing :: TVar [OnlinePeer] -> Word64 -> UTCTime -> Peer -> STM ()
- setPeerVersion :: TVar [OnlinePeer] -> Peer -> Version -> STM (Either PeerException OnlinePeer)
- setPeerVerAck :: TVar [OnlinePeer] -> Peer -> STM (Maybe OnlinePeer)
- newOnlinePeer :: TVar [OnlinePeer] -> SockAddr -> Word64 -> Peer -> Async () -> STM OnlinePeer
- peerString :: TVar [OnlinePeer] -> Peer -> STM Text
- findPeer :: TVar [OnlinePeer] -> Peer -> STM (Maybe OnlinePeer)
- insertPeer :: TVar [OnlinePeer] -> OnlinePeer -> STM ()
- modifyPeer :: TVar [OnlinePeer] -> Peer -> (OnlinePeer -> OnlinePeer) -> STM ()
- removePeer :: TVar [OnlinePeer] -> Peer -> STM ()
- findPeerAsync :: TVar [OnlinePeer] -> Async () -> STM (Maybe OnlinePeer)
- removePeerAsync :: TVar [OnlinePeer] -> Async () -> STM ()
Documentation
versionPeerDB :: Word32 Source #
Database version.
data PeerAddress Source #
Peer address key in database.
PeerAddress | |
| |
PeerAddressBase |
Instances
Peer score key in database.
data PeerDataVersionKey Source #
Database version key.
Instances
Peer data.
updatePeerDB :: MonadIO m => DB -> SockAddr -> Score -> Bool -> m () Source #
Update peer score and pass in database.
newPeerDB :: MonadIO m => DB -> Score -> SockAddr -> m () Source #
Add a peer to database if it is not already there.
initPeerDB :: MonadUnliftIO m => DB -> Bool -> m () Source #
Initialize peer database, purging it of conflicting records if version doesn't match current one.
purgePeerDB :: MonadUnliftIO m => DB -> m () Source #
Purge conflicting records from database.
networkSeeds :: Network -> [HostPort] Source #
Get static network seeds.
staticPeerScore :: Score Source #
Get default score for statically-defined peers.
netSeedScore :: Score Source #
Get default score for network seeds.
netPeerScore :: Score Source #
Get default score for discovered peers.
encodeSockAddr :: SockAddr -> Put Source #
Serialize a network address/port.
decodeSockAddr :: Get SockAddr Source #
Deserialize a network address/port.
getPeerDB :: MonadIO m => DB -> SockAddr -> m (Maybe PeerData) Source #
Get database entry for provided peer address.
promotePeerDB :: MonadIO m => DB -> SockAddr -> m () Source #
Promote a peer by improving its score (decreasing by one).
demotePeerDB :: MonadIO m => DB -> SockAddr -> m () Source #
Demote a peer increasing its score by one.
getNewPeerDB :: MonadUnliftIO m => DB -> [SockAddr] -> m (Maybe SockAddr) Source #
Get a peer from database. Pass a list of addresses to exclude.
gotPong :: TVar [OnlinePeer] -> Word64 -> UTCTime -> Peer -> STM (Maybe NominalDiffTime) Source #
Report receiving a pong from a connected peer. Will store ping roundtrip time in a window of latest eleven. Peers are returned by the manager in order of median roundtrip time.
lastPing :: TVar [OnlinePeer] -> Peer -> STM (Maybe UTCTime) Source #
Return time of last ping sent to peer, if any.
setPeerPing :: TVar [OnlinePeer] -> Word64 -> UTCTime -> Peer -> STM () Source #
Set nonce and time of last ping sent to peer.
setPeerVersion :: TVar [OnlinePeer] -> Peer -> Version -> STM (Either PeerException OnlinePeer) Source #
Set version for online peer. Will set the peer connected status to True
if a verack message has already been registered for that peer.
setPeerVerAck :: TVar [OnlinePeer] -> Peer -> STM (Maybe OnlinePeer) Source #
Register that a verack message was received from a peer.
:: TVar [OnlinePeer] | |
-> SockAddr | peer address |
-> Word64 | nonce sent to peer |
-> Peer | peer mailbox |
-> Async () | peer asynchronous handle |
-> STM OnlinePeer |
Create OnlinePeer
data structure.
peerString :: TVar [OnlinePeer] -> Peer -> STM Text Source #
Get a human-readable string for the peer address.
findPeer :: TVar [OnlinePeer] -> Peer -> STM (Maybe OnlinePeer) Source #
Find a connected peer.
insertPeer :: TVar [OnlinePeer] -> OnlinePeer -> STM () Source #
Insert or replace a connected peer.
modifyPeer :: TVar [OnlinePeer] -> Peer -> (OnlinePeer -> OnlinePeer) -> STM () Source #
Modify an online peer.
removePeer :: TVar [OnlinePeer] -> Peer -> STM () Source #
Remove an online peer.
findPeerAsync :: TVar [OnlinePeer] -> Async () -> STM (Maybe OnlinePeer) Source #
Find online peer by asynchronous handle.
removePeerAsync :: TVar [OnlinePeer] -> Async () -> STM () Source #
Remove online peer by asynchronous handle.