X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2FDEVEL%2Focaml-http%2Fhttp_parser.ml;h=7f7b22349a907a75309a42eb315b11933306e6ae;hb=b95baa1e1bf6333558efbced2b055264f7a79fed;hp=164f41324b1ea3b97a24bc1cede0a40e7ea0cc29;hpb=37f3d7291d4260eb0bc5e6e26afae557f324e587;p=helm.git diff --git a/helm/DEVEL/ocaml-http/http_parser.ml b/helm/DEVEL/ocaml-http/http_parser.ml index 164f41324..7f7b22349 100644 --- a/helm/DEVEL/ocaml-http/http_parser.ml +++ b/helm/DEVEL/ocaml-http/http_parser.ml @@ -68,7 +68,18 @@ let field_content_RE_raw = separators_RE_raw quoted_string_RE_raw text_RE_raw +(* + (* following RFC 2616 specifications *) let field_value_RE_raw = "((" ^ field_content_RE_raw ^ ")|(" ^ lws_RE_raw^ "))*" +*) + (* smarter implementation: TEXT production is included in the regexp below *) +let field_value_RE_raw = + sprintf + "^((%s)|(%s)|(%s)|(%s))*$" + token_RE_raw + separators_RE_raw + quoted_string_RE_raw + lws_RE_raw let token_RE = Pcre.regexp ("^" ^ token_RE_raw ^ "$") let field_value_RE = Pcre.regexp ("^" ^ field_value_RE_raw ^ "$") @@ -77,11 +88,15 @@ let is_token s = Pcre.pmatch ~rex:token_RE s let is_field_name = is_token let is_field_value s = Pcre.pmatch ~rex:field_value_RE s +let heal_header_name s = + if not (is_field_name s) then raise (Invalid_header_name s) else () + +let heal_header_value s = + if not (is_field_value s) then raise (Invalid_header_value s) else () + let heal_header (name, value) = - if not (is_field_name name && is_field_value value) then - raise (Invalid_header (name ^ ": " ^ value)) - else - () + heal_header_name name; + heal_header_value name (** given an HTTP like query string (e.g. "name1=value1&name2=value2&...") @return a list of pairs [("name1", "value1"); ("name2", "value2")] @@ -141,11 +156,6 @@ let generic_input_line ~sep ~ic = else !line - (** given an input channel, reads from it a GET HTTP request and - @return a pair where path is a string representing the - requested path and query_params is a list of pairs (the GET - parameters) - *) let parse_request = let patch_empty_path s = (if s = "" then "/" else s) in let pieces_sep = Pcre.regexp " " in @@ -182,3 +192,8 @@ let parse_request = (path, query_params) | _ -> raise (Malformed_request request_line) +let parse_request' ic = + let (path, params) = parse_request ic in + let clisockaddr = Http_misc.peername_of_in_channel ic in + new Http_request.request ~path ~params ~clisockaddr +