function HTTPD()
{
this.ajax = null;
this.http = null;
this.running = true; //set this.running = false to exit the server
this.types = {'html': "text/html",
'htm': "text/html",
'png': "image/png",
'txt': "text/plain",
'css': "text/css",
'svg': "image/svg+xml",
'js': "application/x-javascript"}
}
HTTPD.prototype.home = function(client,data)
{
client.writeln("Content-type: text/html");
client.writeln();
client.writeln("
Hello, world!
")
client.writeln("HTTP headers\n");
if (client.header)
client.writeln(client.header.toString())
client.writeln("
")
client.writeln("Form fields\n");
if (data)
client.writeln(data.toString())
client.writeln("
")
client.writeln("");
}
HTTPD.prototype.sendOK = function(client)
{
client.writeln("HTTP/1.1 200 OK");
client.writeln("Client: close");
client.writeln("Date: ", client.startTime.toUTCString());
client.writeln("Expires: ", client.startTime.toUTCString());
client.writeln("Server: JSDB/"+system.version);
}
HTTPD.prototype.sendERROR= function(client)
{
client.writeln("HTTP/1.1 404 NOT FOUND");
client.writeln("Client: close");
client.writeln("Date: ", client.startTime.toUTCString());
client.writeln("Expires: ", client.startTime.toUTCString());
client.writeln("Server: JSDB/"+system.version);
client.writeln("Content-type: text/html\n");
client.writeln("HTTP/1.1 404 Not Found
");
client.writeln("
URL:",client.uri);
client.writeln("
Home");
client.close();
}
HTTPD.prototype.run = function(port)
{
if (!port) port = 8080
if (this.http != null) return;
this.http = null;
for (; this.http == null && port < 8180; port++)
{
try {
this.http = new Server(port);
} catch(err)
{
writeln('Port ', port,' appears to be in use');
}
}
system.execute('http://127.0.0.1:'+ this.http.port + '/')
writeln("Server started on port " + this.http.port);
this.running = true
while (this.running && !system.kbhit())
{
system.gc()
now = new Date;
if (!this.http.anyoneWaiting)
{
sleep(100);
continue;
}
var client = this.http.accept();
if (client == null)
continue;
var request = client.readLine().split(/\s+/);
client.method = request[0];
client.uri = request[1];
if (client.uri == null || client.uri == '') client.uri = '/';
client.version = request[2];
//this.page() should give enough time for the header packet to arrive
if (client.canRead)
{
client.startTime = new Date();
client.header = new Record;
client.readMIME(client.header);
}
client.page = client.uri.substr(1);
client.query = ''
request = client.uri.match(/\/?([^?]*)\?(.*)/);
if (request != null)
{
client.page = request[1];
client.query = request[2];
}
if (client.method == "GET" && client.query)
client.data = new Record(client.query,'&');
else if (client.method = "POST" && client.header.get('Content-type') == 'application/x-www-form-urlencoded')
client.data = new Record(client.read(client.header.get('Content-length')),'&');
if (client.data)
{
for(x=0; x