new object $http_connection: $inbound_connection;
var $connection active = 0;
var $connection buffer = `[27];
var $connection daemon = 0;
var $connection host = "";
var $connection interface = $http_interface;
var $connection line_buffer = [];
var $connection read_block = 0;
var $connection started_at = 0;
var $connection timeout = 0;
var $http_connection buffer = 0;
var $http_connection line_buffer = 0;
var $http_connection reading = 0;
var $root created_on = 809075134;
var $root flags = ['methods, 'code, 'core, 'variables];
var $root inited = 1;
var $root managed = [$http_connection];
var $root manager = $http_connection;
var $root quota_exempt = 1;
public method .handle_POST_input() {
arg len;
var body;
if (buflen(buffer) < len) {
reading = 300;
while ((buflen(buffer) < len) && --reading) {
$scheduler.sleep(1);
refresh();
}
if (buflen(buffer) < len) {
buffer = `[];
status = 400;
throw(~timeout, "Timeout on receiving POST request");
}
}
body = buf_to_strings(subbuf(buffer, 1, len));
buffer = subbuf(buffer, len + 1);
if ((`[13, 10] in buffer) == 1)
buffer = subbuf(buffer, 3);
if ((body[listlen(body)]) == `[])
body = delete(body, listlen(body));
else
body = replace(body, listlen(body), buf_to_str(body[listlen(body)]));
return body;
};
root method .init_http_connection() {
buffer = `[];
line_buffer = [];
};
driver method .parse() {
arg incoming;
var l, line, i, t, int, sub;
catch any {
buffer += incoming;
int = .interface();
while (!reading) {
if (!(i = `[13, 10] in buffer))
break;
sub = subbuf(buffer, 1, i - 1);
line = buf_to_str(sub);
buffer = subbuf(buffer, i + 2);
(> int.parse_line(line) <);
}
} with {
int.set_status(500);
int.respond($parse_lib.html_traceback(traceback(), 500));
}
};
public method .start() {
arg @args;
.set_timeout(0);
return (> pass(@args) <);
};