packages feed

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)