packages feed

warp-quic (empty) → 0.0.0

raw patch · 5 files changed

+104/−0 lines, 5 filesdep +basedep +bytestringdep +http3setup-changed

Dependencies added: base, bytestring, http3, quic, tls, wai, warp

Files

+ ChangeLog.md view
@@ -0,0 +1,5 @@+# Revision history for warp-quic++## 0.0.0.0++* First version. Released on an unsuspecting world.
+ LICENSE view
@@ -0,0 +1,29 @@+Copyright (c) 2020, IIJ Innovation Institute Inc.+All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions+are met:++  * Redistributions of source code must retain the above copyright+    notice, this list of conditions and the following disclaimer.+  * Redistributions in binary form must reproduce the above copyright+    notice, this list of conditions and the following disclaimer in+    the documentation and/or other materials provided with the+    distribution.+  * Neither the name of the copyright holders nor the names of its+    contributors may be used to endorse or promote products derived+    from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN+ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE+POSSIBILITY OF SUCH DAMAGE.
+ Network/Wai/Handler/WarpQUIC.hs view
@@ -0,0 +1,41 @@+{-# LANGUAGE OverloadedStrings #-}++-- | WAI handler for HTTP/3 based on QUIC.+module Network.Wai.Handler.WarpQUIC where++import qualified Data.ByteString as BS+import qualified Network.HQ.Server as HQ+import qualified Network.HTTP3.Server as H3+import Network.QUIC+import Network.QUIC.Server as Q+import Network.TLS (cipherID)+import Network.Wai+import Network.Wai.Handler.Warp hiding (run)+import Network.Wai.Handler.Warp.Internal++-- | QUIC server settings.+type QUICSettings = ServerConfig++-- | Running warp with HTTP/3 on QUIC.+runQUIC :: QUICSettings -> Settings -> Application -> IO ()+runQUIC quicsettings settings app = do+    withII settings $ \ii ->+        Q.run quicsettings $ \conn -> do+           info <- getConnectionInfo conn+           mccc <- clientCertificateChain conn+           let addr = remoteSockAddr info+               malpn = alpn info+               transport = QUIC {+                   quicNegotiatedProtocol = malpn+                 , quicChiperID = cipherID $ cipher info+                 , quicClientCertificate = mccc+                 }+               pread = pReadMaker ii+               timmgr = timeoutManager ii+               conf = H3.Config H3.defaultHooks pread timmgr+           case malpn of+             Nothing -> return ()+             Just appProto -> do+                 let runX | "h3" `BS.isPrefixOf` appProto = H3.run+                          | otherwise                     = HQ.run+                 runX conn conf $ http2server settings ii transport addr app
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ warp-quic.cabal view
@@ -0,0 +1,27 @@+name:                warp-quic+version:             0.0.0+author:              Kazu Yamamoto <kazu@iij.ad.jp>+maintainer:          Kazu Yamamoto <kazu@iij.ad.jp>+license:             BSD3+license-file:        LICENSE+synopsis:            Warp based on QUIC+description:         WAI handler for HTTP/3 based on QUIC+homepage:            https://github.com/kazu-yamamoto/warp-quic+category:            Network+cabal-version:       >=1.10+build-type:          Simple+extra-source-files:  ChangeLog.md++library+  default-language:    Haskell2010+  ghc-options:         -Wall+  exposed-modules:     Network.Wai.Handler.WarpQUIC+  build-depends:       base >= 4.13 && < 5+                     , bytestring+                     , http3+                     , quic+                     , tls+                     , wai+                     , warp >= 3.3.15+  if impl(ghc >= 8)+      default-extensions:  Strict StrictData