on master help sign in
Clone the response type for HTTP2

This is currently identical to the normal WAI response type, but I will be changing it drastically over the next few commits.

commit3637f6e49e92fd2b808eea9b6567ece78267702b authorAndrew Pritchard <awpr@google.com> dateThu 30 Jul 2015, 19:06 (11 years ago) parentd091dd9
6 files changed+41−14
wai/Network/Wai/HTTP2.hs+24−1 warp/Network/Wai/Handler/Warp/HTTP2.hs+10−3 warp/Network/Wai/Handler/Warp/HTTP2/HPACK.hs+1−2 warp/Network/Wai/Handler/Warp/HTTP2/Sender.hs+2−3 warp/Network/Wai/Handler/Warp/HTTP2/Types.hs+2−2 warp/Network/Wai/Handler/Warp/HTTP2/Worker.hs+2−3
wai/Network/Wai/HTTP2.hs+24−1
@@ -1,11 +1,16 @@
11module Network.Wai.HTTP2
22 ( Http2Application
3+ , Response(..)
34 , Trailers
5+ , responseStatus
6+ , responseHeaders
47 ) where
58
9+import Blaze.ByteString.Builder (Builder)
10+import qualified Data.ByteString as B
611import qualified Network.HTTP.Types as H
712
8−import Network.Wai.Internal (Request, Response)
13+import Network.Wai.Internal (Request, FilePart)
914
1015-- | Headers sent after the end of a data stream, as defined by section 4.1.2 of
1116-- the HTTP\/1.1 spec (RFC 7230), and section 8.1 of the HTTP\/2 spec.
@@ -13,3 +18,21 @@ type Trailers = H.ResponseHeaders
1318
1419-- | The HTTP\/2-aware equivalent of 'Network.Wai.Application'.
1520type Http2Application = Request -> (Response -> IO ()) -> IO Trailers
21+
22+type StreamingBody = (Builder -> IO ()) -> IO () -> IO ()
23+
24+data Response
25+ = ResponseFile H.Status H.ResponseHeaders FilePath (Maybe FilePart)
26+ | ResponseBuilder H.Status H.ResponseHeaders Builder
27+ | ResponseStream H.Status H.ResponseHeaders StreamingBody
28+ | ResponseRaw (IO B.ByteString -> (B.ByteString -> IO ()) -> IO ()) Response
29+
30+responseStatus :: Response -> H.Status
31+responseStatus (ResponseFile s _ _ _) = s
32+responseStatus (ResponseBuilder s _ _) = s
33+responseStatus (ResponseStream s _ _) = s
34+responseStatus (ResponseRaw _ res) = responseStatus res
35+
36+responseHeaders :: Response -> H.ResponseHeaders
37+responseHeaders _ = []
38+
warp/Network/Wai/Handler/Warp/HTTP2.hs+10−3
@@ -16,9 +16,10 @@ import Data.ByteString (ByteString)
1616import Network.HTTP2
1717import Network.Socket (SockAddr)
1818
19−import Network.Wai (Application)
19+import Network.Wai (Application, Response)
20+import qualified Network.Wai.HTTP2 as H2 (Response(..))
2021import Network.Wai.HTTP2 (Http2Application)
21−import Network.Wai.Internal (ResponseReceived(..))
22+import Network.Wai.Internal (ResponseReceived(..), Response(..))
2223import Network.Wai.Handler.Warp.HTTP2.EncodeFrame
2324import Network.Wai.Handler.Warp.HTTP2.Manager
2425import Network.Wai.Handler.Warp.HTTP2.Receiver
@@ -78,4 +79,10 @@ goaway Connection{..} etype debugmsg = connSendAll bytestream
7879-- the HTTP/2-specific features.
7980promoteApplication :: Application -> Http2Application
8081promoteApplication app req respond = [] <$ app req respond'
81− where respond' x = ResponseReceived <$ respond x
82+ where respond' x = ResponseReceived <$ respond (promoteResponse x)
83+
84+promoteResponse :: Response -> H2.Response
85+promoteResponse (ResponseFile a b c d) = H2.ResponseFile a b c d
86+promoteResponse (ResponseBuilder a b c) = H2.ResponseBuilder a b c
87+promoteResponse (ResponseStream a b c) = H2.ResponseStream a b c
88+promoteResponse (ResponseRaw a b) = H2.ResponseRaw a (promoteResponse b)
warp/Network/Wai/Handler/Warp/HTTP2/HPACK.hs+1−2
@@ -13,8 +13,7 @@ import Data.IORef (readIORef, writeIORef)
1313import Network.HPACK
1414import qualified Network.HTTP.Types as H
1515import Network.HTTP2
16−import Network.Wai
17−import Network.Wai.HTTP2 (Trailers)
16+import Network.Wai.HTTP2 (Trailers, Response, responseStatus, responseHeaders)
1817import Network.Wai.Handler.Warp.HTTP2.Types
1918import Network.Wai.Handler.Warp.Header
2019import Network.Wai.Handler.Warp.Response
warp/Network/Wai/Handler/Warp/HTTP2/Sender.hs+2−3
@@ -15,8 +15,8 @@ import qualified Data.ByteString.Builder.Extra as B
1515import Foreign.Ptr
1616import Network.HTTP2
1717import Network.HTTP2.Priority
18−import Network.Wai
19−import Network.Wai.HTTP2 (Trailers)
18+import Network.Wai hiding (Response)
19+import Network.Wai.HTTP2 (Trailers, Response(..))
2020import Network.Wai.Handler.Warp.Buffer
2121import Network.Wai.Handler.Warp.HTTP2.EncodeFrame
2222import Network.Wai.Handler.Warp.HTTP2.HPACK
@@ -25,7 +25,6 @@ import Network.Wai.Handler.Warp.IORef
2525import qualified Network.Wai.Handler.Warp.Settings as S
2626import qualified Network.Wai.Handler.Warp.Timeout as T
2727import Network.Wai.Handler.Warp.Types
28−import Network.Wai.Internal (Response(..))
2928import qualified System.PosixCompat.Files as P
3029
3130#ifdef WINDOWS
warp/Network/Wai/Handler/Warp/HTTP2/Types.hs+2−2
@@ -17,8 +17,8 @@ import qualified Data.ByteString as BS
1717import Data.IntMap.Strict (IntMap, IntMap)
1818import qualified Data.IntMap.Strict as M
1919import qualified Network.HTTP.Types as H
20−import Network.Wai (Request, Response)
21−import Network.Wai.HTTP2 (Trailers)
20+import Network.Wai (Request)
21+import Network.Wai.HTTP2 (Trailers, Response)
2222import Network.Wai.Handler.Warp.IORef
2323import Network.Wai.Handler.Warp.Types
2424
warp/Network/Wai/Handler/Warp/HTTP2/Worker.hs+2−3
@@ -21,8 +21,8 @@ import Data.Typeable
2121import qualified Network.HTTP.Types as H
2222import Network.HTTP2
2323import Network.HTTP2.Priority
24−import Network.Wai
25−import Network.Wai.HTTP2 (Http2Application)
24+import Network.Wai.HTTP2 (Http2Application, Response(..), responseStatus)
25+import Network.Wai hiding (Response, responseStatus)
2626import Network.Wai.Handler.Warp.HTTP2.EncodeFrame
2727import Network.Wai.Handler.Warp.HTTP2.Manager
2828import Network.Wai.Handler.Warp.HTTP2.Types
@@ -30,7 +30,6 @@ import Network.Wai.Handler.Warp.IORef
3030import qualified Network.Wai.Handler.Warp.Response as R
3131import qualified Network.Wai.Handler.Warp.Settings as S
3232import qualified Network.Wai.Handler.Warp.Timeout as T
33−import Network.Wai.Internal (Response(..))
3433
3534----------------------------------------------------------------
3635