packages feed

mptcp-pm-0.0.5: src/Net/Mptcp/Types.hs

{-# OPTIONS_GHC -Wno-orphans #-}
{-# LANGUAGE DeriveGeneric, CPP #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE OverloadedStrings #-}
module Net.Mptcp.Types
where

import Data.Word
import Data.Aeson
import Net.IP
import Net.Mptcp.Connection
import Control.Lens ((^.))

--type MptcpToken = Word32
--type LocId    = Word8
----
---- |Same as SockDiagMetrics
---- data SubflowWithMetrics = SubflowWithMetrics {
----   subflowSubflow :: TcpConnection
----     -- for now let's retain DiagTcpInfo  only
----   , metrics :: [SockDiagExtension]
---- }

-- | Remote port
data RemoteId = RemoteId {
    remoteAddress :: IP
  , remotePort  :: Word16
}

--  export to the format expected by mptcpnumerics
-- could be automatically generated ?
-- toJSON :: MptcpConnection -> Value
instance ToJSON MptcpConnection where
  toJSON mptcpConn = object
    [ "name" .= toJSON (show $ mptcpConn ^. mpconClientConfig ^. mecToken)
    , "sender" .= object [
          -- TODO here we could read from sysctl ? or use another SockDiagExtension
          "snd_buffer" .= toJSON (40 :: Int)
          , "capabilities" .= object []
        ]
    , "capabilities" .= object ([])
    -- TODO generated somewhere else
    -- , "subflows" .= object ([])
    ]