1 module Network.HTTP.Lucu.DefaultPage
2 ( getDefaultPage -- Maybe Request -> Response -> String
3 , writeDefaultPage -- Interaction -> STM ()
8 import Control.Arrow.ArrowList
9 import Control.Concurrent.STM
11 import qualified Data.ByteString.Lazy.Char8 as B
12 import Data.ByteString.Lazy.Char8 (ByteString)
14 import Network.HTTP.Lucu.Headers
15 import Network.HTTP.Lucu.Interaction
16 import Network.HTTP.Lucu.Request
17 import Network.HTTP.Lucu.Response
18 import System.IO.Unsafe
20 import Text.XML.HXT.Arrow.WriteDocument
21 import Text.XML.HXT.Arrow.XmlArrow
22 import Text.XML.HXT.Arrow.XmlIOStateArrow
23 import Text.XML.HXT.DOM.TypeDefs
24 import Text.XML.HXT.DOM.XmlKeywords
27 getDefaultPage :: Maybe Request -> Response -> String
28 getDefaultPage req res
29 = let msgA = getMsg req res
32 do [xmlStr] <- runX ( mkDefaultPage (resStatus res) msgA
34 writeDocumentToString [ (a_indent, v_1) ]
39 writeDefaultPage :: Interaction -> STM ()
41 = do wroteHeader <- readTVar (itrWroteHeader itr)
45 $ fail "writeDefaultPage: the header has already been written"
47 resM <- readTVar (itrResponse itr)
49 -- Response が不明ならばページ書込も不可
50 when (resM == Nothing)
51 $ fail "writeDefaultPage: response was Nothing"
53 let reqM = itrRequest itr
55 page = B.pack $ getDefaultPage reqM res
57 writeTVar (itrResponse itr)
58 $ Just $ setHeader "Content-Type" "application/xhtml+xml" res
60 writeTVar (itrBodyToSend itr)
64 mkDefaultPage :: (ArrowXml a) => StatusCode -> a b String -> a b XmlTree
65 mkDefaultPage status msgA
66 = let (sCode, sMsg) = statusCode status
69 += sattr "xmlns" "http://www.w3.org/1999/xhtml"
72 += txt (printf "%03d %s" sCode sMsg)
86 getMsg :: (ArrowList a) => Maybe Request -> Response -> a b String
88 = constA "FIXME: NOT IMPL"