import Data.Sequence (Seq, (<|), ViewR(..))
import Network
import Network.HTTP.Lucu.Config
+import Network.HTTP.Lucu.DefaultPage
import Network.HTTP.Lucu.HttpVersion
import Network.HTTP.Lucu.Interaction
import Network.HTTP.Lucu.Parser
, resStatus = BadRequest
, resHeaders = []
}
- atomically $ do writeTVar (itrResponse itr) $ Just res
- writeTVar (itrWillClose itr) True
- writeTVar (itrState itr) Done
+ atomically $ do writeItr itr itrResponse $ Just res
+ writeItr itr itrWillClose True
+ writeItr itr itrState Done
+ writeDefaultPage itr
postprocess itr
enqueue itr
action
<- atomically $
do preprocess itr
- res <- readTVar (itrResponse itr)
- if fmap isError (fmap resStatus res) == Just True then
+ isErr <- readItrF itr itrResponse (isError . resStatus)
+ if isErr == Just True then
acceptSemanticallyInvalidRequest itr input'
else
case findResource tree $ (reqURI . fromJust . itrRequest) itr of
acceptSemanticallyInvalidRequest :: Interaction -> ByteString -> STM (IO ())
acceptSemanticallyInvalidRequest itr input
- = do writeTVar (itrState itr) Done
+ = do writeItr itr itrState Done
+ writeDefaultPage itr
postprocess itr
enqueue itr
return $ acceptRequest input
, resStatus = NotFound
, resHeaders = []
}
- writeTVar (itrResponse itr) $ Just res
- writeTVar (itrState itr) Done
+ writeItr itr itrResponse $ Just res
+ writeItr itr itrState Done
+ writeDefaultPage itr
postprocess itr
enqueue itr
return $ acceptRequest input
acceptRequestForExistentResource :: Interaction -> ByteString -> ResourceDef -> STM (IO ())
acceptRequestForExistentResource itr input rsrcDef
- = do requestHasBody <- readTVar (itrRequestHasBody itr)
- writeTVar (itrState itr) (if requestHasBody
- then ExaminingHeader
- else DecidingHeader)
+ = do requestHasBody <- readItr itr itrRequestHasBody id
+ writeItr itr itrState (if requestHasBody
+ then ExaminingHeader
+ else DecidingHeader)
enqueue itr
return $ do runResource rsrcDef itr
if requestHasBody then