+-- #hide
module Network.HTTP.Lucu.Postprocess
- ( postprocess -- Interaction -> STM ()
- , completeUnconditionalHeaders -- Config -> Response -> IO Response
+ ( postprocess
+ , completeUnconditionalHeaders
)
where
when (not $ any (\ p -> p sc) [isSuccessful, isRedirection, isError])
$ abortSTM InternalServerError []
- ("The status code is not good for a final status: "
- ++ show sc)
+ $ Just ("The status code is not good for a final status: "
+ ++ show sc)
when (sc == MethodNotAllowed && getHeader "Allow" res == Nothing)
$ abortSTM InternalServerError []
- ("The status was " ++ show sc ++ " but no Allow header.")
+ $ Just ("The status was " ++ show sc ++ " but no Allow header.")
when (sc /= NotModified && isRedirection sc && getHeader "Location" res == Nothing)
$ abortSTM InternalServerError []
- ("The status code was " ++ show sc ++ " but no Location header.")
+ $ Just ("The status code was " ++ show sc ++ " but no Location header.")
when (itrRequest itr /= Nothing)
$ relyOnRequest itr
updateRes itr $ deleteHeader "Content-Length"
+ cType <- readHeader itr "Content-Type"
+ when (cType == Nothing)
+ $ updateRes itr $ setHeader "Content-Type" "application/octet-stream"
+
if canHaveBody then
do teM <- readHeader itr "Transfer-Encoding"
if reqVer == HttpVersion 1 1 then
in
when (teList == [] || last teList /= "chunked")
$ abortSTM InternalServerError []
- ("Transfer-Encoding must end with `chunked' "
- ++ "because this is an HTTP/1.1 request: "
- ++ te)
+ $ Just ("Transfer-Encoding must end with `chunked' "
+ ++ "because this is an HTTP/1.1 request: "
+ ++ te)
writeItr itr itrWillChunkBody True
else
Nothing -> return ()
Just "identity" -> return ()
Just te -> abortSTM InternalServerError []
- ("Transfer-Encoding must be `identity' because "
+ $ Just ("Transfer-Encoding must be `identity' because "
++ "this is an HTTP/1.0 request: "
++ te)
-
- cType <- readHeader itr "Content-Type"
- when (cType == Nothing)
- $ updateRes itr $ setHeader "Content-Type" "application/octet-stream"
else
-- body 関連のヘッダを削除。但し HEAD なら Content-* は殘す
do updateRes itr $ deleteHeader "Transfer-Encoding"