+ observeRequest itr soFar
+ = do isChunked <- atomically $ readItr itr itrRequestIsChunked id
+ if isChunked then
+ observeChunkedRequest itr soFar
+ else
+ observeNonChunkedRequest itr soFar
+
+ observeChunkedRequest :: Interaction -> ByteString -> IO ()
+ observeChunkedRequest itr soFar
+ = fail "FIXME: not implemented"
+
+ observeNonChunkedRequest :: Interaction -> ByteString -> IO ()
+ observeNonChunkedRequest itr soFar
+ = fail "FIXME: not implemented"
+{-
+ = do action
+ <- atomically $
+ do wantedM <- readItr itr itrReqBodyWanted id
+ if wantedM == Nothing then
+ do wasteAll <- readItr itr itrReqBodyWasteAll id
+ if wasteAll then
+ return $ wasteAllReqBody itr soFar
+ else
+ retry
+ else
+ -- 受信要求が來た。
+ if B.empty soFar then
+ return $ receiveNonChunkedReqBody itr
+ else
+ do remaining <- readItr itr itrReqChunkRemaining fromJust
+
+ let wanted = fromJust wanted
+ (chunk, input') = B.splitAt (min wanted remaining) soFar
+ newRemaining = remaining - B.length chunk
+ isOver = newRemaining == 0
+
+ writeItr itr itrReqChunkRemaining newRemaining
+ writeItr itr itrReqChunkIsOver isOver
+ writeItr itr itrReqBodyWanted (if isOver then
+ Nothing
+ else
+ Just wanted)
+ writeItr itr itrReceivedBody chunk
+
+ if isOver then
+ return $ acceptRequest input'
+ else
+ return $ observeNonChunkedRequest itr input'
+ action
+
+ receiveNonChunkedReqBody :: Interaction -> IO ()
+ receiveNonChunkedReqBody itr
+ = do wanted <- atomically $ readItr itr itrReqBodyWanted fromJust
+ remaining <- atomically $ readItr itr itrReqChunkRemaining fromJust
+
+ hWaitForInput h (-1)
+ chunk <- B.hGetNonBlocking h (min wanted remaining)
+
+ let newRemaining = remaining - B.length chunk
+ isOver = newRemaining == 0
+
+ atomically $ do writeItr itr itrReqChunkRemaining newRemaining
+ writeItr itr itrReqChunkIsOver isOver
+ writeItr itr itrReqBodyWanted (if isOver then
+ Nothing
+ else
+ Just wanted)
+ writeItr itr itrReceivedBody chunk
+
+ if isOver then
+ return $ acceptRequest B.empty
+ else
+ return $ observeNonChunkedRequest itr B.empty
+
+
+ wasteAllReqBody :: Interaction -> ByteString -> IO ()
+ wasteAllReqBody itr soFar
+ =
+
+-}