@@ -47,16 +47,13 @@ fileRange reqidxhdr rspidxhdr s0 hs0 path mpart =
4747 liftIO . try $ checkContentLength s0 hs0
4848 where
4949 mRange = reqidxhdr ! idxRange
50− mContentLength = rspidxhdr ! idxContentLength
5150
5251 checkContentLength s' hdr' = do
53− quad@(s, hdr, beg, len) <- checkMpart s' hdr' mpart
52+ (s, hdr, beg, len) <- checkMpart s' hdr' mpart
5453 -- We respect Content-Length if exists.
5554 -- The validity of Content-Length's value is Applications's
5655 -- responsibility.
57− case mContentLength of
58− Nothing -> return (s, addContentLength len hdr, beg, len)
59− _ -> return quad
56+ return (s, addContentLength rspidxhdr len hdr, beg, len)
6057
6158 checkMpart s hdr Nothing = do
6259 -- We don't know the size of the file.
@@ -253,15 +250,17 @@ hasBody s req = sc /= 204
253250
254251----------------------------------------------------------------
255252
256−addContentLength :: Integer -> H.ResponseHeaders -> H.ResponseHeaders
257−addContentLength cl hdrs = (H.hContentLength, B.pack $ show cl) : hdrs
258−
259253addAcceptRanges :: H.ResponseHeaders -> H.ResponseHeaders
260254addAcceptRanges hdrs = (hAcceptRanges, "bytes") : hdrs
261255
262256addTransferEncoding :: H.ResponseHeaders -> H.ResponseHeaders
263257addTransferEncoding hdrs = (hTransferEncoding, "chunked") : hdrs
264258
259+addContentLength :: IndexedHeader -> Integer -> H.ResponseHeaders -> H.ResponseHeaders
260+addContentLength rspidxhdr cl hdrs = case rspidxhdr ! idxContentLength of
261+ Nothing -> (H.hContentLength, B.pack $ show cl) : hdrs
262+ _ -> hdrs
263+
265264addServer :: IndexedHeader -> H.ResponseHeaders -> H.ResponseHeaders
266265addServer rspidxhdr hdrs = case rspidxhdr ! idxServer of
267266 Nothing -> (hServer, defaultServerValue) : hdrs