@@ -67,16 +67,17 @@ mapRight f eith = case eith of
6767
6868fileRange :: H.Status -> H.ResponseHeaders -> FilePath
6969 -> Maybe FilePart -> Maybe HeaderValue
70+ -> IndexedHeader
7071 -> IO (Either IOException
7172 (H.Status, H.ResponseHeaders, Integer, Integer))
72−fileRange s0 hs0 path mPart mRange =
73+fileRange s0 hs0 path mPart mRange rspidxhdr =
7374 mapRight (fileRangeSized . fromIntegral . P.fileSize) <$>
7475 try (P.getFileStatus path)
7576 where
7677 fileRangeSized :: Integer -> (H.Status, H.ResponseHeaders, Integer, Integer)
7778 fileRangeSized fileSize =
7879 let (beg, end, len, isEntire) = checkPartRange fileSize mPart mRange
79− hs1 = addContentLength len hs0
80+ hs1 = addContentLength rspidxhdr len hs0
8081 hs | isEntire = hs1
8182 | otherwise = addContentRange beg end fileSize hs1
8283 s | isEntire = s0
@@ -213,7 +214,7 @@ sendRsp :: Connection
213214 -> Rsp
214215 -> IO ()
215216sendRsp conn ver s0 hs0 (RspFile path mPart mRange hook) = do
216− ex <- fileRange s0 hs path mPart mRange
217+ ex <- fileRange s0 hs path mPart mRange rspidxhdr
217218 case ex of
218219 Left _ex ->
219220#ifdef WARP_DEBUG
@@ -228,6 +229,7 @@ sendRsp conn ver s0 hs0 (RspFile path mPart mRange hook) = do
228229 s2 = H.status404
229230 hs2 = replaceHeader H.hContentType "text/plain; charset=utf-8" hs0
230231 body = fromByteString "File not found"
232+ rspidxhdr = indexResponseHeader hs0
231233
232234----------------------------------------------------------------
233235
@@ -356,8 +358,10 @@ addAcceptRanges hdrs = (hAcceptRanges, "bytes") : hdrs
356358addTransferEncoding :: H.ResponseHeaders -> H.ResponseHeaders
357359addTransferEncoding hdrs = (hTransferEncoding, "chunked") : hdrs
358360
359−addContentLength :: Integer -> H.ResponseHeaders -> H.ResponseHeaders
360−addContentLength cl hdrs = (H.hContentLength, len) : hdrs
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
361365 where
362366 len = B.pack $ show cl
363367