@@ -134,14 +134,16 @@ parseRequest port lines' handle remoteHost' = do
134134 , remoteHost = B8.pack remoteHost'
135135 }
136136
137−requestBodyHandle :: Handle -> MVar Int -> IO (Maybe BS.ByteString)
138−requestBodyHandle h mlen = modifyMVar mlen helper where
139− helper :: Int -> IO (Int, Maybe BS.ByteString)
140− helper 0 = return (0, Nothing)
141− helper len = do
137+requestBodyHandle :: Handle -> MVar Int -> Enumerator a
138+requestBodyHandle h mlen iter accum = modifyMVar mlen (helper accum) where
139+ helper a 0 = return (0, a)
140+ helper a len = do
142141 bs <- BS.hGet h len
143142 let newLen = len - BS.length bs
144− return (newLen, Just bs)
143+ ea' <- iter a bs
144+ case ea' of
145+ Left a' -> return (newLen, a')
146+ Right a' -> helper a' newLen
145147
146148parseFirst :: (StringLike s, MonadFailure InvalidRequest m) =>
147149 s