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 +5/−0
- LICENSE +29/−0
- Network/Wai/Handler/WarpQUIC.hs +41/−0
- Setup.hs +2/−0
- warp-quic.cabal +27/−0
+ 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