From 8f0dac2dfe7c1dda766c7e0db2294458f9b8da57 Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Mon, 2 Dec 2024 15:32:08 -0500 Subject: [PATCH] missing file --- src/multipart_form/content_disposition.ml | 31 +++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/multipart_form/content_disposition.ml diff --git a/src/multipart_form/content_disposition.ml b/src/multipart_form/content_disposition.ml new file mode 100644 index 00000000..9f545729 --- /dev/null +++ b/src/multipart_form/content_disposition.ml @@ -0,0 +1,31 @@ +open Utils_ + +type t = { kind: string; name: string option; filename: string option } + +(** Simple display *) +let to_string (self : t) = + let stropt = function + | None -> "None" + | Some s -> spf "%S" s + in + spf "{kind=%S; name=%s; filename=%s}" self.kind (stropt self.name) + (stropt self.filename) + +let parse (hs : Tiny_httpd.Headers.t) : t option = + match Tiny_httpd.Headers.get "content-disposition" hs with + | None -> None + | Some s -> + (match String.split_on_char ';' s with + | [] -> + failwith (Printf.sprintf "multipart: invalid content-disposition %S" s) + | kind :: tl -> + let name = ref None in + let filename = ref None in + List.iter + (fun s -> + match Utils_.split1_on ~c:'=' @@ String.trim s with + | Some ("name", v) -> name := Some (Utils_.remove_quotes v) + | Some ("filename", v) -> filename := Some (Utils_.remove_quotes v) + | _ -> ()) + tl; + Some { kind; name = !name; filename = !filename })