{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Utils (
loadAFrame
-- , loadPcapIntoFrameNoCache
)
where
import MptcpAnalyzer.ArtificialFields
import MptcpAnalyzer.Pcap
import MptcpAnalyzer.Stream
import MptcpAnalyzer.Types
import qualified MptcpAnalyzer.Utils.Text as T
import Net.Tcp.Connection
import Tshark.Main
import Control.Monad.IO.Class (liftIO)
import Data.Either (fromRight)
import Distribution.Simple.Utils
import Frames (ColumnHeaders, ElField, FrameRec)
import qualified Frames.CSV
import qualified Frames.InCore
import MptcpAnalyzer.Cache (CacheConfig(..))
import MptcpAnalyzer.Loader (loadPcapIntoFrame, loadPcapIntoFrameNoCache)
import Polysemy (Final, Members, Sem, runFinal)
import qualified Polysemy as P
import qualified Polysemy.Embed as P
import qualified Polysemy.IO as P
import qualified Polysemy.Internal as P
import Polysemy.Log (Log)
import qualified Polysemy.Log as Log
import Polysemy.Log.Colog (interpretLogStdout)
import System.Exit
cacheDisabledConfig :: CacheConfig
cacheDisabledConfig = CacheConfig {
cacheFolder = "/tmp"
, cacheEnabled = False
}
-- loadAFrame :: IO (FrameFiltered TcpConnection Packet)
-- loadAFrame = do
-- aframe <- P.runM
-- $ interpretLogStdout
-- $ runCache cacheDisabledConfig
-- runTests
-- return aframe
-- putStrLn "finished"
-- loadAFrame
-- (aframe :: FrameFiltered TcpConnection Packet) <- case buildFrameFromStreamId (fromRight (error "should not happen") eFrame1) (StreamId 0) of
-- Left err -> error err
-- Right aframe -> return aframe
loadAFrame :: FilePath -> StreamId Tcp -> IO (FrameFiltered TcpConnection Packet)
loadAFrame = loadAFrameWithOpts defaultTsharkPrefs
loadAFrameWithOpts :: TsharkParams -> FilePath -> StreamId Tcp -> IO (FrameFiltered TcpConnection Packet)
loadAFrameWithOpts tsharkParams path streamId = do
frame1 <- loadPcapIntoFrameNoCache tsharkParams path
(aframe :: FrameFiltered TcpConnection Packet) <- case buildFrameFromStreamId (fromRight (error "should not happen") frame1) streamId of
Left err -> error err
Right aframe -> return aframe
return aframe
-- runTests :: (Members '[P.Embed IO, Log, Cache] r) => Sem r (FrameFiltered TcpConnection Packet)
-- runTests = do
-- -- :: Either String (Frame Packet)
-- frame1 <- loadPcapIntoFrame defaultTsharkPrefs "examples/client_2_cleaned.pcapng"
-- (aframe :: FrameFiltered TcpConnection Packet) <- case buildFrameFromStreamId (fromRight (error "should not happen") frame1) (StreamId 0) of
-- Left err -> error err
-- Right aframe -> return aframe
-- return aframe