let respond_xml
?(via_http = true) ?(enc = `Normal) ?(patch = true) ~url ~uri outchan
=
- let local_resource = Http_getter_misc.is_local_url url in
+ let local_part = Http_getter_misc.local_url url in
+ let local_resource = local_part <> None in
let resource_type = resource_type_of_url url in
let extension = extension_of_resource_type resource_type in
let downloadname =
None
in
if patch then
- Http_getter_common.patch_xml ?xmlbases ~via_http ()
+ Some (Http_getter_common.patch_xml ?xmlbases ~via_http ())
else
- (fun x -> x)
+ None
in
let basename = Pcre.replace ~pat:"\\.gz$" downloadname in
let contype = "text/xml" in
let tmp_short_circuit = fill_cache () in
threadSafe#doReader (lazy(
assert (local_resource || is_in_cache basename);
+ let basename = match local_part with Some f -> f | None -> basename in
let resource_type =
if local_resource then
resource_type
| `Normal ->
Http_getter_logger.log ~level:2
"No format mangling required (encoding = normal)";
- return_file ~via_http ~fname:basename ~contype ~patch_fun outchan
+ return_file ~via_http ~fname:basename ~contype ?patch_fun ~enc
+ outchan
| `Gzipped ->
Http_getter_logger.log ~level:2
"No format mangling required (encoding = gzipped)";
return_file
~via_http ~fname:(basename ^ ".gz") ~contype ~contenc:"x-gzip"
- ~patch_fun ~gunzip:true
+ ?patch_fun ~gunzip:true ~enc
outchan)
| `Normal, `Gzipped | `Gzipped, `Normal ->
(match tmp_short_circuit with
(* required format normal, cached (or local) version gzipped *)
gunzip (* gunzip to tmp *)
~output:tmp ~keep:true (basename ^ ".gz");
- return_file ~via_http ~fname:tmp ~contype ~patch_fun outchan;
+ return_file ~via_http ~fname:tmp ~contype ?patch_fun ~enc outchan
| `Gzipped ->
(* required format is gzipped, cached version is normal *)
gzip ~output:tmp ~keep:true basename; (* gzip to tmp *)
return_file
~via_http ~fname:tmp ~contype ~contenc:"x-gzip"
- ~patch_fun ~gunzip:true
+ ?patch_fun ~gunzip:true ~enc
outchan)
))
| Some (fname, `Normal) -> (* short circuit available, use it! *)
Http_getter_logger.log ~level:2
"Using short circuit (encoding = normal)";
finally (fun () -> Sys.remove fname) (lazy (
- return_file ~via_http ~fname ~contype ~patch_fun outchan
+ return_file ~via_http ~fname ~contype ?patch_fun ~enc outchan
))
| Some (fname, `Gzipped) -> (* short circuit available, use it! *)
Http_getter_logger.log ~level:2
"Using short circuit (encoding = gzipped)";
finally (fun () -> Sys.remove fname) (lazy (
- return_file ~via_http ~fname ~contype ~contenc:"x-gzip" ~patch_fun
- ~gunzip:true outchan
+ return_file ~via_http ~fname ~contype ~contenc:"x-gzip" ?patch_fun
+ ~gunzip:true ~enc outchan
)))
))
let fname = tempfile () in
finally (fun () -> Sys.remove fname) (lazy (
wget ~output:fname url;
- return_file ~via_http ~fname ~contype:"text/xml" ~patch_fun outchan
+ return_file ~via_http ~fname ~contype:"text/xml" ~patch_fun ~enc outchan
))
(* TODO enc is not yet supported *)
in
if Sys.file_exists url then
(* TODO check this: old getter here used text/xml *)
- return_file ~via_http ~fname:url ~contype:"text/plain" ~patch_fun outchan
+ return_file ~via_http ~fname:url ~contype:"text/plain" ~patch_fun ~enc
+ outchan
else
raise (Dtd_not_found url)