]> matita.cs.unibo.it Git - helm.git/commitdiff
added support for IP address info retrieval for OO style 'start' functions
authorStefano Zacchiroli <zack@upsilon.cc>
Mon, 9 Dec 2002 14:59:02 +0000 (14:59 +0000)
committerStefano Zacchiroli <zack@upsilon.cc>
Mon, 9 Dec 2002 14:59:02 +0000 (14:59 +0000)
helm/DEVEL/ocaml-http/http_daemon.ml
helm/DEVEL/ocaml-http/http_parser.ml

index 56596a920d730cd620fbfcd8914cb4d96a344c3a..732a5b31d1e7f77f88b2141502f604d424dcd06a 100644 (file)
@@ -340,16 +340,18 @@ let safe_parse_request = wrap_parse_request_w_safety parse_request
   (* as above but for OO version (Http_parser.parse_request') *)
 let safe_parse_request' = wrap_parse_request_w_safety parse_request'
 
+let chdir_to_document_root = function (* chdir to document root *)
+  | Some dir -> Sys.chdir dir
+  | None -> ()
+
   (* TODO support also chroot to 'root', not only chdir *)
   (* curried request *)
 let start
   ?(addr = default_addr) ?(port = default_port)
   ?(timeout = Some default_timeout) ?(mode = default_mode) ?root callback
   =
-  (match root with  (* chdir to document root *)
-  | Some dir -> Sys.chdir dir
-  | None -> ());
-  let sockaddr = Http_misc.build_sockaddr ~addr ~port in
+  chdir_to_document_root root;
+  let sockaddr = Http_misc.build_sockaddr (addr, port) in
   let daemon_callback inchan outchan =
     try
       let (path, parameters) = safe_parse_request inchan outchan in
@@ -368,7 +370,8 @@ let start'
   ?(timeout = Some default_timeout) ?(mode = default_mode) ?root callback
   =
   let wrapper path params outchan =
-    let req = new Http_request.request ~path ~params in
+    let clisockaddr = Http_misc.peername_of_out_channel outchan in
+    let req = new Http_request.request ~path ~params ~clisockaddr in
     callback req outchan
   in
   match root with
@@ -424,7 +427,7 @@ class daemon ?(addr = "0.0.0.0") ?(port = 80) () =
   object (self)
 
     val suck =
-      Http_tcp_server.init_socket (Http_misc.build_sockaddr ~addr ~port)
+      Http_tcp_server.init_socket (Http_misc.build_sockaddr (addr, port))
 
     method accept =
       let (cli_suck, cli_sockaddr) = Unix.accept suck in  (* may block *)
index 00f8a68182671827bbdb0356bdfe201e767f65b5..7f7b22349a907a75309a42eb315b11933306e6ae 100644 (file)
@@ -194,5 +194,6 @@ let parse_request =
 
 let parse_request' ic =
   let (path, params) = parse_request ic in
-  new Http_request.request ~path ~params
+  let clisockaddr = Http_misc.peername_of_in_channel ic in
+  new Http_request.request ~path ~params ~clisockaddr