]> matita.cs.unibo.it Git - helm.git/commitdiff
- added support for empty bindings like "a=" or simple "a" in query
authorStefano Zacchiroli <zack@upsilon.cc>
Tue, 26 Nov 2002 15:40:03 +0000 (15:40 +0000)
committerStefano Zacchiroli <zack@upsilon.cc>
Tue, 26 Nov 2002 15:40:03 +0000 (15:40 +0000)
  arguments
- s/Malformed_query_binding/Malformed_query_part/g

helm/DEVEL/ocaml-http/debian/changelog
helm/DEVEL/ocaml-http/examples/dump_args.ml
helm/DEVEL/ocaml-http/http_daemon.ml
helm/DEVEL/ocaml-http/http_parser.ml
helm/DEVEL/ocaml-http/http_parser.mli
helm/DEVEL/ocaml-http/http_request.ml

index 6c6e399a7269445b713c9222fb65ece4ebecd0ef..5379f47a4c8b53de0f14550a93d6f27658b6f09f 100644 (file)
@@ -1,7 +1,9 @@
 ocaml-http (0.0.6) unstable; urgency=low
 
   * Added support for multiple binding of the same parameter in request
-    objects (new method: 'param_all')
+    objects (new method: 'paramAll')
+  * Added support for 'empty' bindings in query arguments (e.g. "/foo?b=" or
+    "/foo?b")
 
  -- Stefano Zacchiroli <zack@debian.org>  Mon, 25 Nov 2002 11:04:49 +0100
 
index c1f445f12719de32ac66a581292bda35b2b3962a..ef4630fdec715cf86fcbe304a40f4dc49af8cce1 100644 (file)
@@ -19,6 +19,8 @@
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *)
 
+open Printf;;
+
 let dump_args path args =
   Printf.sprintf
     "PATH: %s\nARGS:\n%s"
@@ -26,7 +28,7 @@ let dump_args path args =
     (String.concat
       ""
       (List.map
-        (fun (name, value) -> "\tNAME: " ^ name ^ ", VALUE: " ^ value ^ "\n")
+        (fun (name, value) -> sprintf "\tNAME: '%s', VALUE: '%s'\n" name value)
         args))
 in
 let callback path args outchan =
index 0a0f47775da721d4edac7980be759b299f6f4e7f..f2f70a03729932c647507f37e3cd712b9490431b 100644 (file)
@@ -313,11 +313,11 @@ let start
     | Malformed_query query ->
         respond_error
           ~code:400 ~body:(sprintf "Malformed query string '%s'" query) outchan
-    | Malformed_query_binding (binding, query) ->
+    | Malformed_query_part (binding, query) ->
         respond_error
           ~code:400
           ~body:(
-            sprintf "Malformed query element '%s' in query '%s'" binding query)
+            sprintf "Malformed query part '%s' in query '%s'" binding query)
           outchan
   in
   match mode with
index 87b910010e5f9cbd8d3cf6b44a26fda85857df48..8a16398e88c97c39807b9a6862f258afee99619c 100644 (file)
@@ -23,7 +23,7 @@ open Neturl;;
 open Printf;;
 
 exception Malformed_query of string
-exception Malformed_query_binding of string * string
+exception Malformed_query_part of string * string
 exception Unsupported_method of string
 exception Unsupported_HTTP_version of string
 exception Malformed_request_URI of string
@@ -56,7 +56,7 @@ let request_uri_syntax = {
   (** given an HTTP like query string (e.g. "name1=value1&name2=value2&...")
   @return a list of pairs [("name1", "value1"); ("name2", "value2")]
   @raise Malformed_query if the string isn't a valid query string
-  @raise Malformed_query_binding if some piece of the query isn't valid
+  @raise Malformed_query_part if some piece of the query isn't valid
   *)
 let split_query_params =
   let (bindings_sep, binding_sep) = (Pcre.regexp "&", Pcre.regexp "=") in
@@ -67,12 +67,11 @@ let split_query_params =
       raise (Malformed_query query);
     List.map
       (fun binding ->
-        let pieces = Pcre.split ~rex:binding_sep binding in
-        if List.length pieces <> 2 then
-          raise (Malformed_query_binding (binding, query));
-        (match pieces with
-        | [a; b] -> (http_decode a, http_decode b)
-        | _ -> assert false))
+        match Pcre.split ~rex:binding_sep binding with
+        | [""; b] -> (* '=b' *) raise (Malformed_query_part (binding, query))
+        | [a; b]  -> (* 'a=b' *) (http_decode a, http_decode b)
+        | [a]     -> (* 'a=' || 'a' *) (http_decode a, "")
+        | _ -> raise (Malformed_query_part (binding, query)))
       bindings
 
   (** given an input channel and a separator
index 1cffb2a4a9af6dd9e88837ca334b1b11707e82e7..6ccc675266bd4caa74befb2928cb4c0261004ec1 100644 (file)
@@ -20,7 +20,7 @@
 *)
 
 exception Malformed_query of string
-exception Malformed_query_binding of string * string
+exception Malformed_query_part of string * string
 exception Unsupported_method of string
 exception Unsupported_HTTP_version of string
 exception Malformed_request_URI of string
index c95d198469a82485b1dd2b83cf5c8310cac2010e..c2d9728955a6a70adc7edb4f0b4d078ef4f6bc8f 100644 (file)
@@ -39,7 +39,7 @@ class request ~path ~params =
         Hashtbl.find params_tbl name
       with Not_found ->
         raise (Param_not_found name)
-    method param_all name = List.rev (Hashtbl.find_all params_tbl name)
+    method paramAll name = List.rev (Hashtbl.find_all params_tbl name)
     method params = params
   end