on master help sign in
Revert "Don't have double content-length headers snoyberg/keter#52"

This reverts commit 76d474873e777a65649dcec295116e4b7a430506.

commit9edc2aab344a6a2d548892aea91319efe0913306 authorMichael Snoyman <michael@snoyman.com> dateMon 20 Oct 2014, 07:33 (12 years ago) parentd7a0c8e
3 files changed+6−29
warp/Network/Wai/Handler/Warp/Response.hs+5−9 warp/test/ResponseSpec.hs+1−2 warp/test/RunSpec.hs−18
warp/Network/Wai/Handler/Warp/Response.hs+5−9
@@ -67,17 +67,16 @@ mapRight f eith = case eith of
6767
6868fileRange :: H.Status -> H.ResponseHeaders -> FilePath
6969 -> Maybe FilePart -> Maybe HeaderValue
70− -> IndexedHeader
7170 -> IO (Either IOException
7271 (H.Status, H.ResponseHeaders, Integer, Integer))
73−fileRange s0 hs0 path mPart mRange rspidxhdr =
72+fileRange s0 hs0 path mPart mRange =
7473 mapRight (fileRangeSized . fromIntegral . P.fileSize) <$>
7574 try (P.getFileStatus path)
7675 where
7776 fileRangeSized :: Integer -> (H.Status, H.ResponseHeaders, Integer, Integer)
7877 fileRangeSized fileSize =
7978 let (beg, end, len, isEntire) = checkPartRange fileSize mPart mRange
80− hs1 = addContentLength rspidxhdr len hs0
79+ hs1 = addContentLength len hs0
8180 hs | isEntire = hs1
8281 | otherwise = addContentRange beg end fileSize hs1
8382 s | isEntire = s0
@@ -214,7 +213,7 @@ sendRsp :: Connection
214213 -> Rsp
215214 -> IO ()
216215sendRsp conn ver s0 hs0 (RspFile path mPart mRange hook) = do
217− ex <- fileRange s0 hs path mPart mRange rspidxhdr
216+ ex <- fileRange s0 hs path mPart mRange
218217 case ex of
219218 Left _ex ->
220219#ifdef WARP_DEBUG
@@ -229,7 +228,6 @@ sendRsp conn ver s0 hs0 (RspFile path mPart mRange hook) = do
229228 s2 = H.status404
230229 hs2 = replaceHeader H.hContentType "text/plain; charset=utf-8" hs0
231230 body = fromByteString "File not found"
232− rspidxhdr = indexResponseHeader hs0
233231
234232----------------------------------------------------------------
235233
@@ -358,10 +356,8 @@ addAcceptRanges hdrs = (hAcceptRanges, "bytes") : hdrs
358356addTransferEncoding :: H.ResponseHeaders -> H.ResponseHeaders
359357addTransferEncoding hdrs = (hTransferEncoding, "chunked") : hdrs
360358
361−addContentLength :: IndexedHeader -> Integer -> H.ResponseHeaders -> H.ResponseHeaders
362−addContentLength rspidxhdr cl hdrs = case rspidxhdr ! idxContentLength of
363− Nothing -> (H.hContentLength, len) : hdrs
364− Just _ -> hdrs
359+addContentLength :: Integer -> H.ResponseHeaders -> H.ResponseHeaders
360+addContentLength cl hdrs = (H.hContentLength, len) : hdrs
365361 where
366362 len = B.pack $ show cl
367363
warp/test/ResponseSpec.hs+1−2
@@ -9,7 +9,6 @@ import Network (connectTo, PortID (PortNumber))
99import Network.HTTP.Types
1010import Network.Wai
1111import Network.Wai.Handler.Warp
12−import Network.Wai.Handler.Warp.Header (indexResponseHeader)
1312import Network.Wai.Handler.Warp.Response
1413import RunSpec (withApp)
1514import System.IO (hClose, hFlush)
@@ -75,7 +74,7 @@ testFileRange :: String
7574 -> Either String (Status, ResponseHeaders, Integer, Integer)
7675 -> Spec
7776testFileRange desc s rsphdr file mPart mRange ans = it desc $ do
78− eres <- fileRange s rsphdr file mPart mRange (indexResponseHeader rsphdr)
77+ eres <- fileRange s rsphdr file mPart mRange
7978 let res = case eres of
8079 Left e -> Left $ show e
8180 Right r -> Right r
warp/test/RunSpec.hs−18
@@ -378,24 +378,6 @@ spec = do
378378 Right res <- HTTP.simpleHTTP (HTTP.getRequest $ "http://127.0.0.1:" ++ show port)
379379 HTTP.rspBody res `shouldBe` "HelloHelloHelloHello"
380380
381− it "file with length: one content-length header" $ do
382− let fp = "LICENSE"
383− size <- fmap S.length $ S.readFile fp
384− let app _ = ($ responseFile status200 [("content-length", S8.pack $ show size)] fp Nothing)
385− withApp defaultSettings app $ \port -> do
386− Right res <- HTTP.simpleHTTP (HTTP.getRequest $ "http://127.0.0.1:" ++ show port)
387− map HTTP.hdrValue (HTTP.retrieveHeaders HTTP.HdrContentLength res)
388− `shouldBe` [show size]
389−
390− it "file without length: one content-length header" $ do
391− let fp = "LICENSE"
392− size <- fmap S.length $ S.readFile fp
393− let app _ = ($ responseFile status200 [] fp Nothing)
394− withApp defaultSettings app $ \port -> do
395− Right res <- HTTP.simpleHTTP (HTTP.getRequest $ "http://127.0.0.1:" ++ show port)
396− map HTTP.hdrValue (HTTP.retrieveHeaders HTTP.HdrContentLength res)
397− `shouldBe` [show size]
398−
399381consumeBody :: IO ByteString -> IO [ByteString]
400382consumeBody body =
401383 loop id