(*
- * Copyright (C) 2003:
+ * Copyright (C) 2003-2004:
* Stefano Zacchiroli <zack@cs.unibo.it>
* for the HELM Team http://helm.cs.unibo.it/
*
* http://helm.cs.unibo.it/
*)
-open Http_getter_types;;
-open Printf;;
-open Pxp_document;;
-open Pxp_types;;
-open Pxp_yacc;;
+open Printf
+open Pxp_document
+open Pxp_types
+open Pxp_yacc
+
+open Http_getter_types
let version = Http_getter_const.version
| v -> return_value var v)))
let servers_file = safe_getenv "HTTP_GETTER_SERVERS_FILE"
-let parse_servers () =
- (let cons hd tl = hd @ [ tl ] in
- Http_getter_misc.fold_file cons [] servers_file)
-let servers = ref (parse_servers ())
-let reload_servers () = servers := parse_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))
+ []
+ servers_file)
+
+let _servers = ref (load_servers ())
+let servers () = !_servers
+
+let save_servers () =
+ let oc = open_out servers_file in
+ List.iter (fun (_,server) -> output_string oc (server ^ "\n")) (servers ());
+ close_out oc
+let reload_servers () = _servers := load_servers ()
let cic_dbm = safe_getenv "HTTP_GETTER_CIC_DBM"
let nuprl_dbm = safe_getenv "HTTP_GETTER_NUPRL_DBM"
| "gz" -> Enc_gzipped
| mode -> failwith ("Invalid cache mode: " ^ mode)
-let reload () =
- reload_servers ()
+let reload () = reload_servers ()
-let dump_env () =
- printf
+let env_to_string () =
+ sprintf
"HTTP Getter %s (the OCaml one!)
cic_dbm:\t%s
cic_dir nuprl_dir rdf_dir dtd_dir servers_file host port my_own_url
dtd_base_url
(match cache_mode with Enc_normal -> "Normal" | Enc_gzipped -> "GZipped")
- conf_file conf_dir (String.concat "\n\t" !servers);
- flush stdout
+ conf_file conf_dir
+ (String.concat "\n\t" (* (position * server) list *)
+ (List.map (fun (pos, server) -> sprintf "%3d: %s" pos server)
+ (servers ())))
+
+let add_server ?position url =
+ (match position with
+ | None ->
+ _servers := !_servers @ [-1, url];
+ | Some p when p > 0 ->
+ let rec add_after pos = function
+ | [] -> [-1, url]
+ | hd :: tl when p = 1 -> hd :: (-1, url) :: tl
+ | hd :: tl (* when p > 1 *) -> hd :: (add_after (pos - 1) tl)
+ in
+ _servers := add_after p !_servers
+ | Some _ -> assert false);
+ save_servers ();
+ reload_servers ()
+
+let remove_server position =
+ _servers := List.remove_assoc position !_servers;
+ save_servers ();
+ reload_servers ()