-let servers_file = lazy (Helm_registry.get "getter.servers_file")
-let cic_dbm = lazy (Helm_registry.get "getter.cic_dbm")
-let nuprl_dbm = lazy (Helm_registry.get "getter.nuprl_dbm")
-let rdf_dbm = lazy (Helm_registry.get "getter.rdf_dbm")
-let xsl_dbm = lazy (Helm_registry.get "getter.xsl_dbm")
-let xml_index = lazy (Helm_registry.get "getter.xml_indexname")
-let rdf_index = lazy (Helm_registry.get "getter.rdf_indexname")
-let xsl_index = lazy (Helm_registry.get "getter.xsl_indexname")
-let cic_dir = lazy (Helm_registry.get "getter.cic_dir")
-let nuprl_dir = lazy (Helm_registry.get "getter.nuprl_dir")
-let rdf_dir = lazy (Helm_registry.get "getter.rdf_dir")
-let dtd_dir = lazy (Helm_registry.get "getter.dtd_dir")
-let dtd_base_url = lazy (Helm_registry.get "getter.dtd_base_url")
-let port = lazy (Helm_registry.get_int "getter.port")
-
-let _servers = ref None
-
-let servers =
- lazy
- (match !_servers with
- | None -> failwith "Getter not yet initialized: servers not available"
- | Some servers -> servers)
-
-let load_servers () =
- let pos = ref (-1) in
- List.rev (Http_getter_misc.fold_file
- (fun line servers ->
- if Http_getter_misc.is_blank_line line then
- servers
- else
- (incr pos; (!pos, line) :: servers))
- []
- (Lazy.force servers_file))
-
-let reload_servers () = _servers := Some (load_servers ())
-
-let save_servers () =
- let oc = open_out (Lazy.force servers_file) in
- List.iter (fun (_,server) -> output_string oc (server ^ "\n"))
- (Lazy.force servers);
- close_out oc
-
-let host =
- lazy
- (let buf = Buffer.create 20 in
- Shell.call ~stdout:(Shell.to_buffer buf) [Shell.cmd "hostname" ["-f"]];
- Pcre.replace ~pat:"\n+$" (Buffer.contents buf))
+let prefix_RE = Pcre.regexp "^\\s*([^\\s]+)\\s+([^\\s]+)\\s*$"
+
+let cache_dir = lazy (normalize_dir (Helm_registry.get "getter.cache_dir"))
+let dtd_dir = lazy (normalize_dir (Helm_registry.get "getter.dtd_dir"))
+let dtd_base_urls = lazy (
+ let rex = Pcre.regexp "/*$" in
+ let raw_urls =
+ match
+ Helm_registry.get_list Helm_registry.string "getter.dtd_base_urls"
+ with
+ | [] -> ["http://helm.cs.unibo.it/dtd"; "http://mowgli.cs.unibo.it/dtd"]
+ | urls -> urls
+ in
+ List.map (Pcre.replace ~rex) raw_urls)
+let port = lazy (
+ Helm_registry.get_opt_default Helm_registry.int ~default:58081 "getter.port")
+
+let prefixes = lazy (
+ let prefixes = Helm_registry.get_list Helm_registry.string "getter.prefix" in
+ List.fold_left
+ (fun acc prefix ->
+ let subs = Pcre.extract ~rex:prefix_RE prefix in
+ try
+ (subs.(1), subs.(2)) :: acc
+ with Invalid_argument _ ->
+ Http_getter_logger.log ("skipping invalid prefix: " ^ prefix);
+ acc)
+ [] prefixes)
+
+let host = lazy (Http_getter_misc.backtick "hostname -f")