on master help sign in
refactoring sendResponse.
commit71e6bd27c7104a2d1aaedd249f2ed63e4eb45257 authorKazu Yamamoto <kazu@iij.ad.jp> dateTue 5 Nov 2013, 12:04 (13 years ago) parenta0da0cb
1 file changed+14−18
warp/Network/Wai/Handler/Warp/Response.hs+14−18
warp/Network/Wai/Handler/Warp/Response.hs+14−18
@@ -138,29 +138,25 @@ sendResponse :: Connection
138138
139139----------------------------------------------------------------
140140
141−sendResponse conn ii restore req reqidxhdr (ResponseFile s0 hs0 path mPart) =
142− restore $ fileRange s0 hs path mPart mRange >>= sendResponseEither
141+sendResponse conn ii restore req reqidxhdr (ResponseFile s0 hs0 path mPart)
142+ | hasBody s0 req = restore $ do
143+ ex <- fileRange s0 hs path mPart mRange
144+ case ex of
145+ Left _ -> sendResponse conn ii restore req reqidxhdr notFound
146+ Right (s, hs1, beg, len) -> do
147+ lheader <- composeHeader version s hs1
148+ connSendFile conn path beg len (T.tickle th) [lheader]
149+ T.tickle th
150+ return isPersist
151+ | otherwise = restore $ sendResponseNoBody conn th version s0 hs isPersist
143152 where
144153 hs = addServer rspidxhdr $ addAcceptRanges hs0
145154 rspidxhdr = indexResponseHeader hs0
146155 th = threadHandle ii
156+ version = httpVersion req
157+ (isPersist,_) = infoFromRequest req reqidxhdr
147158 mRange = reqidxhdr ! idxRange
148−
149− sendResponseEither (Right (s, lengthyHeaders, beg, len))
150− | hasBody s req = do
151− lheader <- composeHeader version s lengthyHeaders
152− connSendFile conn path beg len (T.tickle th) [lheader]
153− T.tickle th
154− return isPersist
155− | otherwise = sendResponseNoBody conn th version s hs isPersist
156− where
157− version = httpVersion req
158− (isPersist,_) = infoFromRequest req reqidxhdr
159−
160− sendResponseEither (Left (SomeException _)) =
161− sendResponse conn ii restore req reqidxhdr notFound
162− where
163− notFound = responseLBS H.status404 [(H.hContentType, "text/plain")] "File not found"
159+ notFound = responseLBS H.status404 [(H.hContentType, "text/plain")] "File not found"
164160
165161----------------------------------------------------------------
166162