X-Git-Url: http://git.cielonegro.org/gitweb.cgi?p=Lucu.git;a=blobdiff_plain;f=Network%2FHTTP%2FLucu%2FResponseWriter.hs;h=0af4a69df02f1a78604b0bc46d3b71077a545768;hp=15f3d6884064715c1281f9f0c42fe12bdca6bc78;hb=246d66d6d3130e03834a6c3badc38711a1879aae;hpb=1de2506621977a383b991cadce024f626023908b diff --git a/Network/HTTP/Lucu/ResponseWriter.hs b/Network/HTTP/Lucu/ResponseWriter.hs index 15f3d68..0af4a69 100644 --- a/Network/HTTP/Lucu/ResponseWriter.hs +++ b/Network/HTTP/Lucu/ResponseWriter.hs @@ -24,6 +24,7 @@ import Network.HTTP.Lucu.Config import Network.HTTP.Lucu.HandleLike import Network.HTTP.Lucu.HttpVersion import Network.HTTP.Lucu.Interaction +import Network.HTTP.Lucu.Request import Network.HTTP.Lucu.Response import Prelude.Unicode import System.IO (hPutStrLn, stderr) @@ -129,14 +130,14 @@ writeBodyIfNeeded ∷ HandleLike h writeBodyIfNeeded ctx ni@(NI {..}) = join $ atomically $ - do willDiscardBody ← readTVar niWillDiscardBody - if willDiscardBody then - return $ discardBody ctx ni - else + do canHaveBody ← resCanHaveBody <$> readTVar niResponse + if canHaveBody ∧ reqMethod niRequest ≢ HEAD then if niWillChunkBody then return $ writeChunkedBody ctx ni else return $ writeNonChunkedBody ctx ni + else + return $ discardBody ctx ni discardBody ∷ HandleLike h ⇒ Context h @@ -233,7 +234,7 @@ writeResponseForSEI ∷ HandleLike h → IO () writeResponseForSEI ctx@(Context {..}) (SEI {..}) = do hPutBuilder cHandle $ convertSuccessVia ((⊥) ∷ AsciiBuilder) seiResponse - unless seiWillDiscardBody $ + when (reqMethod seiRequest ≢ HEAD) $ if seiWillChunkBody then do hPutBuilder cHandle $ BB.chunkedTransferEncoding seiBodyToSend hPutBuilder cHandle BB.chunkedTransferTerminator