package tiny_httpd

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Source file content_disposition.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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 })
OCaml

Innovation. Community. Security.