]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/DEVEL/ocaml-http/examples/damned_recursion.ml
ocaml 3.09 transition
[helm.git] / helm / DEVEL / ocaml-http / examples / damned_recursion.ml
index 32faa01371ee385d76f01a076e60014aebff6005..be2e3062983331e92cdf28640d392b16ea816c4f 100644 (file)
@@ -2,7 +2,7 @@
 (*
   OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
 
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
+  Copyright (C) <2002-2004> Stefano Zacchiroli <zack@cs.unibo.it>
 
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *)
 
-open Printf;;
+open Printf
+open Http_types
 
-(*
-let wget url =
-  prerr_endline (sprintf "DEBUG: wgetting url '%s'" url);
-  Http_client.Convenience.http_get url
-in
-*)
-let wget addr port path =
-  let rec wget' inchan data =
-    try
-      wget' inchan (data ^ input_line inchan)
-    with End_of_file ->
-      data
-  in
-  prerr_endline (sprintf "DEBUG: wgetting url '%s:%d%s'" addr port path);
-  let sockaddr = Unix.ADDR_INET (Unix.inet_addr_of_string addr, port) in
-  let suck = Unix.socket Unix.PF_INET Unix.SOCK_STREAM 0 in
-  Unix.connect suck sockaddr;
-  let outchan = Unix.out_channel_of_descr suck in
-  output_string outchan (sprintf "GET %s HTTP/1.0\r\n" path);
-  flush outchan;
-  let inchan = Unix.in_channel_of_descr suck in
-  wget' inchan ""
-in
-let callback req outchan =
+let port = 9999
+
+let callback (req: Http_types.request) outchan =
   let i = int_of_string (req#param "x") in
-  prerr_endline (string_of_int i);
-  match i with
-  | 0 -> output_string outchan "0"
-  | x when x>0 ->
-      let data =
-        wget "127.0.0.1" 9999 (sprintf "/foo?x=%d" (x-1))
-(*         wget (sprintf "http://localhost:9999/foo?x=%d" (x-1)) *)
-(*         wget "http://localhost:80/index.html" *)
-      in
-      output_string outchan (sprintf "%s %d" data x)
-  | _ -> assert false
-in
-Http_client.Convenience.http_trials := 1;
-(* Http_daemon.start' ~port:9999 ~mode:`Thread callback *)
-Http_daemon.start' ~port:9999 ~mode:`Fork callback
+  let body =
+    match i with
+    | 0 -> "0"
+    | x when x > 0 ->
+       let data =
+          Http_user_agent.get (sprintf "http://127.0.0.1:%d/foo?x=%d"
+                                port (x - 1))
+       in
+       sprintf "%s %d" data x
+    | _ -> assert false
+  in
+  Http_daemon.respond ~code:(`Code 200) ~body outchan;
+  close_out outchan  (* Http_user_agent relies on EOF, not Content-Length *)
+
+let spec =
+  { Http_daemon.default_spec with
+      callback = callback;
+      port = port;
+      mode = `Thread;
+  }
+
+let _ = Http_daemon.main spec
+