/*---------------------------------------------------------------------------*/ static unsigned short generate_file_stats(void *arg) { struct httpd_state *s = (struct httpd_state *)arg; #if WEBSERVER_CONF_LOADTIME static const char httpd_cgi_filestat1[] HTTPD_STRING_ATTR = "<p align=\"right\"><br><br><i>This page has been sent %u times (%1u.%u sec)</i></body></html>"; #else static const char httpd_cgi_filestat1[] HTTPD_STRING_ATTR = "<p align=\"right\"><br><br><i>This page has been sent %u times</i></body></html>"; #endif static const char httpd_cgi_filestat2[] HTTPD_STRING_ATTR = "<tr><td><a href=\"%s\">%s</a></td><td>%d</td>"; static const char httpd_cgi_filestat3[] HTTPD_STRING_ATTR = "%5u"; char tmp[20]; struct httpd_fsdata_file_noconst *f,fram; u16_t i; unsigned short numprinted; /* Transfer arg from whichever flash that contains the html file to RAM */ httpd_fs_cpy(&tmp, s->u.ptr, 20); /* Count for this page, with common page footer */ if (tmp[0]=='.') { #if WEBSERVER_CONF_LOADTIME s->pagetime = clock_time() - s->pagetime; numprinted=httpd_snprintf((char *)uip_appdata, uip_mss(), httpd_cgi_filestat1, httpd_fs_open(s->filename, 0), (unsigned int)s->pagetime/CLOCK_SECOND,(unsigned int)s->pagetime%CLOCK_SECOND); #else numprinted=httpd_snprintf((char *)uip_appdata, uip_mss(), httpd_cgi_filestat1, httpd_fs_open(s->filename, 0)); #endif /* Count for all files */ /* Note buffer will overflow if there are too many files! */ } else if (tmp[0]=='*') { i=0;numprinted=0; for(f = (struct httpd_fsdata_file_noconst *)httpd_fs_get_root(); f != NULL; f = (struct httpd_fsdata_file_noconst *)fram.next) { /* Get the linked list file entry into RAM from from wherever it is*/ httpd_memcpy(&fram,f,sizeof(fram)); /* Get the file name from whatever memory it is in */ httpd_fs_cpy(&tmp, fram.name, sizeof(tmp)); #if WEBSERVER_CONF_FILESTATS==2 numprinted+=httpd_snprintf((char *)uip_appdata+numprinted, uip_mss()-numprinted, httpd_cgi_filestat2, tmp, tmp, f->count); #else numprinted+=httpd_snprintf((char *)uip_appdata+numprinted, uip_mss()-numprinted, httpd_cgi_filestat2, tmp, tmp, httpd_filecount[i]); #endif i++; } /* Count for specified file */ } else { numprinted=httpd_snprintf((char *)uip_appdata, uip_mss(), httpd_cgi_filestat3, httpd_fs_open(tmp, 0)); } return numprinted; }
/*---------------------------------------------------------------------------*/ static unsigned short generate_file_stats(void *arg) { static const char httpd_cgi_filestat1[] HTTPD_STRING_ATTR = "<p class=right><br><br><i>This page has been sent %u times</i></div></body></html>"; static const char httpd_cgi_filestat2[] HTTPD_STRING_ATTR = "<tr><td><a href=\"%s\">%s</a></td><td>%d</td>"; static const char httpd_cgi_filestat3[] HTTPD_STRING_ATTR = "%5u"; char tmp[20]; struct httpd_fsdata_file_noconst *f,fram; uint16_t i; unsigned short numprinted; /* Transfer arg from whichever flash that contains the html file to RAM */ httpd_fs_cpy(&tmp, (char *)arg, 20); /* Count for this page, with common page footer */ if (tmp[0]=='.') { numprinted=httpd_snprintf((char *)uip_appdata, uip_mss(), httpd_cgi_filestat1, httpd_fs_open(thisfilename, 0)); /* Count for all files */ /* Note buffer will overflow if there are too many files! */ } else if (tmp[0]=='*') { i=0;numprinted=0; for(f = (struct httpd_fsdata_file_noconst *)httpd_fs_get_root(); f != NULL; f = (struct httpd_fsdata_file_noconst *)fram.next) { /* Get the linked list file entry into RAM from from wherever it is*/ httpd_memcpy(&fram,f,sizeof(fram)); /* Get the file name from whatever memory it is in */ httpd_fs_cpy(&tmp, fram.name, sizeof(tmp)); #if HTTPD_FS_STATISTICS==1 numprinted+=httpd_snprintf((char *)uip_appdata+numprinted, uip_mss()-numprinted, httpd_cgi_filestat2, tmp, tmp, f->count); #elif HTTPD_FS_STATISTICS==2 numprinted+=httpd_snprintf((char *)uip_appdata+numprinted, uip_mss()-numprinted, httpd_cgi_filestat2, tmp, tmp, httpd_filecount[i]); #endif i++; } /* Count for specified file */ } else { numprinted=httpd_snprintf((char *)uip_appdata, uip_mss(), httpd_cgi_filestat3, httpd_fs_open(tmp, 0)); } #if DEBUGLOGIC return 0; #endif return numprinted; }
/*---------------------------------------------------------------------------*/ static unsigned short generate(void *state) { struct httpd_state *s = (struct httpd_state *)state; if(s->file.len > uip_mss()) { s->len = uip_mss(); } else { s->len = s->file.len; } httpd_fs_cpy(uip_appdata, s->file.data, s->len); #if DEBUGLOGIC return 0; #else return s->len; #endif }