]> gitweb @ CieloNegro.org - Lucu.git/blobdiff - Network/HTTP/Lucu/RequestReader.hs
Use base64-bytestring instead of dataenc
[Lucu.git] / Network / HTTP / Lucu / RequestReader.hs
index 7d0c57cd6a85228350160cf13a3c6b8cf08243e7..d3b8daad721a88b8b28a700c28565a278101d20a 100644 (file)
@@ -1,3 +1,8 @@
+{-# LANGUAGE
+    BangPatterns
+  , UnboxedTuples
+  , UnicodeSyntax
+  #-}
 module Network.HTTP.Lucu.RequestReader
     ( requestReader
     )
@@ -27,15 +32,14 @@ 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`
       [ Handler (( \ _                   -> return () ) :: IOException -> IO ())
       , Handler  ( \ ThreadKilled        -> return () )
-      , Handler  ( \ BlockedIndefinitely -> hPutStrLn stderr "requestReader: blocked indefinitely" )
+      , Handler  ( \ BlockedIndefinitelyOnSTM -> hPutStrLn stderr "requestReader: blocked indefinitely" )
       , Handler (( \ e                   -> hPutStrLn stderr (show e) ) :: SomeException -> IO ())
       ]
     where
@@ -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