@@ -1,4 +1,5 @@
11{-# LANGUAGE OverloadedStrings, CPP #-}
2+{-# LANGUAGE BangPatterns #-}
23
34module Network.Wai.Handler.Warp.HTTP2.Request (
45 mkRequest
@@ -38,11 +39,11 @@ import qualified Network.Wai.Handler.Warp.Settings as S (Settings, settingsNoPar
3839import qualified Network.Wai.Handler.Warp.Timeout as Timeout
3940
4041data ValidHeaders = ValidHeaders {
41− vhMethod :: ByteString
42− , vhPath :: ByteString
43− , vhAuth :: Maybe ByteString
44− , vhCL :: Maybe Int
45− , vhHeader :: RequestHeaders
42+ vhMethod :: !ByteString
43+ , vhPath :: !ByteString
44+ , vhAuth :: !(Maybe ByteString)
45+ , vhCL :: !(Maybe Int)
46+ , vhHeader :: !RequestHeaders
4647 }
4748
4849type MkReq = ValidHeaders -> IO ByteString -> Request
@@ -51,8 +52,8 @@ mkRequest :: InternalInfo -> S.Settings -> SockAddr -> MkReq
5152mkRequest ii settings addr (ValidHeaders m p ma _ hdr) body = req
5253 where
5354 (unparsedPath,query) = B8.break (=='?') p
54− path = H.extractPath unparsedPath
55− req = Request {
55+ !path = H.extractPath unparsedPath
56+ !req = Request {
5657 requestMethod = m
5758 , httpVersion = http2ver
5859 , rawPathInfo = if S.settingsNoParsePath settings then unparsedPath else path
@@ -70,8 +71,8 @@ mkRequest ii settings addr (ValidHeaders m p ma _ hdr) body = req
7071 , requestHeaderHost = ma
7172 , requestHeaderRange = lookup hRange hdr
7273 }
73− th = threadHandle ii
74− vaultValue = Vault.insert pauseTimeoutKey (Timeout.pause th)
74+ !th = threadHandle ii
75+ !vaultValue = Vault.insert pauseTimeoutKey (Timeout.pause th)
7576 $ Vault.insert getFileInfoKey (fileInfo ii)
7677 Vault.empty
7778
@@ -90,11 +91,11 @@ emptyPseudo = Pseudo Nothing Nothing Nothing Nothing
9091validateHeaders :: HeaderList -> Maybe ValidHeaders
9192validateHeaders hs = case pseudo hs (emptyPseudo,id) of
9293 Just (Pseudo (Just m) (Just p) ma mcl, h)
93− -> Just $ ValidHeaders m p ma (readInt <$> mcl) h
94+ -> Just $! ValidHeaders m p ma (readInt <$> mcl) h
9495 _ -> Nothing
9596 where
96− pseudo [] (p,b) = Just (p,b [])
97− pseudo h@((k,v):kvs) (p,b)
97+ pseudo [] (!p,!b) = Just (p,b [])
98+ pseudo h@((k,v):kvs) (!p,!b)
9899 | k == ":method" = if isJust (colonMethod p) then
99100 Nothing
100101 else
@@ -111,8 +112,8 @@ validateHeaders hs = case pseudo hs (emptyPseudo,id) of
111112 | isPseudo k = Nothing
112113 | otherwise = normal h (p,b)
113114
114− normal [] (p,b) = Just (p,b [])
115− normal ((k,v):kvs) (p,b)
115+ normal [] (!p,!b) = Just (p,b [])
116+ normal ((k,v):kvs) (!p,!b)
116117 | isPseudo k = Nothing
117118 | k == "connection" = Nothing
118119 | k == "te" = if v == "trailers" then