Dust-tools-1.0: Dust/Services/Replay/ReplayServer.hs
import System.IO
import qualified Data.ByteString as B
import Data.ByteString.Char8 (pack)
import Data.Serialize
import Text.Printf (printf)
import Data.List as L
import Control.Concurrent
import Network.Socket (Socket, PortNumber(..))
import Network.Socket.ByteString (recv, sendAll)
import System.Entropy
import Data.Word (Word16)
import System.Environment (getArgs)
import Dust.Model.Port
import Dust.Model.Packet
import Dust.Model.TrafficModel
import qualified Dust.Network.TcpServer as TCP
import qualified Dust.Network.UdpServer as UDP
import Dust.Model.Observations (loadObservations, makeModel)
import Dust.Services.Replay.Replay
main :: IO()
main = do
args <- getArgs
case args of
(pspath:maskfile:_) -> do
mask <- loadMask maskfile
bs <- B.readFile pspath
let eitherStream = (decode bs)::(Either String Stream)
case eitherStream of
Left error -> putStrLn "Could not load packetstream file"
Right stream -> replayServer stream mask
(pspath:_) -> do
bs <- B.readFile pspath
let eitherStream = (decode bs)::(Either String Stream)
case eitherStream of
Left error -> putStrLn "Could not load packetstream file"
Right stream -> replayServer stream (PacketMask [])
otherwise -> putStrLn "Usage: replay-server [packetstream-file] <mask-file>"
replayServer :: Stream -> PacketMask -> IO()
replayServer stream@(Stream protocol rport packets) mask = do
let host = "166.78.129.122"
let port = 1195 :: PortNumber
case protocol of
ProtocolTCP -> do
let config = TCPConfig (PortNum rport) True
TCP.server host port (replayStream config stream mask)
ProtocolUDP -> do
let config = UDPConfig (PortNum rport) True host True
UDP.server host port (replayStream config stream mask)