@@ -128,23 +128,19 @@ parseRequest port lines' handle remoteHost' = do
128128 , serverPort = port
129129 , requestHeaders = heads
130130 , urlScheme = HTTP
131− , requestBody = requestBodyHandle handle len
131+ , requestBody = Source len $ requestBodyHandle handle
132132 , errorHandler = System.IO.hPutStr System.IO.stderr
133133 , remoteHost = B8.pack remoteHost'
134134 }
135135
136−requestBodyHandle :: Handle -> Int -> Enumerator
137−requestBodyHandle h len0 = Enumerator $ helper len0 where
138− helper 0 _ a = return $ Right a
139− helper len iter a = do
140− let maxChunkSize = 1024
141− bs <- BS.hGet h $ min len maxChunkSize
142− let newLen = len - BS.length bs
143− putStrLn $ "reading a chunk of size " ++ show (BS.length bs)
144− ea' <- iter a bs
145− case ea' of
146− Left a' -> return $ Left a'
147− Right a' -> helper newLen iter a'
136+requestBodyHandle :: Handle -> Int -> IO (Maybe (B8.ByteString, Int))
137+requestBodyHandle _ 0 = return Nothing
138+requestBodyHandle h len = do
139+ let maxChunkSize = 1024
140+ bs <- BS.hGet h $ min len maxChunkSize
141+ let newLen = len - BS.length bs
142+ putStrLn $ "reading a chunk of size " ++ show (BS.length bs)
143+ return $ Just (bs, newLen)
148144
149145parseFirst :: (StringLike s, MonadFailure InvalidRequest m) =>
150146 s