working genpage
This commit is contained in:
+84
-7
@@ -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;
|
||||
}
|
||||
|
||||
@@ -6,4 +6,6 @@
|
||||
|
||||
int tplCounter(HttpdConnData *connData, char *token, void **arg);
|
||||
|
||||
int cgiRandomNumbers(HttpdConnData *connData);
|
||||
|
||||
#endif
|
||||
|
||||
+3
-1
@@ -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},
|
||||
|
||||
|
||||
Reference in New Issue
Block a user