Skip to content

Commit

Permalink
Make ouroboros-network-api independent of `ouroboros-network-framew…
Browse files Browse the repository at this point in the history
…ork`

This way `ouroboros-network-protocols` does not contain
`ouroboros-network-framework` as its transitive dependency.
  • Loading branch information
coot committed Nov 25, 2022
1 parent 3a2c7c2 commit a9ab8d9
Show file tree
Hide file tree
Showing 11 changed files with 152 additions and 78 deletions.
3 changes: 3 additions & 0 deletions ouroboros-network-api/ouroboros-network-api.cabal
Expand Up @@ -39,6 +39,8 @@ library
Ouroboros.Network.SizeInBytes
Ouroboros.Network.Util.ShowProxy

Ouroboros.Network.Protocol.Limits

Ouroboros.Network.PeerSelection.LedgerPeers.Type
Ouroboros.Network.PeerSelection.PeerMetric.Type
Ouroboros.Network.PeerSelection.RelayAccessPoint
Expand Down Expand Up @@ -67,6 +69,7 @@ library
io-classes ^>=0.3,
network-mux >=0.1 && <1.0,
strict-stm ^>=0.2,
typed-protocols ^>=0.1,

ghc-options: -Wall
-Wno-unticked-promoted-constructors
Expand Down
84 changes: 84 additions & 0 deletions ouroboros-network-api/src/Ouroboros/Network/Protocol/Limits.hs
@@ -0,0 +1,84 @@
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE QuantifiedConstraints #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}

module Ouroboros.Network.Protocol.Limits where

import Control.Exception
import Control.Monad.Class.MonadTime

import Network.TypedProtocol.Core

import Ouroboros.Network.Util.ShowProxy


data ProtocolSizeLimits ps bytes = ProtocolSizeLimits {
sizeLimitForState :: forall (pr :: PeerRole) (st :: ps).
PeerHasAgency pr st -> Word,

dataSize :: bytes -> Word
}

data ProtocolTimeLimits ps = ProtocolTimeLimits {
timeLimitForState :: forall (pr :: PeerRole) (st :: ps).
PeerHasAgency pr st -> Maybe DiffTime
}

data ProtocolLimitFailure where
ExceededSizeLimit :: forall (pr :: PeerRole) ps (st :: ps).
( forall (st' :: ps). Show (ClientHasAgency st')
, forall (st' :: ps). Show (ServerHasAgency st')
, ShowProxy ps
)
=> PeerHasAgency pr st
-> ProtocolLimitFailure
ExceededTimeLimit :: forall (pr :: PeerRole) ps (st :: ps).
( forall (st' :: ps). Show (ClientHasAgency st')
, forall (st' :: ps). Show (ServerHasAgency st')
, ShowProxy ps
)
=> PeerHasAgency pr st
-> ProtocolLimitFailure

instance Show ProtocolLimitFailure where
show (ExceededSizeLimit (stok :: PeerHasAgency pr (st :: ps))) =
concat
[ "ExceededSizeLimit ("
, showProxy (Proxy :: Proxy ps)
, ") ("
, show stok
, ")"
]
show (ExceededTimeLimit (stok :: PeerHasAgency pr (st :: ps))) =
concat
[ "ExceededTimeLimit ("
, showProxy (Proxy :: Proxy ps)
, ") ("
, show stok
, ")"
]

instance Exception ProtocolLimitFailure where


-- TODO: better limits

largeByteLimit :: Word
largeByteLimit = 2500000

smallByteLimit :: Word
smallByteLimit = 0xffff

shortWait :: Maybe DiffTime
shortWait = Just 10

longWait :: Maybe DiffTime
longWait = Just 60

waitForever :: Maybe DiffTime
waitForever = Nothing

64 changes: 64 additions & 0 deletions ouroboros-network-api/src/Ouroboros/Network/Protocol/Type.hs
@@ -0,0 +1,64 @@
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE QuantifiedConstraints #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}

module Ouroboros.Network.Protocol.Type where

import Control.Exception
import Control.Monad.Class.MonadTime

import Network.TypedProtocol.Core

import Ouroboros.Network.Util.ShowProxy


data ProtocolSizeLimits ps bytes = ProtocolSizeLimits {
sizeLimitForState :: forall (pr :: PeerRole) (st :: ps).
PeerHasAgency pr st -> Word,

dataSize :: bytes -> Word
}

data ProtocolTimeLimits ps = ProtocolTimeLimits {
timeLimitForState :: forall (pr :: PeerRole) (st :: ps).
PeerHasAgency pr st -> Maybe DiffTime
}

data ProtocolLimitFailure where
ExceededSizeLimit :: forall (pr :: PeerRole) ps (st :: ps).
( forall (st' :: ps). Show (ClientHasAgency st')
, forall (st' :: ps). Show (ServerHasAgency st')
, ShowProxy ps
)
=> PeerHasAgency pr st
-> ProtocolLimitFailure
ExceededTimeLimit :: forall (pr :: PeerRole) ps (st :: ps).
( forall (st' :: ps). Show (ClientHasAgency st')
, forall (st' :: ps). Show (ServerHasAgency st')
, ShowProxy ps
)
=> PeerHasAgency pr st
-> ProtocolLimitFailure

