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("
"); 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("
%d | ",i)); g.bout.puts(tag); g.bout.puts(" | "); g.bout.puts(""); g.bout.puts(val); g.bout.puts(" |