-exception XsltProcessorCouldNotSend;;
-exception XsltProcessorCouldNotReceive;;
+(* Copyright (C) 2000, HELM Team.
+ *
+ * This file is part of HELM, an Hypertextual, Electronic
+ * Library of Mathematics, developed at the Computer Science
+ * Department, University of Bologna, Italy.
+ *
+ * HELM 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.
+ *
+ * HELM 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 HELM; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ * MA 02111-1307, USA.
+ *
+ * For details, see the HELM World-Wide-Web page,
+ * http://cs.unibo.it/helm/.
+ *)
-let portserver = 12345;;
-let portclient = 12346;;
-let time_to_wait = 10;;
+let initialize () =
+ Printf.printf "Initializing the UWOBO servlet, please wait" ; flush stdout ;
+ Hashtbl.iter
+ (fun key uri ->
+ let string_to_send = (Configuration.processor_url ^ "add?xsluri=" ^ Configuration.getter_url ^ "getxslt?uri=" ^ uri ^ "&key=" ^ key)
+ in
+ print_char '.' ; flush stdout ;
+ ClientHTTP.send string_to_send
+ )
+ StyleConfiguration.styles ;
+ Printf.printf " ok\n" ; flush stdout
+;;
+
+(* CSC: esempio per vedere se veniva calcolata bene. Rimuovere pure il commento
+http://phd.cs.unibo.it:8080/helm/servlet/uwobo/apply?xmluri=http%3A//phd.cs.unibo.it%3A8081/getxml%3Furi%3Dcic%3A/Coq/Init/Datatypes/nat_ind.con&keys=C1,C2,L¶m.processorURL=http%3A//phd.cs.unibo.it%3A8080/helm/servlet/uwobo/¶m.getterURL=http%3A//phd.cs.unibo.it%3A8081/&prop.doctype-public=&prop.encoding=&prop.media-type=text/xml¶m.doctype-public=¶m.encoding=¶m.media-type=text/xml¶m.keys=C1%2CC2%2CL¶m.CICURI=cic:/Coq/Init/Datatypes/nat_ind.con¶m.naturalLanguage=yes¶m.annotations=NO
+
+
+&keys=C1,C2,L
+*)
+
+let process uri usecache mode naturalLanguage annotations =
+ let uri = UriManager.string_of_uri uri in
+ let url = Configuration.getter_url ^ "getxml?uri=" ^ uri in
+ let keys =
+ match StyleConfiguration.key_list_of_mode_name mode with
+ first_key::key_list ->
+ first_key ^
+ (List.fold_right
+ (fun key cmd -> "," ^ key ^ cmd)
+ key_list
+ ""
+ )
+ | _ -> prerr_string "Warning: the list of keys for UWOBO is empty\n"; ""
+ in
+ let string_to_send =
+ Configuration.processor_url ^ "apply?xmluri=" ^ url ^
+ "¶m.processorURL=" ^ Configuration.processor_url ^
+ "¶m.getterURL=" ^ Configuration.getter_url ^
+ "&prop.doctype-public=&prop.encoding=&prop.media-type=text/xml" ^
+ "&keys=" ^ keys ^
+ "¶m.keys=" ^ keys ^
+ "¶m.CICURI=" ^ uri ^
+ "¶m.naturalLanguage=" ^ naturalLanguage ^
+ "¶m.annotations=" ^ annotations ^
+ "¶m.doctype-public=¶m.encoding=¶m.media-type=text/xml"
+ in
+ string_to_send
+;;
-let rec process uri usecache mode =
- let module U = Unix in
- let uri = UriManager.string_of_uri uri in
- let pid = string_of_int (U.getpid ())
- and filename' =
- let uri' = Str.replace_first (Str.regexp ".*:") "" uri in
- Str.global_replace (Str.regexp "/") "_"
- (Str.global_replace (Str.regexp "_") "__" uri')
- in let tmpfile = "/tmp/helm_" ^ filename' ^ "_" ^ pid in
- (* test if the cache can be used *)
- let tmp_file_exists = Sys.file_exists tmpfile in
- if usecache && tmp_file_exists then
- tmpfile
- else
- let url = Configuration.getter_url ^ uri in
- (* purge the cache if asked to *)
- if not usecache && tmp_file_exists then
- Sys.remove tmpfile ;
- let string_to_send = mode ^ " " ^ url ^ " " ^ tmpfile in
- (* next function is for looping in case the server is not responding *)
- let rec contact_server () =
- let socketclient = U.socket U.PF_INET U.SOCK_DGRAM 0
- and socketserver = U.socket U.PF_INET U.SOCK_DGRAM 0 in
- let bounded = ref false in
- while not !bounded do
- try
- U.bind socketclient (U.ADDR_INET(U.inet_addr_any,portclient)) ;
- bounded := true
- with _ ->
- print_endline "Port unavailable. Retrying..." ; flush stdout ;
- U.sleep 5 (* wait hoping the inetaddr is released *)
- done ;
- let n =
- U.sendto socketserver string_to_send 0 (String.length string_to_send)
- [] (U.ADDR_INET(U.inet_addr_any,portserver))
- in
- if n = -1 then raise XsltProcessorCouldNotSend ;
- U.close socketserver ;
- let process_signal _ = U.close socketclient in
- Sys.set_signal Sys.sigalrm (Sys.Signal_handle process_signal) ;
- (* if the server does not respond, repeat the query *)
- ignore (U.alarm time_to_wait) ;
- try
- if U.recv socketclient "" 0 0 [] = -1 then
- raise XsltProcessorCouldNotReceive ;
- ignore (U.alarm 0) ; (* stop the bomb *)
- Sys.set_signal Sys.sigalrm Sys.Signal_default ;
- U.close socketclient ;
- tmpfile
- with
- U.Unix_error(_,"recv",_) ->
- print_endline "Xaland server not responding. Retrying..." ;
- flush stdout;
- contact_server ()
- in
- contact_server ()
+(*CSC: ma questa funzione ha senso? Se si', in quale modulo?*)
+(*CSC: tutti i parametri passati alla process sono quasi a caso!!! *)
+let url_of_uri uri =
+ process uri true "cic" "yes" "YES"
;;