snap-server 0.2.1 → 0.2.2
raw patch · 2 files changed
+15/−6 lines, 2 files
Files
- snap-server.cabal +1/−1
- src/Snap/Internal/Http/Parser.hs +14/−5
snap-server.cabal view
@@ -1,5 +1,5 @@ name: snap-server-version: 0.2.1+version: 0.2.2 synopsis: A fast, iteratee-based, epoll-enabled web server for the Snap Framework description: This is the first developer prerelease of the Snap framework. Snap is a
src/Snap/Internal/Http/Parser.hs view
@@ -30,6 +30,7 @@ import Data.Char import Data.List (foldl') import Data.Int+import Data.Iteratee.WrappedByteString import Data.Map (Map) import qualified Data.Map as Map import Data.Maybe (catMaybes)@@ -97,6 +98,8 @@ -- | Given an iteratee, produces a new one that wraps chunks sent to it with a -- chunked transfer-encoding. Example usage: --+-- FIXME: sample output no longer looks like this, we buffer now+-- -- > > (writeChunkedTransferEncoding -- > (enumLBS (L.fromChunks ["foo","bar","quux"])) -- > stream2stream) >>=@@ -107,7 +110,8 @@ -- writeChunkedTransferEncoding :: (Monad m) => Enumerator m a -> Enumerator m a writeChunkedTransferEncoding enum it = do- i <- wrap it+ i' <- wrap it+ i <- bufferIteratee i' enum i where@@ -121,13 +125,18 @@ (Chunk x') -> do let x = S.concat $ L.toChunks $ fromWrap x' let n = S.length x- let o = L.fromChunks [ toHex (toEnum n)+ if n == 0+ then do+ i' <- wrap iter+ return $ Cont i' Nothing+ else do+ let o = S.concat [ toHex (toEnum n) , "\r\n" , x , "\r\n" ]- v <- runIter iter (Chunk $ toWrap o)- i <- checkIfDone wrap v- return $ Cont i Nothing+ v <- runIter iter (Chunk $ WrapBS o)+ i <- checkIfDone wrap v+ return $ Cont i Nothing chunkParserToEnumerator :: (Monad m) =>