home *** CD-ROM | disk | FTP | other *** search
Text File | 1997-08-18 | 3.4 KB | 107 lines | [TEXT/R*ch] |
- (* mosml/examples/cgi/cgitest.sml
- Retrieve and print all fields from a CGI request.
-
- Peter Sestoft, 1997-05-07
- *)
-
- open Mosmlcgi;
-
- fun output_string(s) =
- TextIO.output(TextIO.stdOut,"Content-type: text/html\n\n" ^ s ^ "\n\n");
-
- fun showOpt (info, value) =
- case value of
- NONE => print (info ^ " is not available\n<p>")
- | SOME s => app print [info, " = ", s, "\n<p>"]
-
- fun prtseq (pr, sep) xs =
- let fun h [] = ()
- | h [x] = pr x
- | h (x::xr) = (pr x; print sep; h xr)
- in h xs end
-
- fun showList (info, value) =
- (print info; print " = ";
- prtseq (fn s => print s, ",") value;
- print "\n<p>")
-
- fun adminfo () =
- (showList ("cgi_fieldnames", cgi_fieldnames);
- showList ("cgi_partnames", cgi_partnames);
- app showOpt
- [("cgi_server_software", cgi_server_software),
- ("cgi_server_name", cgi_server_name),
- ("cgi_gateway_interface", cgi_gateway_interface),
- ("cgi_server_protocol", cgi_server_protocol),
- ("cgi_server_port", cgi_server_port),
- ("cgi_request_method", cgi_request_method),
- ("cgi_http_accept", cgi_http_accept),
- ("cgi_http_user_agent", cgi_http_user_agent),
- ("cgi_http_referer", cgi_http_referer),
- ("cgi_path_info", cgi_path_info),
- ("cgi_path_translated", cgi_path_translated),
- ("cgi_script_name", cgi_script_name),
- ("cgi_query_string", cgi_query_string),
- ("cgi_remote_host", cgi_remote_host),
- ("cgi_remote_addr", cgi_remote_addr),
- ("cgi_remote_user", cgi_remote_user),
- ("cgi_remote_ident", cgi_remote_ident),
- ("cgi_auth_type", cgi_auth_type),
- ("cgi_content_type", cgi_content_type),
- ("cgi_content_length", cgi_content_length),
- ("cgi_annotation_server", cgi_annotation_server)])
-
- fun showpart name =
- let val part = valOf(cgi_part name)
- in
- print ("<H2>Part `" ^ name ^ "'</H2>\n");
- app (fn field => showOpt (field, part_field_string part field))
- (part_fieldnames part);
- showOpt("Content type", part_type part);
- print "<P><PRE>"; print (part_data part); print "</PRE>"
- end
-
- fun showfield field = showOpt (field, cgi_field_string field)
-
- fun savepart name =
- let val part = valOf (cgi_part name)
- in
- case part_field_string part "filename" of
- NONE => ()
- | SOME filename =>
- let open BinIO
- val tmpfile = "/tmp/" ^ filename
- val os = openOut tmpfile
- in
- output (os, Byte.stringToBytes (part_data part));
- closeOut os;
- print "<p>Saving file ";
- print tmpfile;
- print " (";
- print (Int.toString (size (part_data part)));
- print " bytes)"
- end
- end
-
- fun err s = TextIO.output(TextIO.stdErr, s);
-
- val _ =
- (print "Content-type: text/html\n\n";
- print "<HTML><P><BR CLEAR>";
- (case cgi_partnames of
- [] => ()
- | _ => (print "<H1>Parts and their contents</H1>";
- app showpart (* savepart *) cgi_partnames));
- (case cgi_fieldnames of
- [] => ()
- | _ => (print "<H1>CGI field names and their values</H1>";
- app showfield cgi_fieldnames));
- print "<H1>Administrative information</h1>";
- adminfo ();
- print "<P><HR>This text was generated by the mosmlcgi \
- \script testcgi.sml on ";
- print (Date.toString(Date.fromTime(Time.now())));
- print "</BODY></HTML>")
- handle exn => err "An exception occurred"
-
-