quic-0.1.9: 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}