warp 3.0.10.1 → 3.0.11
raw patch · 3 files changed
+17/−8 lines, 3 files
Files
- ChangeLog.md +4/−0
- Network/Wai/Handler/Warp/Response.hs +12/−7
- warp.cabal +1/−1
ChangeLog.md view
@@ -1,3 +1,7 @@+## 3.0.11++* Better HEAD support for files [#357](https://github.com/yesodweb/wai/pull/357)+ ## 3.0.10 * Fix [missing `IORef` tweak](https://github.com/yesodweb/wai/issues/351)
Network/Wai/Handler/Warp/Response.hs view
@@ -174,6 +174,7 @@ sendResponse defServer conn ii req reqidxhdr src response = do hs <- addServerAndDate hs0 if hasBody s req then do+ -- HEAD comes here even if it does not have body. sendRsp conn ver s hs rsp T.tickle th return ret@@ -192,8 +193,9 @@ mRange = reqidxhdr ! idxRange reqinfo@(isPersist,_) = infoFromRequest req reqidxhdr (isKeepAlive, needsChunked) = infoFromResponse rspidxhdr reqinfo+ isHead = requestMethod req == H.methodHead rsp = case response of- ResponseFile _ _ path mPart -> RspFile path mPart mRange (T.tickle th)+ ResponseFile _ _ path mPart -> RspFile path mPart mRange isHead (T.tickle th) ResponseBuilder _ _ b -> RspBuilder b needsChunked ResponseStream _ _ fb -> RspStream fb needsChunked th ResponseRaw raw _ -> RspRaw raw src (T.tickle th)@@ -205,7 +207,7 @@ ---------------------------------------------------------------- -data Rsp = RspFile FilePath (Maybe FilePart) (Maybe HeaderValue) (IO ())+data Rsp = RspFile FilePath (Maybe FilePart) (Maybe HeaderValue) Bool (IO ()) | RspBuilder Builder Bool | RspStream StreamingBody Bool T.Handle | RspRaw (IO ByteString -> (ByteString -> IO ()) -> IO ()) (IO ByteString) (IO ())@@ -218,7 +220,7 @@ -> H.ResponseHeaders -> Rsp -> IO ()-sendRsp conn ver s0 hs0 (RspFile path mPart mRange hook) = do+sendRsp conn ver s0 hs0 (RspFile path mPart mRange isHead hook) = do ex <- fileRange s0 hs path mPart mRange case ex of Left _ex ->@@ -226,9 +228,13 @@ print _ex >> #endif sendRsp conn ver s2 hs2 (RspBuilder body True)- Right (s, hs1, beg, len) | len >= 0 -> do- lheader <- composeHeader ver s hs1- connSendFile conn path beg len hook [lheader]+ Right (s, hs1, beg, len)+ | len >= 0 ->+ if isHead then+ sendRsp conn ver s hs1 (RspBuilder mempty False)+ else do+ lheader <- composeHeader ver s hs1+ connSendFile conn path beg len hook [lheader] | otherwise -> do sendRsp conn ver H.status416 (filter (\(k, _) -> k /= "content-length") hs1)@@ -353,7 +359,6 @@ hasBody s req = sc /= 204 && sc /= 304 && sc >= 200- && method /= H.methodHead where sc = H.statusCode s method = requestMethod req
warp.cabal view
@@ -1,5 +1,5 @@ Name: warp-Version: 3.0.10.1+Version: 3.0.11 Synopsis: A fast, light-weight web server for WAI applications. License: MIT License-file: LICENSE