, newInteraction
, defaultPageContentType
- , chunksToLBS
- , chunksFromLBS
-
, writeItr
, readItr
, updateItr
)
where
+import Blaze.ByteString.Builder (Builder)
import Control.Applicative
import Control.Concurrent.STM
import Data.Ascii (Ascii)
import qualified Data.ByteString as BS
-import qualified Data.ByteString.Lazy as LBS
-import Data.Foldable
import Data.Sequence (Seq)
import qualified Data.Sequence as S
import Network.Socket
import Network.HTTP.Lucu.Request
import Network.HTTP.Lucu.Response
import OpenSSL.X509
-import Prelude.Unicode
data Interaction = Interaction {
itrConfig ∷ !Config
, itrReqBodyWanted ∷ !(TVar (Maybe Int))
, itrReqBodyWasteAll ∷ !(TVar Bool)
, itrReceivedBody ∷ !(TVar (Seq BS.ByteString))
+ , itrReceivedBodyLen ∷ !(TVar Int)
, itrWillReceiveBody ∷ !(TVar Bool)
, itrWillChunkBody ∷ !(TVar Bool)
, itrWillDiscardBody ∷ !(TVar Bool)
, itrWillClose ∷ !(TVar Bool)
- , itrBodyToSend ∷ !(TVar (Seq BS.ByteString))
+ , itrBodyToSend ∷ !(TMVar Builder)
, itrBodyIsNull ∷ !(TVar Bool)
, itrState ∷ !(TVar InteractionState)
reqBodyWanted ← newTVarIO Nothing -- Resource が要求してゐるチャンク長
reqBodyWasteAll ← newTVarIO False -- 殘りの body を讀み捨てよと云ふ要求
receivedBody ← newTVarIO S.empty
+ receivedBodyLen ← newTVarIO 0
willReceiveBody ← newTVarIO False
willChunkBody ← newTVarIO False
willDiscardBody ← newTVarIO False
willClose ← newTVarIO False
- bodyToSend ← newTVarIO S.empty
+ bodyToSend ← newEmptyTMVarIO
bodyIsNull ← newTVarIO True -- 一度でも bodyToSend が空でなくなったら False
state ← newTVarIO ExaminingRequest
, itrReqBodyWanted = reqBodyWanted
, itrReqBodyWasteAll = reqBodyWasteAll
, itrReceivedBody = receivedBody
+ , itrReceivedBodyLen = receivedBodyLen
, itrWillReceiveBody = willReceiveBody
, itrWillChunkBody = willChunkBody
, itrWroteHeader = wroteHeader
}
+{-
chunksToLBS ∷ Seq BS.ByteString → LBS.ByteString
{-# INLINE chunksToLBS #-}
chunksToLBS = LBS.fromChunks ∘ toList
chunksFromLBS ∷ LBS.ByteString → Seq BS.ByteString
{-# INLINE chunksFromLBS #-}
chunksFromLBS = S.fromList ∘ LBS.toChunks
+-}
writeItr ∷ (Interaction → TVar a) → a → Interaction → STM ()
{-# INLINE writeItr #-}