Something went wrong. Try again.
An adversarial testing framework for OCaml HTTP/1.1 clients and servers
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354type t = (string, int) Hashtbl.t
let create () = Hashtbl.create 128
let hit state token = let count = Option.value ~default:0 (Hashtbl.find_opt state token) + 1 in Hashtbl.replace state token count; count
let count state token = Option.value ~default:0 (Hashtbl.find_opt state token)let reset state token = Hashtbl.replace state token 0let prefix = "/__httnope__"
let path_target target = match String.index_opt target ':' with | Some scheme_end when scheme_end + 2 < String.length target && String.sub target scheme_end 3 = "://" -> let authority = scheme_end + 3 in let rec find_path index = if index = String.length target then "/" else match target.[index] with | '/' -> String.sub target index (String.length target - index) | '?' -> "/" ^ String.sub target index (String.length target - index) | _ -> find_path (index + 1) in find_path authority | _ -> target
let segments target = let target = path_target target in let path = match String.index_opt target '?' with | None -> target | Some index -> String.sub target 0 index in String.split_on_char '/' path |> List.filter (fun segment -> segment <> "")
let ready_line port = Printf.sprintf "HTTNOPE_READY %d\n" port
let parse_ready_line line = let prefix = "HTTNOPE_READY " in if not (String.starts_with ~prefix line) then Error (Printf.sprintf "expected %S readiness prefix" prefix) else let value = String.sub line (String.length prefix) (String.length line - String.length prefix) in match int_of_string_opt value with | Some port when port > 0 && port <= 65535 -> Ok port | _ -> Error (Printf.sprintf "invalid readiness port %S" value)