@@ -26,6 +26,7 @@ import Network.Wai.Handler.Warp.Conduit
26import Network.Wai.Handler.Warp.Header
26import Network.Wai.Handler.Warp.Header
27import Network.Wai.Handler.Warp.ReadInt
27import Network.Wai.Handler.Warp.ReadInt
28import Network.Wai.Handler.Warp.RequestHeader
28import Network.Wai.Handler.Warp.RequestHeader
29+import Network.Wai.Handler.Warp.Settings (Settings, settingsNoParsePath)
29import qualified Network.Wai.Handler.Warp.Timeout as Timeout
30import qualified Network.Wai.Handler.Warp.Timeout as Timeout
30import Network.Wai.Handler.Warp.Types
31import Network.Wai.Handler.Warp.Types
31import Network.Wai.Internal
32import Network.Wai.Internal
@@ -41,7 +42,8 @@ maxTotalHeaderLength = 50 * 1024
42-- | Receiving a HTTP request from 'Connection' and parsing its header
43-- | Receiving a HTTP request from 'Connection' and parsing its header
43-- to create 'Request'.
44-- to create 'Request'.
45+recvRequest :: Settings
44−recvRequest :: Connection
46+ -> Connection
45 -> InternalInfo
47 -> InternalInfo
46 -> SockAddr -- ^ Peer's address.
48 -> SockAddr -- ^ Peer's address.
47 -> Source IO ByteString -- ^ Where HTTP request comes from.
49 -> Source IO ByteString -- ^ Where HTTP request comes from.
@@ -52,9 +54,9 @@ recvRequest :: Connection
52 -- 'IndexedHeader' of HTTP request for internal use, and
54 -- 'IndexedHeader' of HTTP request for internal use, and
53 -- leftover source (i.e. body and other HTTP reqeusts in HTTP pipelining).
55 -- leftover source (i.e. body and other HTTP reqeusts in HTTP pipelining).
55−recvRequest conn ii addr src0 = do
57+recvRequest settings conn ii addr src0 = do
56 (src, hdrlines) <- src0 $$+ headerLines
58 (src, hdrlines) <- src0 $$+ headerLines
57− (method, path, query, httpversion, hdr) <- parseHeaderLines hdrlines
59+ (method, unparsedPath, path, query, httpversion, hdr) <- parseHeaderLines hdrlines
58 let idxhdr = indexRequestHeader hdr
60 let idxhdr = indexRequestHeader hdr
59 expect = idxhdr ! idxExpect
61 expect = idxhdr ! idxExpect
60 cl = idxhdr ! idxContentLength
62 cl = idxhdr ! idxContentLength
@@ -65,7 +67,7 @@ recvRequest conn ii addr src0 = do
65 requestMethod = method
67 requestMethod = method
66 , httpVersion = httpversion
68 , httpVersion = httpversion
67 , pathInfo = H.decodePathSegments path
69 , pathInfo = H.decodePathSegments path
68− , rawPathInfo = path
70+ , rawPathInfo = if settingsNoParsePath settings then unparsedPath else path
69 , rawQueryString = query
71 , rawQueryString = query
70 , queryString = H.parseQuery query
72 , queryString = H.parseQuery query
71 , requestHeaders = hdr
73 , requestHeaders = hdr