quic-0.0.0: Network/QUIC/Recovery/Misc.hs
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TupleSections #-}
module Network.QUIC.Recovery.Misc (
getPktNumPersistent
, setPktNumPersistent
, setSpeedingUp
, getSpeedingUp
, getPacketNumberSpaceDiscarded
, getAndSetPacketNumberSpaceDiscarded
, setMaxAckDaley
) where
import Data.IORef
import Network.QUIC.Connector
import Network.QUIC.Imports
import Network.QUIC.Recovery.Types
import Network.QUIC.Types
----------------------------------------------------------------
-- Packet number for 1st RTT sample
getPktNumPersistent :: LDCC -> IO PacketNumber
getPktNumPersistent LDCC{..} = readIORef pktNumPersistent
setPktNumPersistent :: LDCC -> IO ()
setPktNumPersistent ldcc@LDCC{..} =
getPacketNumber ldcc >>= writeIORef pktNumPersistent
----------------------------------------------------------------
setSpeedingUp :: LDCC -> IO ()
setSpeedingUp LDCC{..} = writeIORef speedingUp True
getSpeedingUp :: LDCC -> IO Bool
getSpeedingUp LDCC{..} = readIORef speedingUp
----------------------------------------------------------------
getPacketNumberSpaceDiscarded :: LDCC -> EncryptionLevel -> IO Bool
getPacketNumberSpaceDiscarded LDCC{..} lvl =
readIORef (spaceDiscarded ! lvl)
getAndSetPacketNumberSpaceDiscarded :: LDCC -> EncryptionLevel -> IO Bool
getAndSetPacketNumberSpaceDiscarded LDCC{..} lvl =
atomicModifyIORef' (spaceDiscarded ! lvl) (True,)
----------------------------------------------------------------
setMaxAckDaley :: LDCC -> Microseconds -> IO ()
setMaxAckDaley LDCC{..} delay0 =
atomicModifyIORef'' recoveryRTT $ \rtt -> rtt { maxAckDelay1RTT = delay0 }