quic-0.3.2: Network/QUIC/Info.hs
module Network.QUIC.Info where
import Data.ByteString ()
import Network.QUIC.Connection
import Network.QUIC.Types
import Network.QUIC.Types.Info
import qualified Network.QUIC.Parameters as P
import qualified Network.Socket as NS
----------------------------------------------------------------
-- | Getting information about a connection.
getConnectionInfo :: Connection -> IO ConnectionInfo
getConnectionInfo conn = do
sock <- getSocket conn
-- fixme: this is undefined
mysa <- NS.getSocketName sock
peersa <- peerSockAddr <$> getPathInfo conn
mycid <- getMyCID conn
peercid <- getPeerCID conn
peerdgsize <- P.maxDatagramFrameSize <$> getPeerParameters conn
c <- getCipher conn RTT1Level
mproto <- getApplicationProtocol conn
mode <- getTLSMode conn
r <- getRetried conn
v <- getVersion conn
return
ConnectionInfo
{ version = v
, cipher = c
, alpn = mproto
, handshakeMode = mode
, retry = r
, localSockAddr = mysa
, remoteSockAddr = peersa
, localCID = mycid
, remoteCID = peercid
, remoteDatagramFrameSize = peerdgsize
}
----------------------------------------------------------------
-- | Statistics of a connection.
data ConnectionStats = ConnectionStats
{ txBytes :: Int
, rxBytes :: Int
}
deriving (Eq, Show)
-- | Getting statistics of a connection.
getConnectionStats :: Connection -> IO ConnectionStats
getConnectionStats conn = do
tx <- getTxBytes conn
rx <- getRxBytes conn
return $
ConnectionStats
{ txBytes = tx
, rxBytes = rx
}