X-Git-Url: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/rigol/blobdiff_plain/33b7545abe0668a28d49a34e1a3d1f9cba31d09f..04d383a4a09bfaa3e54b39d36dd8ce6f80afe725:/rigold.c
diff --git a/rigold.c b/rigold.c
index 6e383b7..111c5d6 100644
--- a/rigold.c
+++ b/rigold.c
@@ -35,14 +35,43 @@ static int send_text(int s, char *buf)
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, "
");
send_text(s, scope_idn(sc));
send_text(s, "\n");
- send_text(s, "\n");
+ send_text(s, "\n");
+ send_text(s, "
\n");
+ send_text(s, "\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, "< ");
+ send_text(s, param);
+ send_text(s, "\n> ");
+ send_binary(s, (char*)buf, res);
+ send_text(s, "
\n");
+ } else {
+ sendscpi(sc, param, NULL, 0);
+ }
+ releasescope(sc);
+ }
send_text(s, "\n");
}
@@ -68,6 +97,16 @@ static void serve_lcd(int s, struct scope *sc)
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, "404");
+ send_text(s, "\n");
+ send_text(s, "404
");
+ send_text(s, "\n");
+}
+
int is_eor(char *buf)
{
int eor = 0;
@@ -97,6 +136,7 @@ static void parse_request(int s, struct scope *sc)
const char delim[] = " \t\x0d\x0a";
char *saveptr;
char *token;
+ char *param = NULL;
alarm(TIMEOUT);
ret=read(s, buf, sizeof(buf)-1);
@@ -130,10 +170,32 @@ static void parse_request(int s, struct scope *sc)
}
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);
}
}