X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Focaml%2Fgetter%2Fhttp_getter.ml;h=4094a7376268eb6a31036a874643e258cbad4e9a;hb=b6101c89b49ad1df07df62ec661c8b30bda99a2a;hp=d0ecf9ba22d241851933a343fd6406a82cc390cb;hpb=46f19eadce5f3a11c0ae26934fd8d1b597906416;p=helm.git diff --git a/helm/ocaml/getter/http_getter.ml b/helm/ocaml/getter/http_getter.ml index d0ecf9ba2..4094a7376 100644 --- a/helm/ocaml/getter/http_getter.ml +++ b/helm/ocaml/getter/http_getter.ml @@ -35,8 +35,6 @@ open Http_getter_types exception Not_implemented of string exception UnexpectedGetterOutput -(* resolve_result is needed because it is not possible to raise *) -(* an exception in a pxp ever-processing callback. Too bad. *) type resolve_result = | Unknown | Exception of exn @@ -44,17 +42,18 @@ type resolve_result = type logger_callback = HelmLogger.html_tag -> unit -let stdout_logger tag = print_string (HelmLogger.string_of_html_tag tag) +let stdout_logger tag = print_string (HelmLogger.string_of_html_tag tag) let not_implemented s = raise (Not_implemented ("Http_getter." ^ s)) -let (index_line_sep_RE, index_sep_RE, trailing_types_RE, - heading_cic_RE, heading_theory_RE, heading_nuprl_RE, - heading_rdf_cic_RE, heading_rdf_theory_RE) = - (Pcre.regexp "[ \t]+", Pcre.regexp "\r\n|\r|\n", - Pcre.regexp "\\.types$", - Pcre.regexp "^cic:", Pcre.regexp "^theory:", Pcre.regexp "^nuprl:", - Pcre.regexp "^helm:rdf.*//cic:", Pcre.regexp "^helm:rdf.*//theory:") +let index_line_sep_RE = Pcre.regexp "[ \t]+" +let index_sep_RE = Pcre.regexp "\r\n|\r|\n" +let trailing_types_RE = Pcre.regexp "\\.types$" +let heading_cic_RE = Pcre.regexp "^cic:" +let heading_theory_RE = Pcre.regexp "^theory:" +let heading_nuprl_RE = Pcre.regexp "^nuprl:" +let heading_rdf_cic_RE = Pcre.regexp "^helm:rdf.*//cic:" +let heading_rdf_theory_RE = Pcre.regexp "^helm:rdf.*//theory:" (* global maps, shared by all threads *) @@ -260,33 +259,41 @@ let ls_remote lsuri = not_implemented "ls_remote" let resolve_remote uri = (* deliver resolve request to http_getter *) - let doc = ClientHTTP.get (sprintf "%sresolve?uri=%s" (getter_url ()) uri) in + let doc = + Http_getter_wget.get (sprintf "%sresolve?uri=%s" (getter_url ()) uri) + in let res = ref Unknown in - Pxp_ev_parser.process_entity PxpHelmConf.pxp_config (`Entry_content []) - (Pxp_ev_parser.create_entity_manager ~is_document:true - PxpHelmConf.pxp_config (Pxp_yacc.from_string doc)) - (function - | Pxp_types.E_start_tag ("url",["value",url],_,_) -> res := Resolved url - | Pxp_types.E_start_tag ("unresolvable",[],_,_) -> - res := Exception (Unresolvable_URI uri) - | Pxp_types.E_start_tag ("not_found",[],_,_) -> - res := Exception (Key_not_found uri) - | Pxp_types.E_start_tag (x,_,_,_) -> - res := Exception UnexpectedGetterOutput - | _ -> ()); - match !res with - | Unknown -> raise UnexpectedGetterOutput - | Exception e -> raise e - | Resolved url -> url + let start_element tag attrs = + match tag with + | "url" -> + (try + res := Resolved (List.assoc "value" attrs) + with Not_found -> ()) + | "unresolvable" -> res := Exception (Unresolvable_URI uri) + | "not_found" -> res := Exception (Key_not_found uri) + | _ -> () + in + let callbacks = { + XmlPushParser.default_callbacks with + XmlPushParser.start_element = Some start_element + } in + let xml_parser = XmlPushParser.create_parser callbacks in + XmlPushParser.parse xml_parser (`String doc); + XmlPushParser.final xml_parser; + match !res with + | Unknown -> raise UnexpectedGetterOutput + | Exception e -> raise e + | Resolved url -> url let register_remote ~uri ~url = - ClientHTTP.send (sprintf "%sregister?uri=%s&url=%s" (getter_url ()) uri url) + Http_getter_wget.send + (sprintf "%sregister?uri=%s&url=%s" (getter_url ()) uri url) let unregister_remote uri = - ClientHTTP.send (sprintf "%sunregister?uri=%s" (getter_url ()) uri) + Http_getter_wget.send (sprintf "%sunregister?uri=%s" (getter_url ()) uri) let update_remote logger () = - let answer = ClientHTTP.get (getter_url () ^ "update") in + let answer = Http_getter_wget.get (getter_url () ^ "update") in logger (`T answer); logger `BR @@ -297,7 +304,7 @@ let getxml_remote ~format ~patch_dtd uri = (match format with `Normal -> "normal" | `Gzipped -> "gz") (match patch_dtd with true -> "yes" | false -> "no") in - ClientHTTP.get_and_save_to_tmp uri + Http_getter_wget.get_and_save_to_tmp uri (* API *) @@ -648,12 +655,14 @@ let sync_dump_file () = let init () = Http_getter_logger.set_log_level - (Helm_registry.get_opt_default Helm_registry.get_int 1 "getter.log_level"); + (Helm_registry.get_opt_default Helm_registry.int ~default:1 + "getter.log_level"); Http_getter_logger.set_log_file - (Helm_registry.get_opt Helm_registry.get_string "getter.log_file"); + (Helm_registry.get_opt Helm_registry.string "getter.log_file"); Http_getter_env.reload (); let is_prefetch_set = - Helm_registry.get_opt_default Helm_registry.get_bool false "getter.prefetch" + Helm_registry.get_opt_default Helm_registry.bool ~default:false + "getter.prefetch" in if is_prefetch_set then (* ignore (Thread.create sync_with_map ()) *)