|
|
@ -19,7 +19,8 @@ flash as a binary. Also handles the hit counter on the main page. |
|
|
|
static long hitCounter = 0; |
|
|
|
static long hitCounter = 0; |
|
|
|
|
|
|
|
|
|
|
|
//Template code for the counter on the index page.
|
|
|
|
//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]; |
|
|
|
char buff[128]; |
|
|
|
if (token == NULL) return HTTPD_CGI_DONE; |
|
|
|
if (token == NULL) return HTTPD_CGI_DONE; |
|
|
|
|
|
|
|
|
|
|
@ -31,3 +32,79 @@ int ICACHE_FLASH_ATTR tplCounter(HttpdConnData *connData, char *token, void **ar |
|
|
|
return HTTPD_CGI_DONE; |
|
|
|
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; |
|
|
|
|
|
|
|
} |
|
|
|