packages feed

http2-tls 0.1.0 → 0.2.0

raw patch · 5 files changed

+183/−41 lines, 5 filesdep +network-controldep +x509-storedep +x509-validationdep ~bytestringdep ~crypton-x509-storedep ~crypton-x509-validationPVP ok

version bump matches the API change (PVP)

Dependencies added: network-control, x509-store, x509-validation

Dependency ranges changed: bytestring, crypton-x509-store, crypton-x509-validation, data-default-class, http2, network, network-run, recv, time-manager, tls, unliftio

API changes (from Hackage documentation)

+ Network.HTTP2.TLS.Client: settingsCacheLimit :: Settings -> Int
+ Network.HTTP2.TLS.Client: settingsConcurrentStreams :: Settings -> Int
+ Network.HTTP2.TLS.Client: settingsConnectionWindowSize :: Settings -> Int
+ Network.HTTP2.TLS.Client: settingsStreamWindowSize :: Settings -> Int
+ Network.HTTP2.TLS.Server: ServerIO :: SockAddr -> SockAddr -> IO (StreamId, Stream, Request) -> (Stream -> Response -> IO ()) -> (ByteString -> IO ()) -> ServerIO
+ Network.HTTP2.TLS.Server: [sioMySockAddr] :: ServerIO -> SockAddr
+ Network.HTTP2.TLS.Server: [sioPeerSockAddr] :: ServerIO -> SockAddr
+ Network.HTTP2.TLS.Server: [sioReadRequest] :: ServerIO -> IO (StreamId, Stream, Request)
+ Network.HTTP2.TLS.Server: [sioWriteBytes] :: ServerIO -> ByteString -> IO ()
+ Network.HTTP2.TLS.Server: [sioWriteResponse] :: ServerIO -> Stream -> Response -> IO ()
+ Network.HTTP2.TLS.Server: data ServerIO
+ Network.HTTP2.TLS.Server: data Stream
+ Network.HTTP2.TLS.Server: runIO :: Settings -> Credentials -> HostName -> PortNumber -> (ServerIO -> IO (IO ())) -> IO ()
+ Network.HTTP2.TLS.Server: settingsConcurrentStreams :: Settings -> Int
+ Network.HTTP2.TLS.Server: settingsConnectionWindowSize :: Settings -> Int
+ Network.HTTP2.TLS.Server: settingsNumberOfWorkers :: Settings -> Int
+ Network.HTTP2.TLS.Server: settingsStreamWindowSize :: Settings -> Int
- Network.HTTP2.TLS.Client: runH2C :: HostName -> PortNumber -> Client a -> IO a
+ Network.HTTP2.TLS.Client: runH2C :: Settings -> HostName -> PortNumber -> Client a -> IO a
- Network.HTTP2.TLS.Client: type Client a = forall b. () => Request -> Response -> IO b -> IO b -> IO a
+ Network.HTTP2.TLS.Client: type Client a = forall b. () => Request -> Response -> IO b -> IO b -> Aux -> IO a

Files

