return send_binary(s, buf, strlen(buf));
}
-static void serve_index(int s, struct scope *sc)
+static void serve_index(int s, struct scope *sc, char *param)
{
send_text(s, "HTTP/1.0 200 OK\n");
send_text(s, "Content-type: text/html\n\n");
send_text(s, "<html><head><title>");
send_text(s, scope_idn(sc));
send_text(s, "</title></head><body bgcolor=\"#ffffff\" text=\"#000000\">\n");
- send_text(s, "<img src=\"/lcd.png\" height=\"234\" width=\"320\">\n");
+ send_text(s, "<img src=\"/cgi-bin/lcd\" height=\"234\" width=\"320\">\n");
+ send_text(s, "<br>\n");
+ send_text(s, "<form method=\"get\" action=\"\">\n");
+ send_text(s, "<input type=\"text\" name=\"cmd\" value=\"");
+ if (param) {
+ if (strncmp(param, "cmd=", 4) == 0)
+ param += 4;
+
+ send_text(s, param);
+ }
+ send_text(s, "\">\n");
+ send_text(s, "<input type=\"submit\">\n");
+ send_text(s, "</form>\n");
+ if (param) {
+ unsigned char buf[1024*1024];
+ int res;
+
+ claimscope(sc);
+ if (strchr (param, '?')) {
+ res = sendscpi(sc, param, buf, sizeof(buf));
+ send_text(s, "<pre>< ");
+ send_text(s, param);
+ send_text(s, "\n> ");
+ send_binary(s, (char*)buf, res);
+ send_text(s, "</pre>\n");
+ } else {
+ sendscpi(sc, param, NULL, 0);
+ }
+ releasescope(sc);
+ }
send_text(s, "</body></html>\n");
}
free(png);
}
+static void serve_404(int s)
+{
+ send_text(s, "HTTP/1.0 404 Not found\n");
+ send_text(s, "Content-type: text/html\n\n");
+ send_text(s, "<html><head><title>404</title></head>");
+ send_text(s, "<body bgcolor=\"#ffffff\" text=\"#000000\">\n");
+ send_text(s, "<h1>404</h1>");
+ send_text(s, "</body></html>\n");
+}
+
int is_eor(char *buf)
{
int eor = 0;
const char delim[] = " \t\x0d\x0a";
char *saveptr;
char *token;
+ char *param = NULL;
alarm(TIMEOUT);
ret=read(s, buf, sizeof(buf)-1);
}
alarm(0);
+ param = strchr(file, '?');
+ if (param) {
+ *param = 0;
+ param++;
+
+ while ((token = strchr(param, '%')) != NULL) {
+ char buf[3];
+
+ if (strlen(token+1) < 2)
+ break;
+
+ strncpy(buf, token+1, 3);
+ buf[2] = 0;
+
+ *token = (char)strtoul(buf, NULL, 16);
+ memmove(token+1, token+3, strlen(token)-2);
+
+ }
+ }
+
if (strcmp("/", file) == 0) {
- serve_index(s, sc);
- } else if (strcmp("/lcd.png", file) == 0) {
+ serve_index(s, sc, param);
+ } else if (strcmp("/cgi-bin/lcd", file) == 0) {
serve_lcd(s, sc);
+ } else {
+ serve_404(s);
}
}