@@ -69,10 +69,15 @@ type Port = Int
70serveConnections :: Port -> Application -> Socket -> IO ()
70serveConnections :: Port -> Application -> Socket -> IO ()
71serveConnections port app socket = do
71serveConnections port app socket = do
72− (conn, _) <- accept socket
72+ (conn, sa) <- accept socket
73− let remoteHost' = undefined
73+ let remoteHost' = stripPort $ show sa -- FIXME
74 _ <- forkIO $ serveConnection port app conn remoteHost'
74 _ <- forkIO $ serveConnection port app conn remoteHost'
75 serveConnections port app socket
75 serveConnections port app socket
78+ case break (== ':') $ reverse s of
79+ (_, ':' : rest) -> reverse rest
77serveConnection :: Port -> Application -> Socket -> String -> IO ()
82serveConnection :: Port -> Application -> Socket -> String -> IO ()
78serveConnection port app conn remoteHost' = do
83serveConnection port app conn remoteHost' = do
@@ -84,7 +89,7 @@ serveConnection port app conn remoteHost' = do
85 ignoreAll :: SomeException -> IO ()
90 ignoreAll :: SomeException -> IO ()
86 ignoreAll _ = return ()
91 ignoreAll _ = return ()
87− fromClient = enumSocket 4096 conn
92+ fromClient = enumSocket bytesPerRead conn
88 serveConnection' = do
93 serveConnection' = do
89 (enumeratee, env) <- parseRequest port remoteHost'
94 (enumeratee, env) <- parseRequest port remoteHost'
90 res <- E.joinI $ enumeratee $$ app env
95 res <- E.joinI $ enumeratee $$ app env
@@ -97,9 +102,10 @@ parseRequest port remoteHost' = do
97 parseRequest' port headers' remoteHost'
102 parseRequest' port headers' remoteHost'
99-- FIXME come up with good values here
104-- FIXME come up with good values here
100−maxHeaders, maxHeaderLength :: Int
105+maxHeaders, maxHeaderLength, bytesPerRead :: Int
101maxHeaders = 30
106maxHeaders = 30
102maxHeaderLength = 1024
107maxHeaderLength = 1024
104takeUntilBlank :: Int
110takeUntilBlank :: Int
105 -> ([ByteString] -> [ByteString])
111 -> ([ByteString] -> [ByteString])