on master help sign in
Put defaultRequest in Network.Wai #181
80fb1f7Michael Snoyman
wai/Network/Wai.hs+23
@@ -65,6 +65,8 @@ module Network.Wai
65 -- ** Helper functions
65 -- ** Helper functions
66 , responseToSource
66 , responseToSource
67 , responseStatus
67 , responseStatus
68+ -- ** Defaults
69+ , defaultRequest
68 ) where
70 ) where
69
71
70import Blaze.ByteString.Builder (Builder, fromLazyByteString)
72import Blaze.ByteString.Builder (Builder, fromLazyByteString)
@@ -75,7 +77,9 @@ import Data.ByteString.Lazy.Char8 ()
75import qualified Data.Conduit as C
77import qualified Data.Conduit as C
76import qualified Data.Conduit.Binary as CB
78import qualified Data.Conduit.Binary as CB
77import qualified Data.Conduit.List as CL
79import qualified Data.Conduit.List as CL
80+import Data.Monoid (mempty)
78import qualified Network.HTTP.Types as H
81import qualified Network.HTTP.Types as H
82+import Network.Socket (SockAddr (SockAddrInet))
79import Network.Wai.Internal
83import Network.Wai.Internal
80import qualified System.IO as IO
84import qualified System.IO as IO
81
85
@@ -129,3 +133,22 @@ type Application = Request -> IO Response
129-- Here, instead of taking a standard 'Application' as its first argument, the
133-- Here, instead of taking a standard 'Application' as its first argument, the
130-- middleware takes a function which consumes the session information as well.
134-- middleware takes a function which consumes the session information as well.
131type Middleware = Application -> Application
135type 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
15import Data.Conduit.Internal (ResumableSource (..))
15import Data.Conduit.Internal (ResumableSource (..))
16import qualified Data.Conduit.List as CL
16import qualified Data.Conduit.List as CL
17import Data.Conduit.Network (bindPort)
17import Data.Conduit.Network (bindPort)
18−import Data.Monoid (mempty)
19import Network (sClose, Socket)
18import Network (sClose, Socket)
20import qualified Network.HTTP.Types as H
19import qualified Network.HTTP.Types as H
21import Network.Sendfile
20import Network.Sendfile
22import Network.Socket (accept, SockAddr)
21import Network.Socket (accept, SockAddr)
23import qualified Network.Socket.ByteString as Sock
22import qualified Network.Socket.ByteString as Sock
24import Network.Wai
23import Network.Wai
25−import Network.Wai.Internal
26import Network.Wai.Handler.Warp.Recv
24import Network.Wai.Handler.Warp.Recv
27import Network.Wai.Handler.Warp.Request
25import Network.Wai.Handler.Warp.Request
28import Network.Wai.Handler.Warp.Response
26import Network.Wai.Handler.Warp.Response
@@ -276,24 +274,12 @@ serveConnection timeoutHandle settings cleaner app conn remoteHost' =
276respondOnException :: Settings -> Cleaner -> Connection -> SockAddr -> IO () -> IO ()
274respondOnException :: Settings -> Cleaner -> Connection -> SockAddr -> IO () -> IO ()
277respondOnException settings cleaner conn remoteHost' io = io `catch` \e@(SomeException _) -> do
275respondOnException settings cleaner conn remoteHost' io = io `catch` \e@(SomeException _) -> do
278 mask $ \restore ->
276 mask $ \restore ->
279− void $ sendResponse settings cleaner blankRequest conn restore internalError
277+ void $ sendResponse settings cleaner defaultRequest
278+ { remoteHost = remoteHost'
279+ } conn restore internalError
280 throwIO e
280 throwIO e
281 where
281 where
282 internalError = responseLBS H.internalServerError500 [(H.hContentType, "text/plain")] "Something went wrong"
282 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− }
297
283
298connSource :: Connection -> T.Handle -> Source IO ByteString
284connSource :: Connection -> T.Handle -> Source IO ByteString
299connSource Connection { connRecv = recv } th = src
285connSource Connection { connRecv = recv } th = src