From 653a88d48a993e6984f9e802462e9979c3911f18 Mon Sep 17 00:00:00 2001 From: Maurizio Porrato Date: Fri, 17 Feb 2017 07:34:48 +0000 Subject: [PATCH] Added support for HTTP server --- src/Makefile | 8 ++- src/fsdata/.gitignore | 1 + src/fsdata/fs/index.html | 8 +++ src/fsdata/makefsdata | 114 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 130 insertions(+), 1 deletion(-) create mode 100644 src/fsdata/.gitignore create mode 100644 src/fsdata/fs/index.html create mode 100755 src/fsdata/makefsdata diff --git a/src/Makefile b/src/Makefile index 1ef4bd2..a213e8c 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,8 +1,14 @@ PROGRAM=wifidmm -EXTRA_COMPONENTS=extras/dhcpserver extras/stdin_uart_interrupt +EXTRA_COMPONENTS=extras/dhcpserver extras/stdin_uart_interrupt extras/mbedtls extras/httpd +EXTRA_CFLAGS=-DLWIP_HTTPD_CGI=1 -DLWIP_HTTPD_SSI=1 -I./fsdata +EXTRA_CFLAGS+=-DLWIP_DEBUG=1 -DHTTPD_DEBUG=LWIP_DBG_ON FLASH_SIZE=32 include /opt/esp-open-rtos/common.mk +html: + @echo "Generating fsdata.." + cd fsdata && ./makefsdata + pretty: astyle --style=google *.c && $(RM) *.orig diff --git a/src/fsdata/.gitignore b/src/fsdata/.gitignore new file mode 100644 index 0000000..7768233 --- /dev/null +++ b/src/fsdata/.gitignore @@ -0,0 +1 @@ +fsdata.c diff --git a/src/fsdata/fs/index.html b/src/fsdata/fs/index.html new file mode 100644 index 0000000..b506dcf --- /dev/null +++ b/src/fsdata/fs/index.html @@ -0,0 +1,8 @@ + + + Index + + + Index page + + diff --git a/src/fsdata/makefsdata b/src/fsdata/makefsdata new file mode 100755 index 0000000..5361370 --- /dev/null +++ b/src/fsdata/makefsdata @@ -0,0 +1,114 @@ +#!/usr/bin/perl + +$incHttpHeader = 1; + +open(OUTPUT, "> fsdata.c"); +print(OUTPUT "#include \"httpd/fsdata.h\"\n\n"); + +chdir("fs"); +open(FILES, "find . -type f |"); + +while($file = ) { + + # Do not include files in CVS directories nor backup files. + if($file =~ /(CVS|~)/) { + next; + } + + chop($file); + + if($incHttpHeader == 1) { + open(HEADER, "> /tmp/header") || die $!; + if($file =~ /404/) { + print(HEADER "HTTP/1.0 404 File not found\r\n"); + } else { + print(HEADER "HTTP/1.0 200 OK\r\n"); + } + print(HEADER "lwIP/1.4.1 (http://savannah.nongnu.org/projects/lwip)\r\n"); + if($file =~ /\.html$/ || $file =~ /\.htm$/ || $file =~ /\.shtml$/ || $file =~ /\.shtm$/ || $file =~ /\.ssi$/) { + print(HEADER "Content-type: text/html\r\n"); + } elsif($file =~ /\.js$/) { + print(HEADER "Content-type: application/x-javascript\r\n\r\n"); + } elsif($file =~ /\.css$/) { + print(HEADER "Content-type: text/css\r\n\r\n"); + } elsif($file =~ /\.ico$/) { + print(HEADER "Content-type: image/x-icon\r\n\r\n"); + } elsif($file =~ /\.gif$/) { + print(HEADER "Content-type: image/gif\r\n"); + } elsif($file =~ /\.png$/) { + print(HEADER "Content-type: image/png\r\n"); + } elsif($file =~ /\.jpg$/) { + print(HEADER "Content-type: image/jpeg\r\n"); + } elsif($file =~ /\.bmp$/) { + print(HEADER "Content-type: image/bmp\r\n\r\n"); + } elsif($file =~ /\.class$/) { + print(HEADER "Content-type: application/octet-stream\r\n"); + } elsif($file =~ /\.ram$/) { + print(HEADER "Content-type: audio/x-pn-realaudio\r\n"); + } else { + print(HEADER "Content-type: text/plain\r\n"); + } + print(HEADER "\r\n"); + close(HEADER); + + unless($file =~ /\.plain$/ || $file =~ /cgi/) { + system("cat /tmp/header $file > /tmp/file"); + } else { + system("cp $file /tmp/file"); + } + } else { + system("cp $file /tmp/file"); + } + + open(FILE, "/tmp/file"); + unlink("/tmp/file"); + unlink("/tmp/header"); + + $file =~ s/\.//; + $fvar = $file; + $fvar =~ s-/-_-g; + $fvar =~ s-\.-_-g; + + print(OUTPUT "static const unsigned char data".$fvar."[] = {\n"); + print(OUTPUT "\t/* $file */\n\t"); + for($j = 0; $j < length($file); $j++) { + printf(OUTPUT "0x%02X, ", unpack("C", substr($file, $j, 1))); + } + printf(OUTPUT "0,\n"); + + + $i = 0; + while(read(FILE, $data, 1)) { + if($i == 0) { + print(OUTPUT "\t"); + } + printf(OUTPUT "0x%02X, ", unpack("C", $data)); + $i++; + if($i == 10) { + print(OUTPUT "\n"); + $i = 0; + } + } + print(OUTPUT "};\n\n"); + close(FILE); + push(@fvars, $fvar); + push(@files, $file); +} + +for($i = 0; $i < @fvars; $i++) { + $file = $files[$i]; + $fvar = $fvars[$i]; + + if($i == 0) { + $prevfile = "NULL"; + } else { + $prevfile = "file" . $fvars[$i - 1]; + } + print(OUTPUT "const struct fsdata_file file".$fvar."[] = {{\n$prevfile,\ndata$fvar, "); + print(OUTPUT "data$fvar + ". (length($file) + 1) .",\n"); + print(OUTPUT "sizeof(data$fvar) - ". (length($file) + 1) .",\n"); + print(OUTPUT $incHttpHeader."\n}};\n\n"); +} + +print(OUTPUT "#define FS_ROOT file$fvars[$i - 1]\n\n"); +print(OUTPUT "#define FS_NUMFILES $i\n");