X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2FDEVEL%2Focaml-http%2Fhttp_daemon.ml;h=a56780a9fb1252e78921fc80c4c714ec1f16dd15;hb=ca9cd0aeee0ce78a891f7f6091ca8704231a446d;hp=732a5b31d1e7f77f88b2141502f604d424dcd06a;hpb=b5703de4f7697426ebda94fce2558add7c4f0285;p=helm.git diff --git a/helm/DEVEL/ocaml-http/http_daemon.ml b/helm/DEVEL/ocaml-http/http_daemon.ml index 732a5b31d..a56780a9f 100644 --- a/helm/DEVEL/ocaml-http/http_daemon.ml +++ b/helm/DEVEL/ocaml-http/http_daemon.ml @@ -46,7 +46,7 @@ let send_raw ~data outchan = let send_CRLF = send_raw ~data:crlf let send_header ~header ~value = - Http_parser.heal_header (header, value); + Http_parser_sanity.heal_header (header, value); send_raw ~data:(header ^ ": " ^ value ^ crlf) let send_headers ~headers outchan = @@ -108,7 +108,6 @@ let foo_body code body = of an HTTP response; body, if given, will be appended to the body *) let send_foo_body code body = send_raw ~data:(foo_body code body) - (* TODO add the computation of Content-Length header *) let respond (* Warning: keep default values in sync with Http_response.response class *) ?(body = "") ?(headers = []) @@ -121,6 +120,7 @@ let respond in send_basic_headers ~version ~code outchan; send_headers ~headers outchan; + send_header "Content-Length" (string_of_int (String.length body)) outchan; send_CRLF outchan; send_raw ~data:body outchan @@ -338,12 +338,17 @@ let rec wrap_parse_request_w_safety parse_function inchan outchan = 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 safe_parse_request' = wrap_parse_request_w_safety (new Http_request.request) let chdir_to_document_root = function (* chdir to document root *) | Some dir -> Sys.chdir dir | None -> () +let server_of_mode = function + | `Single -> Http_tcp_server.simple + | `Fork -> Http_tcp_server.ocaml_builtin + | `Thread -> Http_tcp_server.thread + (* TODO support also chroot to 'root', not only chdir *) (* curried request *) let start @@ -359,24 +364,23 @@ let start flush outchan with Again -> () in - match mode with - | `Single -> Http_tcp_server.simple ~sockaddr ~timeout daemon_callback - | `Fork -> Http_tcp_server.ocaml_builtin ~sockaddr ~timeout daemon_callback - | `Thread -> Http_tcp_server.thread ~sockaddr ~timeout daemon_callback + (server_of_mode mode) ~sockaddr ~timeout daemon_callback (* OO request *) let start' ?(addr = default_addr) ?(port = default_port) ?(timeout = Some default_timeout) ?(mode = default_mode) ?root callback = - let wrapper path params outchan = - let clisockaddr = Http_misc.peername_of_out_channel outchan in - let req = new Http_request.request ~path ~params ~clisockaddr in - callback req outchan + chdir_to_document_root root; + let sockaddr = Http_misc.build_sockaddr (addr, port) in + let daemon_callback inchan outchan = + try + let req = safe_parse_request' inchan outchan in + callback req outchan; + flush outchan + with Again -> () in - match root with - | None -> start ~addr ~port ~timeout ~mode wrapper - | Some root -> start ~addr ~port ~timeout ~mode ~root wrapper + (server_of_mode mode) ~sockaddr ~timeout daemon_callback module Trivial = struct