// ------------------------------------------------------------------
// Object
parent $root
object $daemon
var $daemon host 0
var $daemon buffer `[]
var $daemon lines []
var $daemon active 0
method initialize
(| pass() |);
host = "";
buffer = `[];
lines = [];
.
method host
return host;
.
method set_host
arg host;
set_var('host, host);
.
method send
arg what;
var l;
switch (type(what)) {
case 'list:
what = buffer_from_strings(what);
case 'string:
what = buffer_from_strings([what]);
}
echo(what);
.
method startup
arg port;
.log("** Starting httpd on port " + tostr(port) + " **");
bind_port(port, this());
.
method connect
arg host, socket;
var d;
d = create([$sys.starting_parent()]);
d.initialize();
reassign_connection(d);
d.set_active();
d.set_host(host);
.
method set_active
active = 1;
.
method parse_line
arg line;
.
method parse
arg incoming;
var l, line, i, t;
catch any {
l = buffer_to_strings(buffer_append(buffer, incoming));
i = listlen(l);
buffer = l[i];
l = delete(l, i);
lines = lines + l;
while (lines) {
l = lines[1];
lines = delete(lines, 1);
(> .process_line(l) <);
if (!active)
break;
}
} with handler {
t = traceback();
.set_status(500);
.respond($parse.html_traceback(500, t));
.close();
.log($parse.traceback(t));
}
if (!active)
.destroy();
.
method destroy
.close();
pass();
.
method close
close_connection();
active = 0;
.
method disconnect
arg [args];
.close();
.destroy();
.