X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=Network%2FHTTP%2FLucu%2FRequestReader.hs;h=9307c8dcba499b1a3adeeb920ba0fe6238c59b37;hb=3fe5ca3bca04e0124a5f2440e893dc5375e0bb51;hp=d3b8daad721a88b8b28a700c28565a278101d20a;hpb=70bf5bd248aa426ca4e410b3fb9a0529354aedaf;p=Lucu.git diff --git a/Network/HTTP/Lucu/RequestReader.hs b/Network/HTTP/Lucu/RequestReader.hs index d3b8daa..9307c8d 100644 --- a/Network/HTTP/Lucu/RequestReader.hs +++ b/Network/HTTP/Lucu/RequestReader.hs @@ -7,7 +7,6 @@ module Network.HTTP.Lucu.RequestReader ( requestReader ) where - import Control.Concurrent.STM import Control.Exception import Control.Monad @@ -23,7 +22,6 @@ import Network.HTTP.Lucu.Chunk import Network.HTTP.Lucu.DefaultPage import Network.HTTP.Lucu.HandleLike import Network.HTTP.Lucu.Interaction -import Network.HTTP.Lucu.Parser import Network.HTTP.Lucu.Postprocess import Network.HTTP.Lucu.Preprocess import Network.HTTP.Lucu.Request @@ -192,6 +190,7 @@ requestReader !cnf !tree !fbs !h !port !addr !tQueue = do writeItr itr itrReqChunkRemaining newRemaining writeItr itr itrReqBodyWanted newWanted updateItr itr itrReceivedBody $ flip B.append chunk + updateItr itrReceivedBodyLen (+ actualReadBytes) itr if newRemaining == Just 0 then -- チャンクフッタを讀む @@ -278,15 +277,15 @@ requestReader !cnf !tree !fbs !h !port !addr !tQueue let wanted = fromJust wantedM bytesToRead = fromIntegral $ maybe wanted (min wanted) remainingM (chunk, input') = B.splitAt bytesToRead input - newRemaining = fmap - (\ x -> x - (fromIntegral $ B.length chunk)) - remainingM - isOver = B.length chunk < bytesToRead || newRemaining == Just 0 + actualReadBytes = fromIntegral $ B.length chunk + newRemaining = (- actualReadBytes) <$> remainingM + isOver = actualReadBytes < bytesToRead ∨ newRemaining ≡ Just 0 writeItr itr itrReqChunkRemaining newRemaining writeItr itr itrReqChunkIsOver isOver writeItr itr itrReqBodyWanted Nothing writeItr itr itrReceivedBody chunk + writeItr itrReceivedBody actualReadBytes if isOver then return $ acceptRequest input'