X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=Network%2FHTTP%2FLucu%2FInteraction.hs;h=0dd925916cc68d7fc083d9d6c31827e883525777;hb=b340a77fa7bd051dd13a41d0a5b1ad30220bc6b6;hp=491c029b60ffbd51e2e7e425e3911325409cf389;hpb=e624f0db8c4610b36da9e4463a656e0cb8a104dd;p=Lucu.git diff --git a/Network/HTTP/Lucu/Interaction.hs b/Network/HTTP/Lucu/Interaction.hs index 491c029..0dd9259 100644 --- a/Network/HTTP/Lucu/Interaction.hs +++ b/Network/HTTP/Lucu/Interaction.hs @@ -1,3 +1,4 @@ +-- #hide module Network.HTTP.Lucu.Interaction ( Interaction(..) , InteractionState(..) @@ -24,11 +25,16 @@ import Network.HTTP.Lucu.Request import Network.HTTP.Lucu.Response data Interaction = Interaction { - itrConfig :: Config - , itrRemoteHost :: HostName - , itrRequest :: Maybe Request - , itrResponse :: TVar (Maybe Response) - + itrConfig :: Config + , itrRemoteHost :: HostName + , itrResourcePath :: Maybe [String] + , itrRequest :: Maybe Request + , itrResponse :: TVar (Maybe Response) + + -- FIXME: この三つは本來 TVar であるべきでないので、唯の Bool にす + -- るに越した事は無いが、それは重要でない。そんな golf で自分の貴重 + -- な時間を /dev/null に突っ込むのは、他にしたい事が何も無くなって + -- からにすべき。 , itrRequestHasBody :: TVar Bool , itrRequestIsChunked :: TVar Bool , itrExpectedContinue :: TVar Bool @@ -55,9 +61,8 @@ data Interaction = Interaction { } -- Resource の視點で見た時の状態。常に上から下へ行き、逆行しない。初期 --- 状態は ExaminingHeader (リクエストボディが有る時) または --- DecidingHeader (無い時)。終了状態は常に Done -data InteractionState = ExaminingHeader +-- 状態は ExaminingRequest。 +data InteractionState = ExaminingRequest | GettingBody | DecidingHeader | DecidingBody @@ -94,16 +99,17 @@ newInteraction conf host req bodyToSend <- newTVarIO B.empty bodyIsNull <- newTVarIO True -- 一度でも bodyToSend が空でなくなったら False - state <- newTVarIO undefined + state <- newTVarIO ExaminingRequest wroteContinue <- newTVarIO False wroteHeader <- newTVarIO False return $ Interaction { - itrConfig = conf - , itrRemoteHost = host - , itrRequest = req - , itrResponse = responce + itrConfig = conf + , itrRemoteHost = host + , itrResourcePath = Nothing + , itrRequest = req + , itrResponse = responce , itrRequestHasBody = requestHasBody , itrRequestIsChunked = requestIsChunked