]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/ocaml/pxp/pxpUrlResolver.ml
- embedded ClientHTTP module (not very nice, but ClientHTTP shouldn't
[helm.git] / helm / ocaml / pxp / pxpUrlResolver.ml
index 89d540e62fcb0b58c2ad388ae259f4bda95c58d5..ec94b4e5ee4d2c7e6a4b46fd57acebd1fd7fa7d9 100644 (file)
  * http://cs.unibo.it/helm/.
  *)
 
-(* This resolver uses ClientHTTP to download the files from the Web *)
+(* cut and paste from ../getter/clientHTTP.ml *)
+exception HttpClientError of string * string;; (* reason, uri *)
+
+let send cmd =
+ try
+  ignore (Http_client.http_get cmd)
+ with
+  e -> raise (HttpClientError (Printexc.to_string e, cmd))
+;;
+
+let get uri =
+ try
+  Http_client.http_get uri
+ with
+  e -> raise (HttpClientError (Printexc.to_string e, uri))
+;;
+
+let get_and_save uri dest_filename =
+ let reply = get uri
+ and out_channel = open_out dest_filename in
+  output_string out_channel reply ;
+  close_out out_channel
+;;
+
+let get_and_save_to_tmp uri =
+ let flat_string s s' c =
+  let cs = String.copy s in
+   for i = 0 to (String.length s) - 1 do
+    if String.contains s' s.[i] then cs.[i] <- c
+   done ;
+   cs
+ in
+  let user = try Unix.getlogin () with _ -> "" in
+  let tmp_file =
+    Filename.temp_file (user ^ flat_string uri ".-=:;!?/&" '_') ""
+  in
+  get_and_save uri tmp_file ;
+  tmp_file
+;;
+(* / cut and paste from ../getter/clientHTTP.ml *)
+
 let url_resolver =
  let url_of_id =
   function
@@ -33,7 +73,7 @@ let url_resolver =
    | _ -> raise Pxp_reader.Not_competent
  in
  let channel_of_url _ url =
-  let file = ClientHTTP.get_and_save_to_tmp (Neturl.string_of_url url) in
+  let file = get_and_save_to_tmp (Neturl.string_of_url url) in
   let ch = open_in file in
    Unix.unlink file ;
    ch,None
@@ -41,3 +81,4 @@ let url_resolver =
   new Pxp_reader.resolve_read_url_channel
    ~url_of_id ~channel_of_url ()
 ;;
+