on master help sign in
Fix content-length keepalives
commitb1da2114ddf8a06a2969c2f592cee24298a99c0a authorMichael Snoyman <michael@snoyman.com> dateSun 26 Dec 2010, 20:24 (16 years ago) parent65d3136
3 files changed+4−11
Network/Wai/Handler/Warp.hs+2−10 warp.cabal+1−1 warp.hs+1
Network/Wai/Handler/Warp.hs+2−10
@@ -201,9 +201,7 @@ sendResponse :: HttpVersion -> Handle -> Response -> IO Bool
201201sendResponse hv handle (ResponseFile s hs fp) = do
202202 mapM_ (S.hPut handle) $ L.toChunks $ toLazyByteString $ headers hv s hs False
203203 unsafeSendFile handle fp
204− if lookup "content-length" hs == Nothing
205− then return False
206− else S.hPut handle "\r\n\r\n" >> return True
204+ return $ lookup "content-length" hs /= Nothing
207205sendResponse hv handle (ResponseEnumerator res) =
208206 res go
209207 where
@@ -219,10 +217,7 @@ sendResponse hv handle (ResponseEnumerator res) =
219217 chunk' i =
220218 if isChunked'
221219 then E.joinI $ chunk $$ i
222− else
223− (if isKeepAlive
224− then E.joinI $ after $$ i
225− else i)
220+ else i
226221 chunk :: E.Enumeratee Builder Builder IO Bool
227222 chunk = E.checkDone $ E.continue . step
228223 step k E.EOF = k (E.Chunks [chunkedTransferTerminator]) >>== return
@@ -231,9 +226,6 @@ sendResponse hv handle (ResponseEnumerator res) =
231226 k (E.Chunks [chunked]) >>== chunk
232227 where
233228 chunked = chunkedTransferEncoding $ mconcat builders
234− after = E.checkDone $ E.continue . after'
235− after' k E.EOF = k (E.Chunks [fromByteString "\r\n\r\n"]) >>== return
236− after' k chunks = k chunks >>== after
237229
238230parseHeaderNoAttr :: ByteString -> (ByteString, ByteString)
239231parseHeaderNoAttr s =
warp.cabal+1−1
@@ -26,7 +26,7 @@ Library
2626
2727Executable warp
2828 Main-is: warp.hs
29− ghc-options: -Wall -O2
29+ ghc-options: -Wall -O2 -threaded
3030 Build-Depends: text >= 0.8 && < 0.12
3131 , directory >= 1.0 && < 1.2
3232
warp.hs+1
@@ -29,6 +29,7 @@ app prefix Request { requestMethod = m, pathInfo = p }
2929 let ext = reverse $ takeWhile (/= '.') $ reverse file
3030 let ct = getCT ext
3131 e <- doesFileExist file
32+ -- FIXME check file size
3233 if e
3334 then return $ ResponseFile status200 [("Content-Type", ct)] file
3435 else return $ responseLBS status404 [("Content-Type", "text/plain")] "File not found"