neko-obfs-0.1.0.0: src/Parser.hs
{-# LANGUAGE OverloadedStrings #-}
module Parser where
import Control.Lens ((<&>), view, lazy)
import Data.Attoparsec.ByteString (Parser)
import qualified Data.Attoparsec.ByteString as P
import Data.Binary.Get
import Data.ByteString.Char8 (ByteString)
import Data.Word (Word32)
import GHC.Word (Word8)
obfsParser :: Parser (Word32, ByteString, Word32, ByteString)
obfsParser = do
randomLen <- P.take 4 <&> runGet getWord32be . view lazy
random <- P.take (fromIntegral randomLen)
payloadLen <- P.take 4 <&> runGet getWord32be . view lazy
payload <- P.take (fromIntegral payloadLen)
pure (randomLen, random, payloadLen, payload)