X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=Network%2FHTTP%2FLucu%2FRequestReader.hs;h=d3b8daad721a88b8b28a700c28565a278101d20a;hb=70bf5bd248aa426ca4e410b3fb9a0529354aedaf;hp=cb0ce5c0cae7c17008cf5102e700aa674e6f9ca3;hpb=105aec5e11818a08bdc964cf93856e0ff95768ac;p=Lucu.git diff --git a/Network/HTTP/Lucu/RequestReader.hs b/Network/HTTP/Lucu/RequestReader.hs index cb0ce5c..d3b8daa 100644 --- a/Network/HTTP/Lucu/RequestReader.hs +++ b/Network/HTTP/Lucu/RequestReader.hs @@ -1,3 +1,8 @@ +{-# LANGUAGE + BangPatterns + , UnboxedTuples + , UnicodeSyntax + #-} module Network.HTTP.Lucu.RequestReader ( requestReader ) @@ -27,9 +32,8 @@ import Network.HTTP.Lucu.Resource.Tree import Prelude hiding (catch) import System.IO (stderr) - -requestReader :: HandleLike h => Config -> ResTree -> [FallbackHandler] -> h -> SockAddr -> InteractionQueue -> IO () -requestReader !cnf !tree !fbs !h !addr !tQueue +requestReader :: HandleLike h => Config -> ResTree -> [FallbackHandler] -> h -> PortNumber -> SockAddr -> InteractionQueue -> IO () +requestReader !cnf !tree !fbs !h !port !addr !tQueue = do input <- hGetLBS h acceptRequest input `catches` @@ -59,7 +63,7 @@ requestReader !cnf !tree !fbs !h !addr !tQueue acceptNonparsableRequest :: StatusCode -> IO () acceptNonparsableRequest status = {-# SCC "acceptNonparsableRequest" #-} - do itr <- newInteraction cnf addr Nothing Nothing + do itr <- newInteraction cnf port addr Nothing Nothing atomically $ do updateItr itr itrResponse $ \ res -> res { resStatus = status @@ -74,7 +78,7 @@ requestReader !cnf !tree !fbs !h !addr !tQueue acceptParsableRequest req input = {-# SCC "acceptParsableRequest" #-} do cert <- hGetPeerCert h - itr <- newInteraction cnf addr cert (Just req) + itr <- newInteraction cnf port addr cert (Just req) action <- atomically $ do preprocess itr @@ -119,7 +123,7 @@ requestReader !cnf !tree !fbs !h !addr !tQueue do let itr = oldItr { itrResourcePath = Just rsrcPath } requestHasBody <- readItr itr itrRequestHasBody id enqueue itr - return $ do runResource rsrcDef itr + return $ do _ <- runResource rsrcDef itr if requestHasBody then observeRequest itr input else