implement echo; include "sys.m"; sys : Sys; include "bufio.m"; bufmod: Bufio; Iobuf: import bufmod; include "draw.m"; draw: Draw; include "content.m"; Content: import Cont; include "cache.m"; include "httpd.m"; g : ref Private_info; include "parser.m"; pars : Parser; include "daytime.m"; daytime : Daytime; include "query.m"; query : Que; echo: module { init: fn(g : ref Private_info, argv: list of string); }; init(k : ref Private_info, argv: list of string) { sys = load Sys "$Sys"; draw = load Draw "$Draw"; stderr := sys->fildes(2); daytime = load Daytime Daytime->PATH; if(daytime == nil){ sys->fprint(stderr,"Daytime module load: %r\n"); return; } pars = load Parser Parser->PATH; if(pars == nil){ sys->fprint(stderr,"echo pars module load: %r\n"); return; } query = load Que Que->PATH; if(query == nil){ sys->fprint(stderr,"echo query module load: %r\n"); return; } meth := hd argv; vers := hd (tl argv); uri := hd(tl(tl argv)); search := hd(tl(tl(tl argv))); g=k; bufmod=g.bufmod; send(meth, vers, uri, search); return; } send(meth, vers, uri, search : string) { c, lastnl : int; if(vers != ""){ if (g.version==nil) sys->print("version is unknown.\n"); if (g.bout==nil) sys->print("AHHHHHHHHH! g.bout is nil.\n"); g.bout.puts(sys->sprint("%s 200 OK\r\n", g.version)); g.bout.puts("Server: Charon\r\n"); g.bout.puts("MIME-version: 1.0\r\n"); g.bout.puts(sys->sprint("Date: %s\r\n", daytime->time())); g.bout.puts("Content-type: text/html\r\n"); g.bout.puts("\r\n"); } g.bout.puts("
");
lastnl = 1;
while((c = g.bin.getc()) != bufmod->EOF){
if(c == '\r'){
g.bout.putc(c);
c = g.bin.getb();
if(c == bufmod->EOF)
break;
}
g.bout.putc(c);
if(c == '\n'){
if(lastnl)
break;
lastnl=1;
}else
lastnl = 0;
}
g.bout.puts("\n");
if (meth=="POST"){
str:="";
i:=0;
while((c = g.bin.getc()) != '\n')
str[len str]=c;
query->init();
q_list:=query->parsequery(str);
g.bout.puts("");
g.bout.puts("Your client sent the following form data:"); g.bout.puts("
| %d | ",i)); g.bout.puts((hd q_list).tag); g.bout.puts(" | "); g.bout.puts(""); g.bout.puts((hd q_list).val); g.bout.puts(" |