@@ -26,6 +26,7 @@ import Network.Wai.Handler.Warp.Conduit
2626import Network.Wai.Handler.Warp.Header
2727import Network.Wai.Handler.Warp.ReadInt
2828import Network.Wai.Handler.Warp.RequestHeader
29+import Network.Wai.Handler.Warp.Settings (Settings, settingsNoParsePath)
2930import qualified Network.Wai.Handler.Warp.Timeout as Timeout
3031import Network.Wai.Handler.Warp.Types
3132import Network.Wai.Internal
@@ -41,7 +42,8 @@ maxTotalHeaderLength = 50 * 1024
4142
4243-- | Receiving a HTTP request from 'Connection' and parsing its header
4344-- to create 'Request'.
44−recvRequest :: Connection
45+recvRequest :: Settings
46+ -> Connection
4547 -> InternalInfo
4648 -> SockAddr -- ^ Peer's address.
4749 -> Source IO ByteString -- ^ Where HTTP request comes from.
@@ -52,9 +54,9 @@ recvRequest :: Connection
5254 -- 'IndexedHeader' of HTTP request for internal use, and
5355 -- leftover source (i.e. body and other HTTP reqeusts in HTTP pipelining).
5456
55−recvRequest conn ii addr src0 = do
57+recvRequest settings conn ii addr src0 = do
5658 (src, hdrlines) <- src0 $$+ headerLines
57− (method, path, query, httpversion, hdr) <- parseHeaderLines hdrlines
59+ (method, unparsedPath, path, query, httpversion, hdr) <- parseHeaderLines hdrlines
5860 let idxhdr = indexRequestHeader hdr
5961 expect = idxhdr ! idxExpect
6062 cl = idxhdr ! idxContentLength
@@ -65,7 +67,7 @@ recvRequest conn ii addr src0 = do
6567 requestMethod = method
6668 , httpVersion = httpversion
6769 , pathInfo = H.decodePathSegments path
68− , rawPathInfo = path
70+ , rawPathInfo = if settingsNoParsePath settings then unparsedPath else path
6971 , rawQueryString = query
7072 , queryString = H.parseQuery query
7173 , requestHeaders = hdr