module Network.Pcap.Streaming.Internal where import qualified Data.Attoparsec.ByteString as A import qualified Data.ByteString as BS import Data.Word (Word32) import Network.Pcap --- -- | A packet. Assumes nothing about -- the contents or structure of the `bytes` value. data Packet = Packet { header :: PktHdr, bytes :: BS.ByteString } deriving (Eq, Show) packetP :: A.Parser Packet packetP = do hdr <- pktHeader bts <- A.take . fromIntegral $ hdrCaptureLength hdr pure $ Packet hdr bts pktHeader :: A.Parser PktHdr pktHeader = PktHdr <$> four <*> four <*> four <*> four four :: A.Parser Word32 four = BS.foldr' (\w acc -> acc * 256 + fromIntegral w) 0 <$> A.take 4 {-# INLINE four #-}