instance Show ProtocolLimitFailure where
show (ExceededSizeLimit (stok :: PeerHasAgency pr (st :: ps))) =
concat
[ "ExceededSizeLimit ("
, showProxy (Proxy :: Proxy ps)
, ") ("
, show stok
, ")"
]
show (ExceededTimeLimit (stok :: PeerHasAgency pr (st :: ps))) =
concat
[ "ExceededTimeLimit ("
, showProxy (Proxy :: Proxy ps)
, ") ("
, show stok
, ")"
]

instance Exception ProtocolLimitFailure where
Expand Up @@ -44,7 +44,6 @@ library
Ouroboros.Network.Protocol.Handshake.Server
Ouroboros.Network.Protocol.Handshake.Version
Ouroboros.Network.Protocol.Handshake.Unversioned
Ouroboros.Network.Protocol.Limits

Ouroboros.Network.ConnectionId
Ouroboros.Network.ConnectionHandler
Expand Down
Expand Up @@ -46,58 +46,10 @@ import Network.TypedProtocol.Pipelined
import Ouroboros.Network.Channel
import Ouroboros.Network.Driver.Simple (DecoderFailure (..),
TraceSendRecv (..))
import Ouroboros.Network.Protocol.Limits
import Ouroboros.Network.Util.ShowProxy


data ProtocolSizeLimits ps bytes = ProtocolSizeLimits {
sizeLimitForState :: forall (pr :: PeerRole) (st :: ps).
PeerHasAgency pr st -> Word,

dataSize :: bytes -> Word
}

data ProtocolTimeLimits ps = ProtocolTimeLimits {
timeLimitForState :: forall (pr :: PeerRole) (st :: ps).
PeerHasAgency pr st -> Maybe DiffTime
}

data ProtocolLimitFailure where
ExceededSizeLimit :: forall (pr :: PeerRole) ps (st :: ps).
( forall (st' :: ps). Show (ClientHasAgency st')
, forall (st' :: ps). Show (ServerHasAgency st')
, ShowProxy ps
)
=> PeerHasAgency pr st
-> ProtocolLimitFailure
ExceededTimeLimit :: forall (pr :: PeerRole) ps (st :: ps).
( forall (st' :: ps). Show (ClientHasAgency st')
, forall (st' :: ps). Show (ServerHasAgency st')
, ShowProxy ps
)
=> PeerHasAgency pr st
-> ProtocolLimitFailure

instance Show ProtocolLimitFailure where
show (ExceededSizeLimit (stok :: PeerHasAgency pr (st :: ps))) =
concat
[ "ExceededSizeLimit ("
, showProxy (Proxy :: Proxy ps)
, ") ("
, show stok
, ")"
]
show (ExceededTimeLimit (stok :: PeerHasAgency pr (st :: ps))) =
concat
[ "ExceededTimeLimit ("
, showProxy (Proxy :: Proxy ps)
, ") ("
, show stok
, ")"
]

instance Exception ProtocolLimitFailure where


driverWithLimits :: forall ps failure bytes m.
( MonadThrow m
, Show failure
Expand Down

This file was deleted.

Expand Up @@ -102,7 +102,6 @@ library

io-classes ^>=0.3,
ouroboros-network-api,
ouroboros-network-framework,
typed-protocols >=0.1 && <1.0,
typed-protocols-cborg
>=0.1 && <1.0
Expand Down
Expand Up @@ -26,7 +26,6 @@ import Text.Printf

import Network.TypedProtocol.Codec.CBOR

import Ouroboros.Network.Driver.Limits
import Ouroboros.Network.Protocol.BlockFetch.Type
import Ouroboros.Network.Protocol.Limits

Expand Down
Expand Up @@ -18,7 +18,6 @@ import Control.Monad.Class.MonadTime

import Network.TypedProtocol.Codec.CBOR

import Ouroboros.Network.Driver.Limits
import Ouroboros.Network.Protocol.ChainSync.Type
import Ouroboros.Network.Protocol.Limits

Expand Down
Expand Up @@ -28,7 +28,6 @@ import qualified Codec.CBOR.Read as CBOR
import Network.TypedProtocol.Codec.CBOR
import Network.TypedProtocol.Core

import Ouroboros.Network.Driver.Limits
import Ouroboros.Network.Protocol.KeepAlive.Type
import Ouroboros.Network.Protocol.Limits

Expand Down
Expand Up @@ -27,7 +27,6 @@ import Text.Printf

import Network.TypedProtocol.Codec.CBOR

import Ouroboros.Network.Driver.Limits
import Ouroboros.Network.Protocol.Limits
import Ouroboros.Network.Protocol.TxSubmission2.Type

Expand Down

0 comments on commit a9ab8d9

Please sign in to comment.