Network/HTTP2/TLS/Client.hs view
@@ -19,6 +19,10 @@     settingsValidateCert,     settingsCAStore,     settingsAddrInfoFlags,+    settingsCacheLimit,+    settingsConcurrentStreams,+    settingsConnectionWindowSize,+    settingsStreamWindowSize, ) where  import Data.ByteString (ByteString)@@ -28,6 +32,10 @@ import Network.HTTP2.Client (     Client,     ClientConfig (..),+    defaultClientConfig,+    initialWindowSize,+    maxConcurrentStreams,+    settings,  ) import qualified Network.HTTP2.Client as H2Client import Network.Socket@@ -67,21 +75,22 @@ run :: Settings -> HostName -> PortNumber -> Client a -> IO a run settings serverName port client =     runTLS settings serverName port "h2" $ \ctx mysa peersa ->-        run' "https" serverName (sendTLS ctx) (recvTLS ctx) mysa peersa client+        run' settings "https" serverName (sendTLS ctx) (recvTLS ctx) mysa peersa client  -- | Running an HTTP\/2 client over TCP.-runH2C :: HostName -> PortNumber -> Client a -> IO a-runH2C serverName port client =+runH2C :: Settings -> HostName -> PortNumber -> Client a -> IO a+runH2C settings serverName port client =     E.bracket open close $ \sock -> do         mysa <- getSocketName sock         peersa <- getPeerName sock         recv <- mkRecvTCP Server.defaultSettings sock-        run' "http" serverName (sendTCP sock) recv mysa peersa client+        run' settings "http" serverName (sendTCP sock) recv mysa peersa client   where     open = openTCP (settingsAddrInfoFlags defaultSettings) serverName port  run'-    :: ByteString+    :: Settings+    -> ByteString     -> HostName     -> (ByteString -> IO ())     -> IO ByteString@@ -89,17 +98,23 @@     -> SockAddr     -> Client a     -> IO a-run' schm serverName send recv mysa peersa client =+run' Settings{..} schm serverName send recv mysa peersa client =     E.bracket         (allocConfigForClient send recv mysa peersa)         freeConfigForClient         (\conf -> H2Client.run cliconf conf client)   where     cliconf =-        ClientConfig+        defaultClientConfig             { scheme = schm             , authority = C8.pack serverName-            , cacheLimit = 20+            , cacheLimit = settingsCacheLimit+            , connectionWindowSize = settingsConnectionWindowSize+            , settings =+                (settings defaultClientConfig)+                    { initialWindowSize = settingsStreamWindowSize+                    , maxConcurrentStreams = Just settingsConcurrentStreams+                    }             }  openTCP :: [AddrInfoFlag] -> HostName -> PortNumber -> IO Socket
Network/HTTP2/TLS/Client/Settings.hs view
@@ -3,24 +3,50 @@ import Data.X509.CertificateStore (CertificateStore) import Network.Socket +import Network.Control+import Network.HTTP2.Client (+    cacheLimit,+    defaultClientConfig,+ )+ -- Client settings type. data Settings = Settings     { settingsKeyLogger :: String -> IO ()-    -- ^ Key logger+    -- ^ Key logger (TLS and H2)     --     -- Applications may wish to set this depending on the SSLKEYLOGFILE environment variable. Default is do nothing.     , settingsValidateCert :: Bool-    -- ^ Should we validate TLS certificates?+    -- ^ Should we validate TLS certificates? (TLS and H2)     --     -- >>> settingsValidateCert defaultSettings     -- True     , settingsCAStore :: CertificateStore-    -- ^ Certificate store used for validation. The default is 'mempty'.+    -- ^ Certificate store used for validation. The default is 'mempty'. (TLS and H2)     , settingsAddrInfoFlags :: [AddrInfoFlag]-    -- ^ Flags that control the querying behaviour of @getAddrInfo@.+    -- ^ Flags that control the querying behaviour of @getAddrInfo@. (TLS and H2)     --     -- >>> settingsAddrInfoFlags defaultSettings     -- []+    , settingsCacheLimit :: Int+    -- ^ How many pushed responses are contained in the cache (H2 and H2c)+    --+    -- >>> settingsCacheLimits defaultSettings+    -- 64+    , settingsConcurrentStreams :: Int+    -- ^ The maximum number of incoming streams on the net (H2 and H2c)+    --+    -- >>> settingsConcurrentStreams defaultSettings+    -- 64+    , settingsStreamWindowSize :: Int+    -- ^ The window size of incoming streams (H2 and H2c)+    --+    -- >>> settingsStreamWindowSize defaultSettings+    -- 262144+    , settingsConnectionWindowSize :: Int+    -- ^ The window size of a connection (H2 and H2c)+    --+    -- >>> settingsConnectionWindowSize defaultSettings+    -- 1048575     }  -- | Default settings.@@ -31,4 +57,8 @@         , settingsValidateCert = True         , settingsCAStore = mempty         , settingsAddrInfoFlags = []+        , settingsCacheLimit = cacheLimit defaultClientConfig+        , settingsConcurrentStreams = defaultMaxStreams+        , settingsStreamWindowSize = defaultMaxStreamData+        , settingsConnectionWindowSize = defaultMaxData         }
Network/HTTP2/TLS/Server.hs view
@@ -19,6 +19,10 @@     settingsReadBufferSize,     settingsReadBufferLowerLimit,     settingsKeyLogger,+    settingsNumberOfWorkers,+    settingsConcurrentStreams,+    settingsConnectionWindowSize,+    settingsStreamWindowSize,      -- * IO backend     IOBackend,@@ -27,12 +31,27 @@     recv,     mySockAddr,     peerSockAddr,++    -- * Internal+    runIO,+    Stream,+    ServerIO (..), ) where  import Data.ByteString (ByteString) import Data.Default.Class (def)-import Network.HTTP2.Server (Server)+import Network.HTTP2.Server (+    Server,+    connectionWindowSize,+    defaultServerConfig,+    initialWindowSize,+    maxConcurrentStreams,+    numberOfWorkers,+    settings,+ ) import qualified Network.HTTP2.Server as H2Server+import Network.HTTP2.Server.Internal (ServerIO, Stream)+import qualified Network.HTTP2.Server.Internal as H2I import Network.Run.TCP.Timeout import Network.Socket (     HostName,@@ -84,11 +103,47 @@         run' settings server mgr iobackend  run' :: Settings -> Server -> T.Manager -> IOBackend -> IO ()-run' settings server mgr IOBackend{..} =+run' settings0@Settings{..} server mgr IOBackend{..} =     E.bracket-        (allocConfigForServer settings mgr send recv mySockAddr peerSockAddr)+        (allocConfigForServer settings0 mgr send recv mySockAddr peerSockAddr)         freeConfigForServer-        (\conf -> H2Server.run conf server)+        (\conf -> H2Server.run sconf conf server)+  where+    sconf =+        defaultServerConfig+            { numberOfWorkers = settingsNumberOfWorkers+            , connectionWindowSize = settingsConnectionWindowSize+            , settings =+                (settings defaultServerConfig)+                    { initialWindowSize = settingsStreamWindowSize+                    , maxConcurrentStreams = Just settingsConcurrentStreams+                    }+            }++runIO+    :: Settings+    -> Credentials+    -> HostName+    -> PortNumber+    -> (ServerIO -> IO (IO ()))+    -> IO ()+runIO settings0@Settings{..} creds host port action =+    runTLS settings0 creds host port "h2" $ \mgr IOBackend{..} -> do+        E.bracket+            (allocConfigForServer settings0 mgr send recv mySockAddr peerSockAddr)+            freeConfigForServer+            (\conf -> H2I.runIO sconf conf action)+  where+    sconf =+        defaultServerConfig+            { numberOfWorkers = settingsNumberOfWorkers+            , connectionWindowSize = settingsConnectionWindowSize+            , settings =+                (settings defaultServerConfig)+                    { initialWindowSize = settingsStreamWindowSize+                    , maxConcurrentStreams = Just settingsConcurrentStreams+                    }+            }  ---------------------------------------------------------------- 
Network/HTTP2/TLS/Server/Settings.hs view
@@ -1,5 +1,11 @@ module Network.HTTP2.TLS.Server.Settings where +import Network.Control+import Network.HTTP2.Server (+    defaultServerConfig,+    numberOfWorkers,+ )+ -- Server settings type. data Settings = Settings     { settingsTimeout :: Int@@ -33,6 +39,26 @@     -- ^ Key logger (defaults to none)     --     -- Applications may wish to set this depending on the SSLKEYLOGFILE environment variable. The default is do nothing.+    , settingsNumberOfWorkers :: Int+    -- ^ The number of workers (H2 and H2c)+    --+    -- >>> settingsNumberOfWorkers defaultSettings+    -- 8+    , settingsConcurrentStreams :: Int+    -- ^ The maximum number of incoming streams on the net (H2 and H2c)+    --+    -- >>> settingsConcurrentStreams defaultSettings+    -- 64+    , settingsStreamWindowSize :: Int+    -- ^ The window size of incoming streams (H2 and H2c)+    --+    -- >>> settingsStreamWindowSize defaultSettings+    -- 262144+    , settingsConnectionWindowSize :: Int+    -- ^ The window size of a connection (H2 and H2c)+    --+    -- >>> settingsConnectionWindowSize defaultSettings+    -- 1048575     }  -- | Default settings.@@ -45,4 +71,8 @@         , settingsReadBufferSize = 16384         , settingsReadBufferLowerLimit = 2048         , settingsKeyLogger = \_ -> return ()+        , settingsNumberOfWorkers = numberOfWorkers defaultServerConfig+        , settingsConcurrentStreams = defaultMaxStreams+        , settingsStreamWindowSize = defaultMaxStreamData+        , settingsConnectionWindowSize = defaultMaxData         }
http2-tls.cabal view
@@ -1,22 +1,23 @@-cabal-version:      >=1.10-name:               http2-tls-version:            0.1.0-license:            BSD3-license-file:       LICENSE-maintainer:         Kazu Yamamoto <kazu@iij.ad.jp>-author:             Kazu Yamamoto <kazu@iij.ad.jp>-homepage:           https://github.com/kazu-yamamoto/http2-tls-synopsis:           Library for HTTP/2 over TLS-description:-    Using the HTTP/2 library over TLS--category:           Network-build-type:         Simple+cabal-version: >=1.10+name:          http2-tls+version:       0.2.0+license:       BSD3+license-file:  LICENSE+maintainer:    Kazu Yamamoto <kazu@iij.ad.jp>+author:        Kazu Yamamoto <kazu@iij.ad.jp>+homepage:      https://github.com/kazu-yamamoto/http2-tls+synopsis:      Library for HTTP/2 over TLS+description:   Using the HTTP/2 library over TLS+category:      Network+build-type:    Simple  source-repository head     type:     git     location: https://github.com/kazu-yamamoto/http2-tls +flag crypton+    description: Use the crypton-x509-* package family instead of x509-*+ library     exposed-modules:         Network.HTTP2.TLS.Client@@ -35,14 +36,25 @@     ghc-options:        -Wall     build-depends:         base >=4.9 && <5,-        bytestring,-        crypton-x509-store,-        crypton-x509-validation,-        data-default-class,-        http2 >= 4.2.0,-        network,-        network-run >=0.2.6,-        recv,-        time-manager,-        tls >=1.7.0,-        unliftio+        bytestring >= 0.10 && < 0.12,+        http2 >=5.0 && < 5.1,+        data-default-class >= 0.1 && < 0.2,+        network >= 3.1.4 && < 3.2,+        time-manager >= 0.0.1 && < 0.1,+        unliftio >= 0.2 && < 0.3,+        network-run >= 0.2.6 && < 0.3,+        network-control >= 0.0.2 && < 0.1,+        recv >= 0.1.0 && < 0.2,+        tls >= 1.9 && < 1.10++    if flag(crypton)+        build-depends:+            tls >=1.9,+            crypton-x509-store >= 1.6 && < 1.7,+            crypton-x509-validation >= 1.6 && < 1.7++    else+        build-depends:+            tls <1.7,+            x509-store,+            x509-validation