3 #load "netstring.cma";;
8 (**********************************************************************)
9 (* dest_form_encoded_parameters *)
10 (**********************************************************************)
17 Content-Disposition: form-data; name=blupp
24 r = ["blupp", "text/plain", "This is a text"]
33 Content-Disposition: form-data; name=blupp
40 r = ["blupp", "text/plain", "This is a text"]
48 Content-Disposition: form-data; name=blupp
54 r = ["blupp", "text/plain", "This is a text"]
62 Content-Disposition: form-data; name=blupp
69 r = ["blupp", "text/plain", "This is a text\013\n"]
77 Content-Disposition: form-data; name=blupp
84 r = ["blupp", "text/plain", "This is a text\n"]
93 Content-Disposition: form-data;name= \"blupp\"
100 r = ["blupp", "text/plain", "This is a text"]
109 Content-Disposition: form-data;name= \"name=blupp\"
116 r = ["name=blupp", "text/plain", "This is a text"]
125 Content-Disposition: form-data; strange=\"name=blop\"; name= \"blupp\"
132 r = ["blupp", "text/plain", "This is a text"]
141 Content-Disposition: form-data; strange=\" name=blop \"; name=blupp
148 r = ["blupp", "text/plain", "This is a text"]
153 (* There is a space after "octet-stream"! *)
157 Content-Disposition: form-data; name=blupp
158 Content-type: application/octet-stream
164 r = ["blupp", "application/octet-stream", "This is a text"]
173 Content-Disposition: form-data; name=blupp
177 Content-Disposition: form-data; name=blipp
184 r = ["blupp", "text/plain", "This is a text";
185 "blipp", "text/plain", "Another line" ]
193 "-----------------------------10843891265508332411092264958
194 Content-Disposition: form-data; name=\"line\"
197 -----------------------------10843891265508332411092264958
198 Content-Disposition: form-data; name=\"submit\"
201 -----------------------------10843891265508332411092264958--
203 "---------------------------10843891265508332411092264958"
205 r = [ "line", "text/plain", "aaa";
206 "submit", "text/plain", "Submit";
211 (**********************************************************************)
213 (**********************************************************************)
216 let s = String.create 256 in
217 for i = 0 to 255 do s.[i] <- Char.chr i done;
219 r = ("%00%01%02%03%04%05%06%07%08%09%0A%0B%0C%0D%0E%0F" ^
220 "%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F" ^
221 "+!%22%23$%25%26'()*%2B,-.%2F" ^
222 "0123456789%3A%3B%3C%3D%3E%3F" ^
223 "%40ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_" ^
224 "%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D%7E%7F" ^
225 "%80%81%82%83%84%85%86%87%88%89%8A%8B%8C%8D%8E%8F" ^
226 "%90%91%92%93%94%95%96%97%98%99%9A%9B%9C%9D%9E%9F" ^
227 "%A0%A1%A2%A3%A4%A5%A6%A7%A8%A9%AA%AB%AC%AD%AE%AF" ^
228 "%B0%B1%B2%B3%B4%B5%B6%B7%B8%B9%BA%BB%BC%BD%BE%BF" ^
229 "%C0%C1%C2%C3%C4%C5%C6%C7%C8%C9%CA%CB%CC%CD%CE%CF" ^
230 "%D0%D1%D2%D3%D4%D5%D6%D7%D8%D9%DA%DB%DC%DD%DE%DF" ^
231 "%E0%E1%E2%E3%E4%E5%E6%E7%E8%E9%EA%EB%EC%ED%EE%EF" ^
232 "%F0%F1%F2%F3%F4%F5%F6%F7%F8%F9%FA%FB%FC%FD%FE%FF")
237 let r = String.create 256 in
238 for i = 0 to 255 do r.[i] <- Char.chr i done;
240 ("%00%01%02%03%04%05%06%07%08%09%0A%0B%0C%0D%0E%0F" ^
241 "%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F" ^
242 "+!%22%23$%25%26'()*%2B,-.%2F" ^
243 "0123456789%3A%3B%3C%3D%3E%3F" ^
244 "%40ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_" ^
245 "%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D%7E%7F" ^
246 "%80%81%82%83%84%85%86%87%88%89%8A%8B%8C%8D%8E%8F" ^
247 "%90%91%92%93%94%95%96%97%98%99%9A%9B%9C%9D%9E%9F" ^
248 "%A0%A1%A2%A3%A4%A5%A6%A7%A8%A9%AA%AB%AC%AD%AE%AF" ^
249 "%B0%B1%B2%B3%B4%B5%B6%B7%B8%B9%BA%BB%BC%BD%BE%BF" ^
250 "%C0%C1%C2%C3%C4%C5%C6%C7%C8%C9%CA%CB%CC%CD%CE%CF" ^
251 "%D0%D1%D2%D3%D4%D5%D6%D7%D8%D9%DA%DB%DC%DD%DE%DF" ^
252 "%E0%E1%E2%E3%E4%E5%E6%E7%E8%E9%EA%EB%EC%ED%EE%EF" ^
253 "%F0%F1%F2%F3%F4%F5%F6%F7%F8%F9%FA%FB%FC%FD%FE%FF") in
259 let r = String.create 256 in
260 for i = 0 to 255 do r.[i] <- Char.chr i done;
263 ("%00%01%02%03%04%05%06%07%08%09%0A%0B%0C%0D%0E%0F" ^
264 "%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F" ^
265 "+!%22%23$%25%26'()*%2B,-.%2F" ^
266 "0123456789%3A%3B%3C%3D%3E%3F")) ^
267 "%40ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_" ^
269 ("%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D%7E%7F" ^
270 "%80%81%82%83%84%85%86%87%88%89%8A%8B%8C%8D%8E%8F" ^
271 "%90%91%92%93%94%95%96%97%98%99%9A%9B%9C%9D%9E%9F" ^
272 "%A0%A1%A2%A3%A4%A5%A6%A7%A8%A9%AA%AB%AC%AD%AE%AF" ^
273 "%B0%B1%B2%B3%B4%B5%B6%B7%B8%B9%BA%BB%BC%BD%BE%BF" ^
274 "%C0%C1%C2%C3%C4%C5%C6%C7%C8%C9%CA%CB%CC%CD%CE%CF" ^
275 "%D0%D1%D2%D3%D4%D5%D6%D7%D8%D9%DA%DB%DC%DD%DE%DF" ^
276 "%E0%E1%E2%E3%E4%E5%E6%E7%E8%E9%EA%EB%EC%ED%EE%EF" ^
277 "%F0%F1%F2%F3%F4%F5%F6%F7%F8%F9%FA%FB%FC%FD%FE%FF"))) in
281 (**********************************************************************)
282 (* dest_url_encoded_parameters *)
283 (**********************************************************************)
286 let r = dest_url_encoded_parameters "a=b&c=d" in
287 r = ["a", "b"; "c", "d" ]
292 let r = dest_url_encoded_parameters "a=&c=d" in
293 r = ["a", ""; "c", "d" ]
298 let r = dest_url_encoded_parameters "a=&c=" in
299 r = ["a", ""; "c", "" ]
304 let r = dest_url_encoded_parameters "" in
310 let r = dest_url_encoded_parameters "%41=%42" in
315 (**********************************************************************)
319 print_endline ("Test " ^ n ^ " ok")
321 print_endline ("Test " ^ n ^ " FAILED!!!!");
326 let test_dest_form_encoded_parameters f n =
328 let args = dest_form_encoded_parameters s b default_config in
330 (fun a -> arg_name a, arg_mimetype a, arg_value a)
334 print_endline ("Test dest_form_encoded_parameters " ^ n ^ " ok")
336 print_endline ("Test dest_form_encoded_parameters " ^ n ^ " FAILED!!!!");
342 (* Returns a channel that reads from string s.
343 * This requires forking.
345 let rd, wr = Unix.pipe() in
346 let pid = Unix.fork() in
347 if pid = 0 then begin
349 let out = Unix.out_channel_of_descr wr in
355 Unix.in_channel_of_descr rd
359 let test_dest_form_encoded_parameters_from_netstream f n =
361 let fd = fill_stream s in
362 let bs = String.length b * 2 in
363 let stream = Netstream.create_from_channel fd None bs in
364 let args = dest_form_encoded_parameters_from_netstream
365 stream b default_config in
370 Printf.printf "name=%s mimetype=%s value=%s\n"
371 (arg_name a) (arg_mimetype a) (arg_value a))
375 (fun a -> arg_name a, arg_mimetype a, arg_value a)
380 "Test dest_form_encoded_parameters_from_netstream %s ok\n"
383 print_endline ("Test dest_form_encoded_parameters_from_netstream " ^ n ^ " FAILED!!!!");
389 test_dest_form_encoded_parameters t001 "001";;
390 test_dest_form_encoded_parameters t002 "002";;
391 test_dest_form_encoded_parameters t003 "003";;
392 test_dest_form_encoded_parameters t004 "004";;
393 test_dest_form_encoded_parameters t005 "005";;
394 test_dest_form_encoded_parameters t006 "006";;
395 test_dest_form_encoded_parameters t007 "007";;
396 test_dest_form_encoded_parameters t008 "008";;
397 test_dest_form_encoded_parameters t009 "009";;
398 test_dest_form_encoded_parameters t010 "010";;
399 test_dest_form_encoded_parameters t011 "011";;
400 test_dest_form_encoded_parameters t012 "012";;
402 test_dest_form_encoded_parameters_from_netstream t001 "001";;
403 test_dest_form_encoded_parameters_from_netstream t002 "002";;
404 test_dest_form_encoded_parameters_from_netstream t003 "003";;
405 test_dest_form_encoded_parameters_from_netstream t004 "004";;
406 test_dest_form_encoded_parameters_from_netstream t005 "005";;
407 test_dest_form_encoded_parameters_from_netstream t006 "006";;
408 test_dest_form_encoded_parameters_from_netstream t007 "007";;
409 test_dest_form_encoded_parameters_from_netstream t008 "008";;
410 test_dest_form_encoded_parameters_from_netstream t009 "009";;
411 test_dest_form_encoded_parameters_from_netstream t010 "010";;
412 test_dest_form_encoded_parameters_from_netstream t011 "011";;
413 test_dest_form_encoded_parameters_from_netstream t012 "012";;