{-# LANGUAGE
BangPatterns
+ , DoAndIfThenElse
, OverloadedStrings
, UnicodeSyntax
#-}
⊕ printStatusCode sc )
when (sc ≡ MethodNotAllowed ∧ getHeader "Allow" res ≡ Nothing)
- $ abortSTM InternalServerError []
- $ Just ("The status was " ++ show sc ++ " but no Allow header.")
+ $ abortSTM InternalServerError []
+ $ Just
+ $ A.toText ( "The status was "
+ ⊕ printStatusCode sc
+ ⊕ " but no Allow header." )
- when (sc /= NotModified ∧ isRedirection sc ∧ getHeader (C8.pack "Location") res ≡ Nothing)
- $ abortSTM InternalServerError []
- $ Just ("The status code was " ++ show sc ++ " but no Location header.")
+ when (sc /= NotModified ∧ isRedirection sc ∧ getHeader "Location" res ≡ Nothing)
+ $ abortSTM InternalServerError []
+ $ Just
+ $ A.toText ( "The status code was "
+ ⊕ printStatusCode sc
+ ⊕ " but no Location header." )
when (reqM /= Nothing) relyOnRequest
if canHaveBody then
when (reqVer ≡ HttpVersion 1 1)
- $ do updateRes $ setHeader "Transfer-Encoding" "chunked"
- writeItr itr itrWillChunkBody True
- else
+ $ do updateRes $ setHeader "Transfer-Encoding" "chunked"
+ writeItr itr itrWillChunkBody True
+ else
-- body 関連のヘッダを削除。但し HEAD なら Content-* は殘す
when (reqMethod req /= HEAD)
- $ do updateRes $ deleteHeader "Content-Type"
- updateRes $ deleteHeader "Etag"
- updateRes $ deleteHeader "Last-Modified"
+ $ do updateRes $ deleteHeader "Content-Type"
+ updateRes $ deleteHeader "Etag"
+ updateRes $ deleteHeader "Last-Modified"
conn ← readHeader "Connection"
case conn of
Nothing → return ()
Just value → when (A.toCIAscii value ≡ "close")
- $ writeItr itr itrWillClose True
+ $ writeItr itr itrWillClose True
willClose ← readItr itr itrWillClose id
when willClose
- $ updateRes $ setHeader "Connection" "close"
+ $ updateRes $ setHeader "Connection" "close"
when (reqMethod req ≡ HEAD ∨ not canHaveBody)
- $ writeTVar (itrWillDiscardBody itr) True
+ $ writeTVar (itrWillDiscardBody itr) True
readHeader ∷ CIAscii → STM (Maybe Ascii)
+ {-# INLINE readHeader #-}
readHeader = readItr itr itrResponse ∘ getHeader
updateRes ∷ (Response → Response) → STM ()
+ {-# INLINE updateRes #-}
updateRes = updateItr itr itrResponse
completeUnconditionalHeaders ∷ Config → Response → IO Response