From 37da2899f40661e3e9631e497da8dc59b971cbd0 Mon Sep 17 00:00:00 2001 From: "Charles.Forsyth" Date: Fri, 22 Dec 2006 17:07:39 +0000 Subject: 20060303a --- appl/svc/httpd/echo.b | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 appl/svc/httpd/echo.b (limited to 'appl/svc/httpd/echo.b') diff --git a/appl/svc/httpd/echo.b b/appl/svc/httpd/echo.b new file mode 100644 index 00000000..686a86d2 --- /dev/null +++ b/appl/svc/httpd/echo.b @@ -0,0 +1,89 @@ +implement echo; + +include "sys.m"; + sys: Sys; +stderr: ref Sys->FD; +include "bufio.m"; + +include "draw.m"; +draw : Draw; + +include "cache.m"; +include "contents.m"; +include "httpd.m"; + Private_info: import Httpd; + +include "cgiparse.m"; +cgiparse: CgiParse; + +echo: module +{ + init: fn(g: ref Private_info, req: Httpd->Request); +}; + +init(g: ref Private_info, req: Httpd->Request) +{ + sys = load Sys Sys->PATH; + stderr = sys->fildes(2); + cgiparse = load CgiParse CgiParse->PATH; + if( cgiparse == nil ) { + sys->fprint( stderr, "echo: cannot load %s: %r\n", CgiParse->PATH); + return; + } + + send(g, cgiparse->cgiparse(g, req)); +} + +send(g: ref Private_info, cgidata: ref CgiData ) +{ + bufio := g.bufio; + Iobuf: import bufio; + if( cgidata == nil ){ + g.bout.flush(); + return; + } + + g.bout.puts( cgidata.httphd ); + + g.bout.puts("Echo\r\n"); + g.bout.puts("

Echo

\r\n"); + g.bout.puts(sys->sprint("You requested a %s on %s", + cgidata.method, cgidata.uri)); + if(cgidata.search!=nil) + g.bout.puts(sys->sprint(" with search string %s", cgidata.search)); + g.bout.puts(".\n"); + + g.bout.puts("Your client sent the following headers:

");
+	g.bout.puts( "Client: " + cgidata.remote + "\n" );
+	g.bout.puts( "Date: " + cgidata.tmstamp + "\n" );
+	g.bout.puts( "Version: " + cgidata.version + "\n" );
+	while( cgidata.header != nil ){
+		(tag, val) := hd cgidata.header;
+		g.bout.puts( tag + " " + val + "\n" );
+		cgidata.header = tl cgidata.header;
+	}
+	
+	g.bout.puts("
\n"); + if (cgidata.form != nil){ + i := 0; + g.bout.puts(""); + g.bout.puts("Your client sent the following form data:

"); + g.bout.puts("\n"); + while(cgidata.form!=nil){ + (tag, val) := hd cgidata.form; + g.bout.puts(sys->sprint(" "); + g.bout.puts("\n"); + g.bout.puts("\n"); + cgidata.form = tl cgidata.form; + i++; + } + g.bout.puts("
%d ",i)); + g.bout.puts(tag); + g.bout.puts(" "); + g.bout.puts(val); + g.bout.puts("
\n"); + } + g.bout.puts("\n"); + g.bout.flush(); +} + -- cgit v1.2.3