on master help sign in
Put defaultRequest in Network.Wai #181
commit80fb1f7004bb5079fc023316b0f7dcfdc87e9303 authorMichael Snoyman <michael@snoyman.com> dateThu 10 Oct 2013, 14:46 (13 years ago) parent729d59a
2 files changed+26−17
wai/Network/Wai.hs+23 warp/Network/Wai/Handler/Warp/Run.hs+3−17
wai/Network/Wai.hs+23
@@ -65,6 +65,8 @@ module Network.Wai
6565 -- ** Helper functions
6666 , responseToSource
6767 , responseStatus
68+ -- ** Defaults
69+ , defaultRequest
6870 ) where
6971
7072import Blaze.ByteString.Builder (Builder, fromLazyByteString)
@@ -75,7 +77,9 @@ import Data.ByteString.Lazy.Char8 ()
7577import qualified Data.Conduit as C
7678import qualified Data.Conduit.Binary as CB
7779import qualified Data.Conduit.List as CL
80+import Data.Monoid (mempty)
7881import qualified Network.HTTP.Types as H
82+import Network.Socket (SockAddr (SockAddrInet))
7983import Network.Wai.Internal
8084import qualified System.IO as IO
8185
@@ -129,3 +133,22 @@ type Application = Request -> IO Response
129133-- Here, instead of taking a standard 'Application' as its first argument, the
130134-- middleware takes a function which consumes the session information as well.
131135type Middleware = Application -> Application
136+
137+-- | A default, blank request.
138+--
139+-- Since 2.0.0
140+defaultRequest :: Request
141+defaultRequest = Request
142+ { requestMethod = H.methodGet
143+ , httpVersion = H.http10
144+ , rawPathInfo = B.empty
145+ , rawQueryString = B.empty
146+ , requestHeaders = []
147+ , isSecure = False
148+ , remoteHost = SockAddrInet 0 0
149+ , pathInfo = []
150+ , queryString = []
151+ , requestBody = return ()
152+ , vault = mempty
153+ , requestBodyLength = KnownLength 0
154+ }
warp/Network/Wai/Handler/Warp/Run.hs+3−17
@@ -15,14 +15,12 @@ import Data.Conduit
1515import Data.Conduit.Internal (ResumableSource (..))
1616import qualified Data.Conduit.List as CL
1717import Data.Conduit.Network (bindPort)
18−import Data.Monoid (mempty)
1918import Network (sClose, Socket)
2019import qualified Network.HTTP.Types as H
2120import Network.Sendfile
2221import Network.Socket (accept, SockAddr)
2322import qualified Network.Socket.ByteString as Sock
2423import Network.Wai
25−import Network.Wai.Internal
2624import Network.Wai.Handler.Warp.Recv
2725import Network.Wai.Handler.Warp.Request
2826import Network.Wai.Handler.Warp.Response
@@ -276,24 +274,12 @@ serveConnection timeoutHandle settings cleaner app conn remoteHost' =
276274respondOnException :: Settings -> Cleaner -> Connection -> SockAddr -> IO () -> IO ()
277275respondOnException settings cleaner conn remoteHost' io = io `catch` \e@(SomeException _) -> do
278276 mask $ \restore ->
279− void $ sendResponse settings cleaner blankRequest conn restore internalError
277+ void $ sendResponse settings cleaner defaultRequest
278+ { remoteHost = remoteHost'
279+ } conn restore internalError
280280 throwIO e
281281 where
282282 internalError = responseLBS H.internalServerError500 [(H.hContentType, "text/plain")] "Something went wrong"
283− blankRequest = Request {
284− requestMethod = H.methodGet
285− , httpVersion = H.http10
286− , rawPathInfo = ""
287− , rawQueryString = ""
288− , requestHeaders = []
289− , isSecure = False
290− , remoteHost = remoteHost'
291− , pathInfo = []
292− , queryString = mempty
293− , requestBody = return mempty
294− , vault = mempty
295− , requestBodyLength = KnownLength 0
296− }
297283
298284connSource :: Connection -> T.Handle -> Source IO ByteString
299285connSource Connection { connRecv = recv } th = src