(* * <COPYRIGHT> * Copyright 2002 Joachim Schrod Network and Publication Consultance GmbH, Gerd Stolpmann * * <GPL> * This file is part of WDialog. * * WDialog is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * WDialog is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with WDialog; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * </> *) (* $Id: wd_run_fcgi.ml,v 1.1 2004-12-04 03:51:08 gremlin43820 Exp $ * ---------------------------------------------------------------------- * *) open Wd_types open Netcgi open Netchannels let print_error (ch:out_obj_channel) exc = let s = Printexc.to_string exc in let out = ch # output_string in out "<html><body><h1>Software error</h1>\n"; out "<tt>"; out (Netencoding.Html.encode_from_latin1 s); out "</tt></body></html>\n" ;; let processing name hdr = `Automatic ;; let create_request_handler ?(charset = `Enc_iso88591) ?session_manager ?(no_cache = true) ?(error_page = print_error) ?response_header ?(reg = (fun _ -> ())) ~uifile () = (* Load the UI term: *) let app = if Filename.check_suffix uifile ".ui.bin" then Wd_transform.load_uiapplication ~charset uifile else if Filename.check_suffix uifile ".ui" then Wd_transform.parse_uiapplication ~charset uifile else failwith "Wd_run_jserv: Bad file extension of ~uifile" in let universe = new Wd_universe.universe app in reg universe; let activate (cgi : cgi_activation) = begin try let cache = match cgi # request_method with `GET -> `No_cache | `POST -> if no_cache then `No_cache else `Unspecified | _ -> assert false in let charset_s = Netconversion.string_of_encoding (charset :> Netconversion.encoding) in let response_header = match response_header with None -> { rh_status = `Ok; rh_content_type = "text/html; charset=" ^ charset_s; (* Note: Some browsers (e.g. Mozilla-0.9.6) do not like * quotes around charset *) rh_cache = cache; rh_filename = None; rh_language = None; rh_script_type = None; rh_style_type = None; rh_set_cookie = []; rh_fields = []; } | Some rh -> rh in Wd_cycle.process_request ?session_manager ~response_header universe cgi; with exc -> cgi # output # rollback_work(); cgi # set_header ~status:`Internal_server_error ~cache:`No_cache (); error_page (cgi#output :> out_obj_channel) exc; (* may raise another exception! *) end; cgi # output # commit_work(); cgi # finalize(); in activate ;; (* ====================================================================== * History: * * $Log: wd_run_fcgi.ml,v $ * Revision 1.1 2004-12-04 03:51:08 gremlin43820 * finially adding fastcgi support * * Revision 1.2 2003/01/04 21:55:25 stolpmann * new record response_header * * Revision 1.1 2002/03/19 22:09:55 stolpmann * Initial revision. * *)