on master help sign in
Chunking from blaze-builder
dfe4cdcMichael Snoyman
Network/Wai/Handler/SimpleServer.hs+4−7
@@ -46,6 +46,7 @@ import qualified Data.Enumerator as E
46import Data.Enumerator.IO (iterHandle)
46import Data.Enumerator.IO (iterHandle)
47import Control.Monad.IO.Class (liftIO)
47import Control.Monad.IO.Class (liftIO)
48import Blaze.ByteString.Builder.Enumerator (builderToByteString)
48import Blaze.ByteString.Builder.Enumerator (builderToByteString)
49+import Blaze.ByteString.Builder.HTTP (chunkedTransferEncoding)
49import Blaze.ByteString.Builder (fromByteString, Builder, toLazyByteString)
50import Blaze.ByteString.Builder (fromByteString, Builder, toLazyByteString)
50import Blaze.ByteString.Builder.Char8 (fromChar)
51import Blaze.ByteString.Builder.Char8 (fromChar)
51import Data.Monoid (mconcat)
52import Data.Monoid (mconcat)
@@ -179,16 +180,12 @@ sendResponse :: HttpVersion -> Handle -> Response -> IO ()
179sendResponse hv handle res = do
180sendResponse hv handle res = do
180 responseEnumerator res $ \s hs -> do
181 responseEnumerator res $ \s hs -> do
181 liftIO $ L.hPutStr handle $ toLazyByteString $ headers hv s hs
182 liftIO $ L.hPutStr handle $ toLazyByteString $ headers hv s hs
182− i <- E.joinI $ builderToByteString $$ E.joinI $ chunk $$ iterHandle handle
183+ i <- E.joinI $ chunk $$ E.joinI $ builderToByteString $$ iterHandle handle
183 liftIO $ B.hPutStr handle "0\r\n\r\n"
184 liftIO $ B.hPutStr handle "0\r\n\r\n"
184 return i
185 return i
185 where
186 where
186− chunk :: E.Enumeratee ByteString ByteString IO ()
187+ chunk :: E.Enumeratee Builder Builder IO ()
187− chunk = E.concatMap $ \bs ->
188+ chunk = E.map chunkedTransferEncoding -- FIXME some extra mconcat
188− [ B.pack $ showHex (B.length bs) " \r\n"
189− , bs
190− , "\r\n"
191− ]
192
189
193parseHeaderNoAttr :: ByteString -> (ByteString, ByteString)
190parseHeaderNoAttr :: ByteString -> (ByteString, ByteString)
194parseHeaderNoAttr s =
191parseHeaderNoAttr s =