/
ColdWeb-0.2/
ColdWeb-0.2/root/
// ------------------------------------------------------------------
// Object

parent $root
object $sys

var $sys name "ColdWeb Experimental Server"
var $sys htmlv "text/html; level=3"
var $sys codes #[[200, "Ok"], [201, "Created"], [202, "Accepted"], [203, "Provisional Information"], [204, "No Content"], [300, "Multiple Choices"], [301, "Moved Permanently"], [302, "Moved Temporarily"], [303, "Method"], [304, "Not Modified"], [400, "Bad Request"], [401, "Unauthorized"], [402, "Payment Required"], [403, "Forbidden"], [404, "Not Found"], [405, "Method Not Allowed"], [406, "None Acceptable"], [407, "Proxy Authentication Required"], [408, "Request Timeout"], [409, "Conflict"], [410, "Gone"], [500, "Internal Server Error"], [501, "Not Implemented"], [502, "Bad Gateway"], [503, "Service Unavailable"], [504, "Gateway Timeout"]]

var $sys gateways #[]
var $sys methods ["GET", "HEAD"]

var $sys page_tail ["<hr><i><b><a href=\"/\">Cold Web</a></b></i>"]

method htmlv
    return htmlv;
.

method starting_parent
    return $http;
.

method daemon
    return $http;
.

method startup
    arg args;
    var obj;

    catch any {
        for obj in (.starting_parent().children())
            (| obj.destroy() |);
        (> .daemon().startup(toint(sublist(args, 3).to_string()) || 8080) <);

        // the server is screwed, we have to set the heartbeat to SOMETHING
        // so lets make it something we'll never hit
        set_heartbeat(30);
    } with handler {
        .log("** Error Encountered upon startup:");
        .log($parse.traceback(traceback()));
        shutdown();
    }
.

method response
    arg code, message;
    var name, x;
    
    if (!(name = (| codes[code] |)))
        return .response(500, "We had a booboo!  Invalid code: " + tostr(code));
    if (type(message) == 'string)
        message = ["<p align=center><b>" + message + "</b></p>"];
    return ["<head><title>" + tostr(code) + " " + name + "</title></head>",
            "<body>",
            "<h1 align=center>" +  tostr(code) + " " + name + "</h1>",
            "<hr>",
            @message,
            @.page_tail()];
.

method filter_text
    arg text;
    var x, line;
    
    for x in [1 .. listlen(text)] {
        if (text[x]) {
            line = strsub(text[x], "&", "&amp;");
            line = strsub(line, "<", "&lt;");
            line = strsub(line, ">", "&gt;");
            text = replace(text, x, line);
        }
    }
    return text;
.

method gateways
    return gateways;
.

method page_tail
    return page_tail;
.

method methods
    return methods;
.