-- |
-- Module      : Network.TLS.Measurement
-- License     : BSD-style
-- Maintainer  : Vincent Hanquez <vincent@snarc.org>
-- Stability   : experimental
-- Portability : unknown
--
module Network.TLS.Measurement
	( Measurement(..)
	, newMeasurement
	, addBytesReceived
	, addBytesSent
	, resetBytesCounters
	, incrementNbHandshakes
	) where

import Data.Word

-- | record some data about this connection.
data Measurement = Measurement
	{ nbHandshakes  :: !Word32 -- ^ number of handshakes on this context
	, bytesReceived :: !Word32 -- ^ bytes received since last handshake
	, bytesSent     :: !Word32 -- ^ bytes sent since last handshake
	} deriving (Show,Eq)

newMeasurement :: Measurement
newMeasurement = Measurement
	{ nbHandshakes  = 0
	, bytesReceived = 0
	, bytesSent     = 0
	}

addBytesReceived :: Int -> Measurement -> Measurement
addBytesReceived sz measure =
	measure { bytesReceived = bytesReceived measure + fromIntegral sz }

addBytesSent :: Int -> Measurement -> Measurement
addBytesSent sz measure =
	measure { bytesSent = bytesSent measure + fromIntegral sz }

resetBytesCounters :: Measurement -> Measurement
resetBytesCounters measure = measure { bytesReceived = 0, bytesSent = 0 }

incrementNbHandshakes :: Measurement -> Measurement
incrementNbHandshakes measure =
	measure { nbHandshakes = nbHandshakes measure + 1 }