working genpage

This commit is contained in:
2016-03-17 22:17:17 +01:00
parent 3d8ebb9ed8
commit ed17164e1c
9 changed files with 103 additions and 14 deletions
+84 -7
View File
@@ -6,9 +6,9 @@ flash as a binary. Also handles the hit counter on the main page.
/*
* ----------------------------------------------------------------------------
* "THE BEER-WARE LICENSE" (Revision 42):
* Jeroen Domburg <jeroen@spritesmods.com> wrote this file. As long as you retain
* this notice you can do whatever you want with this stuff. If we meet some day,
* and you think this stuff is worth it, you can buy me a beer in return.
* Jeroen Domburg <jeroen@spritesmods.com> wrote this file. As long as you retain
* this notice you can do whatever you want with this stuff. If we meet some day,
* and you think this stuff is worth it, you can buy me a beer in return.
* ----------------------------------------------------------------------------
*/
@@ -16,14 +16,15 @@ flash as a binary. Also handles the hit counter on the main page.
#include <esp8266.h>
#include "cgi.h"
static long hitCounter=0;
static long hitCounter = 0;
//Template code for the counter on the index page.
int ICACHE_FLASH_ATTR tplCounter(HttpdConnData *connData, char *token, void **arg) {
int ICACHE_FLASH_ATTR tplCounter(HttpdConnData *connData, char *token, void **arg)
{
char buff[128];
if (token==NULL) return HTTPD_CGI_DONE;
if (token == NULL) return HTTPD_CGI_DONE;
if (os_strcmp(token, "counter")==0) {
if (os_strcmp(token, "counter") == 0) {
hitCounter++;
os_sprintf(buff, "%ld", hitCounter);
}
@@ -31,3 +32,79 @@ int ICACHE_FLASH_ATTR tplCounter(HttpdConnData *connData, char *token, void **ar
return HTTPD_CGI_DONE;
}
typedef struct {
uint32_t count_remain;
} RandomNumberState;
// better to put it in the fs...
int FLASH_FN cgiRandomNumbers(HttpdConnData *connData) {
RandomNumberState *rns=connData->cgiData;
char buff[128];
if (connData->conn == NULL) {
//Connection aborted. Clean up.
if (rns != NULL) free(rns);
return HTTPD_CGI_DONE;
}
if (rns == NULL) {
//First call to this cgi. Open the file so we can read it.
rns=(RandomNumberState *)malloc(sizeof(RandomNumberState));
connData->cgiData=rns;
// parse count
uint32_t count = 1;
int len = httpdFindArg(connData->getArgs, "count", buff, sizeof(buff));
if (len==-1) {
// no such get arg
} else {
count = (uint32_t)atoi(buff);
}
rns->count_remain = count;
printf("User wants %d numbers.", count);
httpdStartResponse(connData, 200);
httpdHeader(connData, "Content-Type", "text/html");
httpdEndHeaders(connData);
// start the page
httpdSend(connData, "<!DOCTYPE html>"
"<html>"
"<head>"
" <title>Generated page.</title>"
" <link rel=\"stylesheet\" type=\"text/css\" href=\"style.css\">"
"</head>"
"<body>"
"<div id=\"main\">"
"<h1>Random numbers:</h1>"
"<ul>", -1);
return HTTPD_CGI_MORE;
}
// send end of the page
if (rns->count_remain == 0) {
httpdSend(connData, "</ul></body></html>", -1);
free(rns);
return HTTPD_CGI_DONE;
}
// print chunk of data
for (int i = 0; i < 100; i++) {
os_sprintf(buff, "<li>%lu\n", os_random());
httpdSend(connData, buff, -1);
if (--rns->count_remain == 0) {
break;
}
}
return HTTPD_CGI_MORE;
}
+2
View File
@@ -6,4 +6,6 @@
int tplCounter(HttpdConnData *connData, char *token, void **arg);
int cgiRandomNumbers(HttpdConnData *connData);
#endif
+3 -1
View File
@@ -98,9 +98,11 @@ CgiUploadFlashDef uploadParams = {
* should be placed above the URLs they protect.
*/
static HttpdBuiltInUrl builtInUrls[] = {
{"*", cgiRedirectApClientToHostname, "esp8266.nonet"},
{"*", cgiRedirectApClientToHostname, "esp8266.nonet"}, // redirect func for the captive portal
{"/", cgiEspFsTemplate, (void *)tplCounter},
{"/random.tpl", cgiRandomNumbers, NULL},
//Enable the line below to protect the WiFi configuration with an username/password combo.
// {"/wifi/*", authBasic, (void *)myPassFn},