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)
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
→ 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