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
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