on master help sign in
Remove some tricky handlers
commite2ce4d75996614da44e32f8be0f9347434634e08 authorMichael Snoyman <michael@snoyman.com> dateMon 20 Aug 2018, 08:51 (8 years ago) parent9cf4a68
38 files changed+10−862
.travis.yml+10−15 stack-lts-11.yaml−1 stack-lts-12.yaml−1 stack-lts-6.yaml−1 stack-lts-9.yaml−1 stack-nightly.yaml−1 wai-handler-fastcgi/.gitignore−4 wai-handler-fastcgi/ChangeLog.md−3 wai-handler-fastcgi/LICENSE−20 wai-handler-fastcgi/Network/Wai/Handler/FastCGI.hsc−192 wai-handler-fastcgi/README wai-handler-fastcgi/README.md−3 wai-handler-fastcgi/Setup.lhs−7 wai-handler-fastcgi/configure−9 wai-handler-fastcgi/fastcgi.buildinfo.in−3 wai-handler-fastcgi/lighttpd.conf−19 wai-handler-fastcgi/test.hs−19 wai-handler-fastcgi/wai-handler-fastcgi.cabal−31 wai-handler-launch/.gitignore−2 wai-handler-launch/ChangeLog.md−35 wai-handler-launch/LICENSE−20 wai-handler-launch/Network/Wai/Handler/Launch.hs−222 wai-handler-launch/README wai-handler-launch/README.md−4 wai-handler-launch/Setup.lhs−7 wai-handler-launch/runtests.hs−22 wai-handler-launch/test.hs−7 wai-handler-launch/wai-handler-launch.cabal−36 wai-handler-launch/windows.c−12 wai-handler-webkit/.gitignore−2 wai-handler-webkit/ChangeLog.md−3 wai-handler-webkit/LICENSE−20 wai-handler-webkit/Network/Wai/Handler/Webkit.hs−21 wai-handler-webkit/README.md−53 wai-handler-webkit/Setup.lhs−7 wai-handler-webkit/sample.hs−10 wai-handler-webkit/wai-handler-webkit.cabal−30 wai-handler-webkit/webkit.cpp−19
.travis.yml+10−15
@@ -53,22 +53,22 @@ matrix:
5353 # addons: {apt: {packages: [cabal-install-1.18,ghc-7.8.4,happy-1.19.5,alex-3.1.7], sources: [hvr-ghc]}}
5454 - env: BUILD=cabal GHCVER=7.10.3 CABALVER=1.22 HAPPYVER=1.19.5 ALEXVER=3.1.7
5555 compiler: ": #GHC 7.10.3"
56− addons: {apt: {packages: [libfcgi-dev,cabal-install-1.22,ghc-7.10.3,happy-1.19.5,alex-3.1.7], sources: [hvr-ghc]}}
56+ addons: {apt: {packages: [cabal-install-1.22,ghc-7.10.3,happy-1.19.5,alex-3.1.7], sources: [hvr-ghc]}}
5757 - env: BUILD=cabal GHCVER=8.0.2 CABALVER=1.24 HAPPYVER=1.19.5 ALEXVER=3.1.7
5858 compiler: ": #GHC 8.0.2"
59− addons: {apt: {packages: [libfcgi-dev,cabal-install-1.24,ghc-8.0.2,happy-1.19.5,alex-3.1.7], sources: [hvr-ghc]}}
59+ addons: {apt: {packages: [cabal-install-1.24,ghc-8.0.2,happy-1.19.5,alex-3.1.7], sources: [hvr-ghc]}}
6060 - env: BUILD=cabal GHCVER=8.2.2 CABALVER=2.0 HAPPYVER=1.19.5 ALEXVER=3.1.7
6161 compiler: ": #GHC 8.2.2"
62− addons: {apt: {packages: [libfcgi-dev,cabal-install-2.0,ghc-8.2.2,happy-1.19.5,alex-3.1.7], sources: [hvr-ghc]}}
62+ addons: {apt: {packages: [cabal-install-2.0,ghc-8.2.2,happy-1.19.5,alex-3.1.7], sources: [hvr-ghc]}}
6363 - env: BUILD=cabal GHCVER=8.4.3 CABALVER=2.2 HAPPYVER=1.19.5 ALEXVER=3.1.7
6464 compiler: ": #GHC 8.4.3"
65− addons: {apt: {packages: [libfcgi-dev,cabal-install-2.2,ghc-8.4.3,happy-1.19.5,alex-3.1.7], sources: [hvr-ghc]}}
65+ addons: {apt: {packages: [cabal-install-2.2,ghc-8.4.3,happy-1.19.5,alex-3.1.7], sources: [hvr-ghc]}}
6666
6767 # Build with the newest GHC and cabal-install. This is an accepted failure,
6868 # see below.
6969 - env: BUILD=cabal GHCVER=head CABALVER=head HAPPYVER=1.19.5 ALEXVER=3.1.7
7070 compiler: ": #GHC HEAD"
71− addons: {apt: {packages: [libfcgi-dev,cabal-install-head,ghc-head,happy-1.19.5,alex-3.1.7], sources: [hvr-ghc]}}
71+ addons: {apt: {packages: [cabal-install-head,ghc-head,happy-1.19.5,alex-3.1.7], sources: [hvr-ghc]}}
7272
7373 # The Stack builds. We can pass in arbitrary Stack arguments via the ARGS
7474 # variable, such as using --stack-yaml to point to a different file.
@@ -86,7 +86,7 @@ matrix:
8686
8787 - env: BUILD=stack ARGS="--resolver lts-6" STACK_YAML="stack-lts-6.yaml"
8888 compiler: ": #stack 7.10.3"
89− addons: {apt: {packages: [libfcgi-dev,libgmp-dev]}}
89+ addons: {apt: {packages: [libgmp-dev]}}
9090
9191 #- env: BUILD=stack ARGS="--resolver lts-7"
9292 # compiler: ": #stack 8.0.1"
@@ -94,20 +94,20 @@ matrix:
9494
9595 - env: BUILD=stack ARGS="--resolver lts-9" STACK_YAML="stack-lts-9.yaml"
9696 compiler: ": #stack 8.0.2"
97− addons: {apt: {packages: [libfcgi-dev,libgmp-dev]}}
97+ addons: {apt: {packages: [libgmp-dev]}}
9898
9999 - env: BUILD=stack ARGS="--resolver lts-11" STACK_YAML="stack-lts-11.yaml"
100100 compiler: ": #stack 8.2.2"
101− addons: {apt: {packages: [libfcgi-dev,libgmp-dev]}}
101+ addons: {apt: {packages: [libgmp-dev]}}
102102
103103 - env: BUILD=stack ARGS="--resolver lts-12" STACK_YAML="stack-lts-12.yaml"
104104 compiler: ": #stack 8.4.3"
105− addons: {apt: {packages: [libfcgi-dev,libgmp-dev]}}
105+ addons: {apt: {packages: [libgmp-dev]}}
106106
107107 # Nightly builds are allowed to fail
108108 - env: BUILD=stack ARGS="--resolver nightly" STACK_YAML="stack-nightly.yaml"
109109 compiler: ": #stack nightly"
110− addons: {apt: {packages: [libfcgi-dev,libgmp-dev]}}
110+ addons: {apt: {packages: [libgmp-dev]}}
111111
112112 # Build on macOS in addition to Linux
113113 #- env: BUILD=stack ARGS=""
@@ -166,11 +166,6 @@ before_install:
166166 if [ `uname` = "Darwin" ]
167167 then
168168 travis_retry curl --insecure -L https://get.haskellstack.org/stable/osx-x86_64.tar.gz | tar xz --strip-components=1 --include '*/stack' -C ~/.local/bin
169−
170− # brew no longer has fcgi
171− # brew install fcgi
172− grep -v wai-handler-fastcgi < $STACK_YAML > tmp
173− mv tmp $STACK_YAML
174169 else
175170 travis_retry curl -L https://get.haskellstack.org/stable/linux-x86_64.tar.gz | tar xz --wildcards --strip-components=1 -C ~/.local/bin '*/stack'
176171 fi
stack-lts-11.yaml−1
@@ -7,7 +7,6 @@ packages:
77- ./warp
88- ./warp-tls
99- ./wai-app-static
10−- ./wai-handler-fastcgi
1110- ./wai-websockets
1211- ./wai-conduit
1312flags:
stack-lts-12.yaml−1
@@ -7,7 +7,6 @@ packages:
77- ./warp
88- ./warp-tls
99- ./wai-app-static
10−- ./wai-handler-fastcgi
1110- ./wai-websockets
1211- ./wai-conduit
1312flags:
stack-lts-6.yaml−1
@@ -7,7 +7,6 @@ packages:
77- ./warp
88- ./warp-tls
99- ./wai-app-static
10−- ./wai-handler-fastcgi
1110- ./wai-websockets
1211- ./wai-conduit
1312extra-deps:
stack-lts-9.yaml−1
@@ -7,7 +7,6 @@ packages:
77- ./warp
88- ./warp-tls
99- ./wai-app-static
10−- ./wai-handler-fastcgi
1110- ./wai-websockets
1211- ./wai-conduit
1312extra-deps:
stack-nightly.yaml−1
@@ -7,7 +7,6 @@ packages:
77- ./warp
88- ./warp-tls
99- ./wai-app-static
10−- ./wai-handler-fastcgi
1110- ./wai-websockets
1211- ./wai-conduit
1312flags:
wai-handler-fastcgi/.gitignoredeleted−4
@@ -1,4 +0,0 @@
1−/dist/
2−*.swp
3−*.hi
4−*.o
wai-handler-fastcgi/ChangeLog.mddeleted−3
@@ -1,3 +0,0 @@
1−## 3.0.0.2
2−
3−* Support wai 3.2
wai-handler-fastcgi/LICENSEdeleted−20
@@ -1,20 +0,0 @@
1−Copyright (c) 2012 Michael Snoyman, http://www.yesodweb.com/
2−
3−Permission is hereby granted, free of charge, to any person obtaining
4−a copy of this software and associated documentation files (the
5−"Software"), to deal in the Software without restriction, including
6−without limitation the rights to use, copy, modify, merge, publish,
7−distribute, sublicense, and/or sell copies of the Software, and to
8−permit persons to whom the Software is furnished to do so, subject to
9−the following conditions:
10−
11−The above copyright notice and this permission notice shall be
12−included in all copies or substantial portions of the Software.
13−
14−THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15−EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16−MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17−NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18−LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19−OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20−WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
wai-handler-fastcgi/Network/Wai/Handler/FastCGI.hscdeleted−192
@@ -1,192 +0,0 @@
1−{-# LANGUAGE ForeignFunctionInterface #-}
2−{-# LANGUAGE EmptyDataDecls #-}
3−{-# LANGUAGE CPP #-}
4−-----------------------------------------------------------------------------
5−-- |
6−-- Module : Network.Wai.Handler.FastCGI
7−-- Copyright : (c) Bjorn Bringert 2004-2005, (c) Lemmih 2006, (c) Michael Snoyman 2010
8−-- License : BSD-style (see the file libraries/network/LICENSE)
9−--
10−-- Maintainer : michael@snoyman.com
11−-- Stability : experimental
12−-- Portability : non-portable (uses FFI)
13−--
14−-- Interface for FastCGI <http://fastcgi.com/>, using the fcgiapp API.
15−-- Totally ripped off by Michael Snoyman to work with Hack, then WAI.
16−--
17−-----------------------------------------------------------------------------
18−module Network.Wai.Handler.FastCGI
19− ( run
20− , runSendfile
21− , runFork
22− ) where
23−
24−import Control.Monad ( liftM, forever )
25−import Data.Word (Word8)
26−import Foreign ( Ptr, castPtr, nullPtr, peekArray0
27− , throwIfNeg_, mallocBytes, free )
28−#ifdef GHC_7_4
29−import Foreign.C (CInt(..), CString, CStringLen)
30−#else
31−import Foreign.C (CInt, CString, CStringLen)
32−#endif
33−import Control.Exception (finally)
34−import Foreign.Storable ( Storable (..) )
35−
36−import qualified Network.Wai as W
37−import qualified Network.Wai.Handler.CGI as CGI
38−
39−import qualified Data.ByteString as S
40−import qualified Data.ByteString.Char8 as S8
41−import qualified Data.ByteString as BS
42−import qualified Data.ByteString.Internal as BSB
43−import qualified Data.ByteString.Unsafe as BSB
44−
45−import Control.Arrow ((***))
46−
47−#include <fcgiapp.h>
48−
49−------------------------------------------------------------------------
50−
51−data FCGX_Stream
52−type StreamPtr = Ptr FCGX_Stream
53−type Environ = Ptr CString
54−
55−------------------------------------------------------------------------
56−
57−foreign import ccall unsafe "fcgiapp.h FCGX_GetStr" fcgx_getStr
58− :: CString -> CInt -> StreamPtr -> IO CInt
59−
60−foreign import ccall unsafe "fcgiapp.h FCGX_PutStr" fcgx_putStr
61− :: CString -> CInt -> StreamPtr -> IO CInt
62−
63−
64−------------------------------------------------------------------------
65−
66−foreign import ccall unsafe "fcgiapp.h FCGX_Init" fcgx_init
67− :: IO CInt
68−
69−runFork :: Maybe S.ByteString -> (IO () -> IO a) -> Int -> W.Application -> IO ()
70−runFork sf fork threads app = do
71− testReturn "FCGX_Init" $ fcgx_init
72− let oneThread = forever $ oneRequest app sf
73− mapM_ fork $ replicate (threads - 1) oneThread
74− oneThread
75−
76−-- | Handle FastCGI requests in an infinite loop.
77−run :: W.Application -> IO ()
78−run = runFork Nothing id 1
79−
80−-- | Handle FastCGI requests in an infinite loop. For a server which supports
81−-- the X-Sendfile header.
82−runSendfile :: S.ByteString -> W.Application -> IO ()
83−runSendfile sf = runFork (Just sf) id 1
84−
85−oneRequest :: W.Application
86− -> Maybe S.ByteString -- X-Sendfile
87− -> IO ()
88−oneRequest app xsendfile = withRequest $ \r -> do
89− putStrLn "Received 1 request"
90− env <- peekEnvp r
91− ins <- peekIn r
92− outs <- peekOut r
93− handleRequest app ins outs env xsendfile
94−
95−peekIn, peekOut :: Ptr FCGX_Request -> IO (Ptr FCGX_Stream)
96−peekIn = (#peek FCGX_Request, in)
97−peekOut = (#peek FCGX_Request, out)
98−
99−peekEnvp :: Ptr FCGX_Request -> IO Environ
100−peekEnvp = (#peek FCGX_Request, envp)
101−
102−foreign import ccall unsafe "fcgiapp.h FCGX_InitRequest" fcgx_initrequest
103− :: Ptr FCGX_Request -> CInt -> CInt -> IO CInt
104−
105−foreign import ccall safe "fcgiapp.h FCGX_Accept_r" fcgx_accept_r
106− :: Ptr FCGX_Request -> IO CInt
107−
108−acceptRequest :: IO (Ptr FCGX_Request)
109−acceptRequest = do
110− reqp <- mallocBytes (#size FCGX_Request)
111− initAndAccept reqp
112− return reqp
113− where initAndAccept reqp = do
114− testReturn "FCGX_InitRequest" $ fcgx_initrequest reqp 0 0
115− testReturn "FCGX_Accept_r" $ fcgx_accept_r reqp
116−
117−withRequest :: (Ptr FCGX_Request -> IO ()) -> IO ()
118−withRequest f = do
119− req <- acceptRequest
120− f req `finally` finishRequest req
121−
122−foreign import ccall unsafe "fcgiapp.h FCGX_Finish_r" fcgx_finish_r
123− :: Ptr FCGX_Request -> IO ()
124−
125−finishRequest :: Ptr FCGX_Request -> IO ()
126−finishRequest reqp = do
127− fcgx_finish_r reqp
128− free reqp
129−
130−handleRequest :: W.Application
131− -> StreamPtr
132− -> StreamPtr
133− -> Environ
134− -> Maybe S.ByteString -- sendfile
135− -> IO ()
136−handleRequest f ins outs env xsendfile = do
137− vars <- environToTable env
138− let vars' = map (S8.unpack *** S8.unpack) vars
139− let input = const $ sRead ins
140− let hPut = sPutStr' outs
141− CGI.runGeneric vars' (CGI.requestBodyFunc input) hPut xsendfile f
142−
143−data FCGX_Request
144−
145−--
146−-- * Stream IO
147−--
148−
149−sPutStr' :: StreamPtr -> BS.ByteString -> IO ()
150−sPutStr' h str =
151− BSB.unsafeUseAsCStringLen str $ fcgxPutCStringLen h
152−
153−fcgxPutCStringLen :: StreamPtr -> CStringLen -> IO ()
154−fcgxPutCStringLen h (cs,len) =
155− testReturn "FCGX_PutStr" $ fcgx_putStr cs (fromIntegral len) h
156−
157−sRead :: StreamPtr -> IO (Maybe BS.ByteString)
158−sRead h = buildByteString (fcgxGetBuf h) 4096
159−
160−fcgxGetBuf :: StreamPtr -> Ptr a -> Int -> IO Int
161−fcgxGetBuf h p c =
162− liftM fromIntegral $ fcgx_getStr (castPtr p) (fromIntegral c) h
163−
164−--
165−-- * ByteString utilities
166−--
167−
168−-- | Data.ByteString.Lazy.hGetContentsN generalized to arbitrary
169−-- reading functions.
170−buildByteString :: (Ptr Word8 -> Int -> IO Int) -> Int -> IO (Maybe BS.ByteString)
171−buildByteString f k = do
172− ps <- BSB.createAndTrim k $ \p -> f p k
173− case BS.length ps of
174− 0 -> return Nothing
175− _ -> return $ Just ps
176−
177−--
178−-- * Utilities
179−--
180−
181−testReturn :: String -> IO CInt -> IO ()
182−testReturn e = throwIfNeg_ (\n -> e ++ " failed with error code: "++ show n)
183−
184−environToTable :: Environ -> IO [(S.ByteString, S.ByteString)]
185−environToTable arr = do
186− css <- peekArray0 nullPtr arr
187− ss <- mapM S.packCString css
188− return $ map splitEq ss
189− where
190− splitEq s =
191− let (a, b) = S.breakByte 61 s
192− in (a, S.drop 1 b)
wai-handler-fastcgi/READMEdeleted

No changes to the content.

wai-handler-fastcgi/README.mddeleted−3
@@ -1,3 +0,0 @@
1−## wai-handler-fastcgi
2−
3−Calls out to the libfcgi C library.
wai-handler-fastcgi/Setup.lhsdeleted−7
@@ -1,7 +0,0 @@
1−#!/usr/bin/env runhaskell
2−
3−> module Main where
4−> import Distribution.Simple
5−
6−> main :: IO ()
7−> main = defaultMain
wai-handler-fastcgi/configuredeleted−9
@@ -1,9 +0,0 @@
1−#!/bin/sh
2−#
3−
4−# subst standard header path variables
5−if test -n "$CPPFLAGS" ; then
6− echo "Found CPPFLAGS in environment: '$CPPFLAGS'"
7− sed 's,@CPPFLAGS@,'"$CPPFLAGS"',g;s,@LDFLAGS@,'"$LDFLAGS"',g' \
8− < fastcgi.buildinfo.in > fastcgi.buildinfo
9−fi
wai-handler-fastcgi/fastcgi.buildinfo.indeleted−3
@@ -1,3 +0,0 @@
1−ghc-options: -optc@CPPFLAGS@
2−cc-options: @CPPFLAGS@
3−ld-options: @LDFLAGS@
wai-handler-fastcgi/lighttpd.confdeleted−19
@@ -1,19 +0,0 @@
1−# Run with lighttpd -D -f lighttpd.conf
2−server.port = 3000
3−server.document-root = "."
4−server.modules = ("mod_fastcgi", "mod_rewrite")
5−
6−url.rewrite-once = (
7− "(.*)" => "/app/$1"
8−)
9−
10−fastcgi.server = (
11− "/app" => ((
12− "socket" => "/tmp/test.fastcgi.socket",
13− "check-local" => "disable",
14− "bin-path" => "./test",
15− "min-procs" => 1,
16− "max-procs" => 12,
17− "idle-timeout" => 30
18− ))
19−)
wai-handler-fastcgi/test.hsdeleted−19
@@ -1,19 +0,0 @@
1−{-# LANGUAGE OverloadedStrings #-}
2−import Network.Wai
3−import Network.Wai.Handler.FastCGI
4−import Control.Monad.IO.Class
5−import qualified Data.ByteString.Lazy as L
6−import qualified Data.ByteString.Lazy.Char8 as L8
7−import qualified Data.Enumerator as E
8−
9−main = run app
10−
11−app req
12− | pathInfo req == "/" = return $ responseLBS status200 [("Content-Type", "text/html")] "<form method='post' action='/post'><input type='text' name='name'><input type='submit'></form>"
13−app req = do
14− bss <- E.consume
15− return $ responseLBS status200 [("Content-Type", "text/plain")] $ L.concat
16− [ L8.pack $ show $ requestHeaders req
17− , "\n"
18− , L.fromChunks bss
19− ]
wai-handler-fastcgi/wai-handler-fastcgi.cabaldeleted−31
@@ -1,31 +0,0 @@
1−name: wai-handler-fastcgi
2−version: 3.0.0.2
3−license: MIT
4−license-file: LICENSE
5−author: Michael Snoyman <michael@snoyman.com>
6−maintainer: Michael Snoyman <michael@snoyman.com>
7−synopsis: Wai handler to fastcgi
8−description: API docs and the README are available at <http://www.stackage.org/package/wai-handler-fastcgi>.
9−category: Web
10−stability: stable
11−cabal-version: >= 1.6
12−build-type: Configure
13−extra-source-files: configure fastcgi.buildinfo.in README.md ChangeLog.md
14−homepage: http://www.yesodweb.com/book/web-application-interface
15−
16−library
17− build-depends: base >= 4 && < 5
18− , wai >= 3.0 && < 3.3
19− , wai-extra >= 3.0 && < 3.1
20− , bytestring >= 0.9.1.4
21− exposed-modules: Network.Wai.Handler.FastCGI
22− ghc-options: -Wall
23− includes: fcgiapp.h
24− extra-libraries: fcgi
25−
26− if impl(ghc >= 7.4)
27− cpp-options: -DGHC_7_4
28−
29−source-repository head
30− type: git
31− location: git://github.com/yesodweb/wai.git
wai-handler-launch/.gitignoredeleted−2
@@ -1,2 +0,0 @@
1−dist/
2−*.swp
wai-handler-launch/ChangeLog.mddeleted−35
@@ -1,35 +0,0 @@
1−## 3.0.2.4
2−
3−* Drop dependency on blaze-builder, requiring streaming-commons >= 0.2
4−
5−## 3.0.2.3
6−
7−* `process` package bump
8−
9−## 3.0.2.2
10−
11−* Improvements to ping's javascript script. [#494](https://github.com/yesodweb/wai/pull/494)
12−
13−## 3.0.2.1
14−
15−* Relax upper bound on process
16−
17−## 3.0.2
18−
19−* Don't launch if server fails; kill server on exit [#537](https://github.com/yesodweb/wai/issues/537) [#541](https://github.com/yesodweb/wai/pull/541)
20−
21−## 3.0.1
22−
23−* make host configurable too (fixes #538) [#539](https://github.com/yesodweb/wai/pull/539)
24−
25−## 3.0.0.5
26−
27−* Support wai/warp 3.2
28−
29−## 3.0.0.3
30−
31−Allow blaze-builder 0.4
32−
33−## 3.0.0.2
34−
35−* Support for Win64
wai-handler-launch/LICENSEdeleted−20
@@ -1,20 +0,0 @@
1−Copyright (c) 2012 Michael Snoyman, http://www.yesodweb.com/
2−
3−Permission is hereby granted, free of charge, to any person obtaining
4−a copy of this software and associated documentation files (the
5−"Software"), to deal in the Software without restriction, including
6−without limitation the rights to use, copy, modify, merge, publish,
7−distribute, sublicense, and/or sell copies of the Software, and to
8−permit persons to whom the Software is furnished to do so, subject to
9−the following conditions:
10−
11−The above copyright notice and this permission notice shall be
12−included in all copies or substantial portions of the Software.
13−
14−THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15−EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16−MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17−NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18−LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19−OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20−WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
wai-handler-launch/Network/Wai/Handler/Launch.hsdeleted−222
@@ -1,222 +0,0 @@
1−{-# LANGUAGE OverloadedStrings #-}
2−{-# LANGUAGE ForeignFunctionInterface #-}
3−{-# LANGUAGE CPP #-}
4−module Network.Wai.Handler.Launch
5− ( run
6− , runUrl
7− , runUrlPort
8− , runHostPortUrl
9− ) where
10−
11−import Network.Wai
12−import Network.Wai.Internal
13−import Network.HTTP.Types
14−import qualified Network.Wai.Handler.Warp as Warp
15−import Data.IORef
16−import Data.Monoid (mappend)
17−import Data.String (fromString)
18−import Control.Concurrent (forkIO, threadDelay, newEmptyMVar, putMVar, takeMVar)
19−import Control.Concurrent.Async (race)
20−import Control.Monad.IO.Class (liftIO)
21−import Control.Monad (unless)
22−import Control.Exception (throwIO)
23−import Data.Function (fix)
24−import qualified Data.ByteString as S
25−import Data.ByteString.Builder (Builder, byteString)
26−import qualified Data.ByteString.Builder.Extra as Builder (flush)
27−#if WINDOWS
28−import Foreign
29−import Foreign.C.String
30−#else
31−import System.Process (rawSystem)
32−#endif
33−import Data.Streaming.ByteString.Builder as B (newBuilderRecv, defaultStrategy)
34−import qualified Data.Streaming.Zlib as Z
35−
36−ping :: IORef Bool -> Middleware
37−ping active app req sendResponse
38− | pathInfo req == ["_ping"] = do
39− liftIO $ writeIORef active True
40− sendResponse $ responseLBS status200 [] ""
41− | otherwise = app req $ \res -> do
42− let isHtml hs =
43− case lookup "content-type" hs of
44− Just ct -> "text/html" `S.isPrefixOf` ct
45− Nothing -> False
46− if isHtml $ responseHeaders res
47− then do
48− let (s, hs, withBody) = responseToStream res
49− (isEnc, headers') = fixHeaders id hs
50− headers'' = filter (\(x, _) -> x /= "content-length") headers'
51− withBody $ \body ->
52− sendResponse $ responseStream s headers'' $ \sendChunk flush ->
53− addInsideHead sendChunk flush $ \sendChunk' flush' ->
54− if isEnc
55− then decode sendChunk' flush' body
56− else body sendChunk' flush'
57− else sendResponse res
58−
59−decode :: (Builder -> IO ()) -> IO ()
60− -> StreamingBody
61− -> IO ()
62−decode sendInner flushInner streamingBody = do
63− (blazeRecv, blazeFinish) <- newBuilderRecv defaultStrategy
64− inflate <- Z.initInflate $ Z.WindowBits 31
65− let send builder = blazeRecv builder >>= goBuilderPopper
66− goBuilderPopper popper = fix $ \loop -> do
67− bs <- popper
68− unless (S.null bs) $ do
69− Z.feedInflate inflate bs >>= goZlibPopper
70− loop
71− goZlibPopper popper = fix $ \loop -> do
72− res <- popper
73− case res of
74− Z.PRDone -> return ()
75− Z.PRNext bs -> do
76− sendInner $ byteString bs
77− loop
78− Z.PRError e -> throwIO e
79− streamingBody send (send Builder.flush)
80− mbs <- blazeFinish
81− case mbs of
82− Nothing -> return ()
83− Just bs -> Z.feedInflate inflate bs >>= goZlibPopper
84− Z.finishInflate inflate >>= sendInner . byteString
85−
86−toInsert :: S.ByteString
87−toInsert = "<script>setInterval(function(){var x;if(window.XMLHttpRequest){x=new XMLHttpRequest();}else{x=new ActiveXObject(\"Microsoft.XMLHTTP\");}x.open(\"GET\",\"/_ping?\" + (new Date()).getTime(),true);x.send();},60000)</script>"
88−
89−addInsideHead :: (Builder -> IO ())
90− -> IO ()
91− -> StreamingBody
92− -> IO ()
93−addInsideHead sendInner flushInner streamingBody = do
94− (blazeRecv, blazeFinish) <- newBuilderRecv defaultStrategy
95− ref <- newIORef $ Just (S.empty, whole)
96− streamingBody (inner blazeRecv ref) (flush blazeRecv ref)
97− state <- readIORef ref
98− mbs <- blazeFinish
99− held <- case mbs of
100− Nothing -> return state
101− Just bs -> push state bs
102− case state of
103− Nothing -> return ()
104− Just (held, _) -> sendInner $ byteString held `mappend` byteString toInsert
105− where
106− whole = "<head>"
107−
108− flush blazeRecv ref = inner blazeRecv ref Builder.flush
109−
110− inner blazeRecv ref builder = do
111− state0 <- readIORef ref
112− popper <- blazeRecv builder
113− let loop state = do
114− bs <- popper
115− if S.null bs
116− then writeIORef ref state
117− else push state bs >>= loop
118− loop state0
119−
120− push Nothing x = sendInner (byteString x) >> return Nothing
121− push (Just (held, atFront)) x
122− | atFront `S.isPrefixOf` x = do
123− let y = S.drop (S.length atFront) x
124− sendInner $ byteString held
125− `mappend` byteString atFront
126− `mappend` byteString toInsert
127− `mappend` byteString y
128− return Nothing
129− | whole `S.isInfixOf` x = do
130− let (before, rest) = S.breakSubstring whole x
131− let after = S.drop (S.length whole) rest
132− sendInner $ byteString held
133− `mappend` byteString before
134− `mappend` byteString whole
135− `mappend` byteString toInsert
136− `mappend` byteString after
137− return Nothing
138− | x `S.isPrefixOf` atFront = do
139− let held' = held `S.append` x
140− atFront' = S.drop (S.length x) atFront
141− return $ Just (held', atFront')
142− | otherwise = do
143− let (held', atFront', x') = getOverlap whole x
144− sendInner $ byteString held `mappend` byteString x'
145− return $ Just (held', atFront')
146−
147−getOverlap :: S.ByteString -> S.ByteString -> (S.ByteString, S.ByteString, S.ByteString)
148−getOverlap whole x =
149− go whole
150− where
151− go piece
152− | S.null piece = ("", whole, x)
153− | piece `S.isSuffixOf` x =
154− let x' = S.take (S.length x - S.length piece) x
155− atFront = S.drop (S.length piece) whole
156− in (piece, atFront, x')
157− | otherwise = go $ S.init piece
158−
159−fixHeaders :: ([Header] -> [Header])
160− -> [Header]
161− -> (Bool, [Header])
162−fixHeaders front [] = (False, front [])
163−fixHeaders front (("content-encoding", "gzip"):rest) = (True, front rest)
164−fixHeaders front (x:xs) = fixHeaders (front . (:) x) xs
165−
166−#if WINDOWS
167−foreign import ccall "launch"
168− launch' :: Int -> CString -> IO ()
169−#endif
170−
171−launch :: Int -> String -> IO ()
172−
173−#if WINDOWS
174−launch port s = withCString s $ launch' port
175−#else
176−launch port s = forkIO (rawSystem
177−#if MAC
178− "open"
179−#else
180− "xdg-open"
181−#endif
182− ["http://127.0.0.1:" ++ show port ++ "/" ++ s] >> return ()) >> return ()
183−#endif
184−
185−run :: Application -> IO ()
186−run = runUrl ""
187−
188−runUrl :: String -> Application -> IO ()
189−runUrl = runUrlPort 4587
190−
191−runUrlPort :: Int -> String -> Application -> IO ()
192−runUrlPort = runHostPortUrl "*4"
193−
194−-- |
195−--
196−-- @since 3.0.1
197−runHostPortUrl :: String -> Int -> String -> Application -> IO ()
198−runHostPortUrl host port url app = do
199− ready <- newEmptyMVar
200− active <- newIORef True
201− let settings =
202− Warp.setPort port $
203− Warp.setOnException (\_ _ -> return ()) $
204− Warp.setHost (fromString host) $
205− Warp.setBeforeMainLoop (putMVar ready ()) $
206− Warp.defaultSettings
207− -- Run these threads concurrently; when either one terminates or
208− -- raises an exception, the same happens to the other.
209− fmap (either id id) $ race
210− -- serve app, keep updating the activity flag
211− (Warp.runSettings settings (ping active app))
212− -- wait for server startup, launch browser, poll until server idle
213− (takeMVar ready >> launch port url >> loop active)
214−
215−loop :: IORef Bool -> IO ()
216−loop active = do
217− let seconds = 120
218− threadDelay $ 1000000 * seconds
219− b <- readIORef active
220− if b
221− then writeIORef active False >> loop active
222− else return ()
wai-handler-launch/READMEdeleted

No changes to the content.

wai-handler-launch/README.mddeleted−4
@@ -1,4 +0,0 @@
1−## wai-handler-launch
2−
3−This handles cross-platform launching and inserts Javascript code to ping the
4−server. When the server no longer receives pings, it shuts down.
wai-handler-launch/Setup.lhsdeleted−7
@@ -1,7 +0,0 @@
1−#!/usr/bin/env runhaskell
2−
3−> module Main where
4−> import Distribution.Simple
5−
6−> main :: IO ()
7−> main = defaultMain
wai-handler-launch/runtests.hsdeleted−22
@@ -1,22 +0,0 @@
1−{-# LANGUAGE OverloadedStrings #-}
2−import Network.Wai.Handler.Launch (insideHead)
3−import Test.Hspec
4−import Test.Hspec.HUnit
5−import Data.Enumerator hiding (map)
6−import Test.HUnit
7−import qualified Data.ByteString as S
8−
9−main :: IO ()
10−main = hspec $ describe "insideHead"
11− [ it "handles single chunks" $ helper "bar<head>foobaz" ["bar<head>baz"]
12− , it "handles single chunks, no <head>" $ helper "barfoo" ["bar"]
13− , it "handles whole chunks" $ helper "bar<head>foobaz" ["bar", "<head>", "baz"]
14− , it "handles split chunks" $ helper "bar<head>foobaz" ["bar", "<he", "ad>", "baz"]
15− , it "handles many chunks" $ helper "bar<head>foobaz1234567890" ["bar", "<he", "ad>", "baz", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]
16− , it "handles many pieces" $ helper "bar<head>foobaz" $ map S.singleton $ S.unpack "bar<head>baz"
17− ]
18−
19−helper :: S.ByteString -> [S.ByteString] -> Assertion
20−helper res pieces = do
21− x <- run_ $ enumList 1 pieces $$ joinI $ insideHead "foo" $$ consume
22− S.concat x @?= res
wai-handler-launch/test.hsdeleted−7
@@ -1,7 +0,0 @@
1−{-# LANGUAGE OverloadedStrings #-}
2−import Network.Wai
3−import Network.HTTP.Types
4−import Network.Wai.Handler.Launch
5−import Network.Wai.Middleware.Gzip
6−
7−main = runUrl "FIXME" $ gzip def $ \_ f -> f $ responseLBS status200 [("Content-Type", "text/html; charset=utf8")] "<html><head></head><body>HELLO THERE"
wai-handler-launch/wai-handler-launch.cabaldeleted−36
@@ -1,36 +0,0 @@
1−Name: wai-handler-launch
2−Version: 3.0.2.4
3−Synopsis: Launch a web app in the default browser.
4−description: API docs and the README are available at <http://www.stackage.org/package/wai-handler-launch>.
5−License: MIT
6−License-file: LICENSE
7−Author: Michael Snoyman
8−Maintainer: michael@snoyman.com
9−Category: Web
10−Build-type: Simple
11−Cabal-version: >=1.6
12−extra-source-files: README.md ChangeLog.md
13−
14−Library
15− Exposed-modules: Network.Wai.Handler.Launch
16− build-depends: base >= 4 && < 5
17− , wai >= 3.0 && < 3.3
18− , warp >= 3.0 && < 3.3
19− , http-types >= 0.7
20− , transformers >= 0.2.2
21− , bytestring >= 0.10.4
22− , streaming-commons >= 0.2
23− , async
24−
25− if os(windows)
26− c-sources: windows.c
27− cpp-options: -DWINDOWS
28− extra-libraries: Shell32 msvcrt
29− else
30− build-depends: process >= 1.0 && < 1.7
31− if os(darwin)
32− cpp-options: -DMAC
33−
34−source-repository head
35− type: git
36− location: git://github.com/yesodweb/wai.git
wai-handler-launch/windows.cdeleted−12
@@ -1,12 +0,0 @@
1−#include <windows.h>
2−#include <shellapi.h>
3−#include <stdio.h>
4−
5−void launch(int port, char *s)
6−{
7− int len = 8 + strlen("http://127.0.0.1:") + strlen(s);
8− char *buff = malloc(len);
9− _snprintf(buff, len, "http://127.0.0.1:%d/%s", port, s);
10− ShellExecute(NULL, "open", buff, NULL, NULL, SW_SHOWNORMAL);
11− free(buff);
12−}
wai-handler-webkit/.gitignoredeleted−2
@@ -1,2 +0,0 @@
1−dist
2−*.swp
wai-handler-webkit/ChangeLog.mddeleted−3
@@ -1,3 +0,0 @@
1−## 3.0.0.3
2−
3−* Support for wai/warp 3.2
wai-handler-webkit/LICENSEdeleted−20
@@ -1,20 +0,0 @@
1−Copyright (c) 2012 Michael Snoyman, http://www.yesodweb.com/
2−
3−Permission is hereby granted, free of charge, to any person obtaining
4−a copy of this software and associated documentation files (the
5−"Software"), to deal in the Software without restriction, including
6−without limitation the rights to use, copy, modify, merge, publish,
7−distribute, sublicense, and/or sell copies of the Software, and to
8−permit persons to whom the Software is furnished to do so, subject to
9−the following conditions:
10−
11−The above copyright notice and this permission notice shall be
12−included in all copies or substantial portions of the Software.
13−
14−THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15−EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16−MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17−NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18−LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19−OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20−WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
wai-handler-webkit/Network/Wai/Handler/Webkit.hsdeleted−21
@@ -1,21 +0,0 @@
1−{-# LANGUAGE ForeignFunctionInterface #-}
2−module Network.Wai.Handler.Webkit (run) where
3−
4−import Network.Wai (Application)
5−import qualified Network.Wai.Handler.Warp as S
6−import Control.Concurrent (forkOS)
7−import Control.Concurrent.MVar
8−import Foreign.C.String (CString, withCString)
9−import Control.Exception (finally)
10−
11−run :: String -- ^ Title to show in titlebar
12− -> Application -> IO ()
13−run title app = do
14− mvar <- newEmptyMVar
15− _ <- forkOS $ finally (S.run 3000 app) (putMVar mvar ())
16− _ <- forkOS $ finally (withCString title startBrowser) (putMVar mvar ())
17− _ <- takeMVar mvar
18− return ()
19−
20−foreign import ccall "start_browser"
21− startBrowser :: CString -> IO ()
wai-handler-webkit/README.mddeleted−53
@@ -1,53 +0,0 @@
1−wai-handler-webkit
2−==================
3−
4−Turn WAI applications into standalone GUIs using Qt WebKit.
5−
6−
7−Linux
8−-----
9−
10−You'll need the appropriate system libraries, on Ubuntu:
11−
12− apt-get install libqtwebkit-dev
13−
14−On Lucid, this required adding a PPA:
15−
16− sudo add-apt-repository ppa:kubuntu-ppa/backports
17−
18−
19−Windows
20−-------
21−
22−Install the Qt SDK from <http://qt.nokia.com/downloads/>
23−
24−Your application's Cabal file will require certain options for Windows,
25−shown below. In particular, we need to link with `g++`, so make sure
26−it's in your `PATH`. The option `-optl-mwindows` ensures that the
27−application does not open a terminal.
28−
29− if os(windows)
30− ghc-options: -Wall -threaded -pgml g++ -optl-static -optl-mwindows
31− else
32− ghc-options: -Wall
33−
34−Run `cabal-install` with the Qt `include` and `lib` directories.
35−
36− export QT_PATH=c:/QtSDK/Desktop/Qt/4.7.3/mingw
37−
38− cabal-dev install \
39− --extra-include-dirs=$QT_PATH/include \
40− --extra-include-dirs=$QT_PATH/include/QtCore \
41− --extra-include-dirs=$QT_PATH/include/QtNetwork \
42− --extra-include-dirs=$QT_PATH/include/QtGui \
43− --extra-include-dirs=$QT_PATH/include/QtWebKit \
44− --extra-lib-dirs=$QT_PATH/lib
45−
46−You'll need to include these DLLs with your application:
47−
48− phonon4.dll
49− libgcc_s_dw2-1.dll
50− QtCore4.dll
51− QtGui4.dll
52− QtNetwork4.dll
53− QtWebKit4.dll
wai-handler-webkit/Setup.lhsdeleted−7
@@ -1,7 +0,0 @@
1−#!/usr/bin/env runhaskell
2−
3−> module Main where
4−> import Distribution.Simple
5−
6−> main :: IO ()
7−> main = defaultMain
wai-handler-webkit/sample.hsdeleted−10
@@ -1,10 +0,0 @@
1−{-# LANGUAGE OverloadedStrings #-}
2−import Network.Wai
3−import Network.Wai.Handler.Webkit
4−import Network.HTTP.Types
5−
6−main :: IO ()
7−main = run "Sample App" app
8−
9−app :: Application
10−app _ response = response $ responseLBS status200 [("Content-Type", "text/html")] "<h1>Hello World!</h1>"
wai-handler-webkit/wai-handler-webkit.cabaldeleted−30
@@ -1,30 +0,0 @@
1−name: wai-handler-webkit
2−version: 3.0.0.3
3−license: MIT
4−license-file: LICENSE
5−author: Michael Snoyman <michael@snoyman.com>
6−maintainer: Michael Snoyman <michael@snoyman.com>
7−synopsis: Turn WAI applications into standalone GUIs using QtWebkit.
8−description: API docs and the README are available at <http://www.stackage.org/package/wai-handler-webkit>.
9−category: Web
10−stability: unstable
11−cabal-version: >= 1.6
12−build-type: Simple
13−homepage: https://github.com/yesodweb/wai/tree/master/wai-handler-webkit
14−extra-source-files: README.md ChangeLog.md
15−
16−library
17− build-depends: base >= 4 && < 5
18− , wai >= 3.0 && < 3.3
19− , warp >= 3.0 && < 3.3
20− ghc-options: -Wall
21− exposed-modules: Network.Wai.Handler.Webkit
22− c-sources: webkit.cpp
23− if os(windows)
24− extra-libraries: QtCore4, QtGui4, QtNetwork4, QtWebKit4
25− else
26− pkgconfig-depends: QtWebKit
27−
28−source-repository head
29− type: git
30− location: git://github.com/yesodweb/wai.git
wai-handler-webkit/webkit.cppdeleted−19
@@ -1,19 +0,0 @@
1−#include <QApplication>
2−#include <QPushButton>
3−#include <QtWebKit>
4−
5−extern "C" {
6− int start_browser(char *title)
7− {
8− char *argv[1];
9− argv[0] = title;
10− int argc = 1;
11−
12− QApplication app(argc, argv);
13− QWebView *view = new QWebView();
14− view->load(QUrl("http://localhost:3000/"));
15− view->show();
16−
17− return app.exec();
18− }
19−}