@@ -66,23 +66,28 @@ mapRight f eith = case eith of
66----------------------------------------------------------------
66----------------------------------------------------------------
68fileRange :: H.Status -> H.ResponseHeaders -> FilePath
68fileRange :: H.Status -> H.ResponseHeaders -> FilePath
69− -> Maybe FilePart -> Maybe HeaderValue
69+ -> Maybe FilePart -> Maybe HeaderValue
70 -> IO (Either IOException
70 -> IO (Either IOException
71 (H.Status, H.ResponseHeaders, Integer, Integer))
71 (H.Status, H.ResponseHeaders, Integer, Integer))
72−fileRange s0 hs0 path mPart mRange =
72+fileRange s0 hs0 path Nothing mRange =
73− mapRight (fileRangeSized . fromIntegral . P.fileSize) <$>
73+ mapRight (fileRangeSized s0 hs0 Nothing mRange . fromIntegral . P.fileSize) <$>
74− try (P.getFileStatus path)
74+ try (P.getFileStatus path)
75+fileRange s0 hs0 _ mPart@(Just part) mRange =
76+ return . Right $ fileRangeSized s0 hs0 mPart mRange size
76− fileRangeSized :: Integer -> (H.Status, H.ResponseHeaders, Integer, Integer)
78+ size = filePartFileSize part
77− fileRangeSized fileSize =
78− let (beg, end, len, isEntire) = checkPartRange fileSize mPart mRange
79− hs1 = addContentLength len hs0
81− | otherwise = addContentRange beg end fileSize hs1
83− | otherwise = H.status206
80+fileRangeSized :: H.Status -> H.ResponseHeaders
81+ -> Maybe FilePart -> Maybe HeaderValue -> Integer
82+ -> (H.Status, H.ResponseHeaders, Integer, Integer)
83+fileRangeSized s0 hs0 mPart mRange fileSize = (s, hs, beg, len)
85+ (beg, end, len, isEntire) = checkPartRange fileSize mPart mRange
86+ hs1 = addContentLength len hs0
88+ | otherwise = addContentRange beg end fileSize hs1
90+ | otherwise = H.status206
87checkPartRange :: Integer -> Maybe FilePart -> Maybe HeaderValue
92checkPartRange :: Integer -> Maybe FilePart -> Maybe HeaderValue
88 -> (Integer, Integer, Integer, Bool)
93 -> (Integer, Integer, Integer, Bool)