|
|
|
#include <stdio.h>
|
|
|
|
#include <signal.h>
|
|
|
|
#include <unistd.h>
|
|
|
|
|
|
|
|
#include "httpd.h"
|
|
|
|
#include "httpd-utils.h"
|
|
|
|
#include "httpd-espfs.h"
|
|
|
|
|
|
|
|
extern unsigned char espfs_image[];
|
|
|
|
extern unsigned int espfs_image_len;
|
|
|
|
|
|
|
|
httpd_thread_handle_t *s_serverHandle = NULL;
|
|
|
|
|
|
|
|
/** "About" page */
|
|
|
|
httpd_cgi_state tplIndex(HttpdConnData *connData, char *token, void **arg)
|
|
|
|
{
|
|
|
|
if (token == NULL) { return HTTPD_CGI_DONE; }
|
|
|
|
|
|
|
|
else if (streq(token, "date")) {
|
|
|
|
tplSend(connData, __DATE__, -1);
|
|
|
|
} else if (streq(token, "time")) {
|
|
|
|
tplSend(connData, __TIME__, -1);
|
|
|
|
} else if (streq(token, "vers_httpd")) {
|
|
|
|
tplSend(connData, httpdGetVersion(), -1);
|
|
|
|
}
|
|
|
|
|
|
|
|
return HTTPD_CGI_DONE;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Application routes
|
|
|
|
*/
|
|
|
|
const HttpdBuiltInUrl routes[] = {
|
|
|
|
// TODO password lock ...
|
|
|
|
|
|
|
|
// --- Web pages ---
|
|
|
|
// ROUTE_TPL_FILE("/", tplIndex, "/index.tpl"),
|
|
|
|
ROUTE_FILE("/", "index.html"),
|
|
|
|
|
|
|
|
ROUTE_FILESYSTEM(),
|
|
|
|
ROUTE_END(),
|
|
|
|
};
|
|
|
|
|
|
|
|
void sigpipe_handler(int unused)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void handle_sigint(int signum)
|
|
|
|
{
|
|
|
|
fprintf(stderr, " SIGINT detected, shutting down HTTPD\n");
|
|
|
|
httpdShutdown(s_serverHandle);
|
|
|
|
}
|
|
|
|
|
|
|
|
int main()
|
|
|
|
{
|
|
|
|
struct sigaction action;
|
|
|
|
memset(&action, 0, sizeof(action));
|
|
|
|
action.sa_handler = handle_sigint;
|
|
|
|
sigaction(SIGINT, &action, NULL);
|
|
|
|
|
|
|
|
// prevent abort on sigpipe
|
|
|
|
sigaction(SIGPIPE, &(struct sigaction) {{sigpipe_handler}}, NULL);
|
|
|
|
|
|
|
|
struct httpd_options opts = {
|
|
|
|
.port = 8080,
|
|
|
|
};
|
|
|
|
|
|
|
|
s_serverHandle = httpdStart(routes, &opts);
|
|
|
|
httpdSetName("SpriteHTTPD Server Demo");
|
|
|
|
|
|
|
|
httpdJoin(s_serverHandle);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int httpdPlatEspfsRead(void *dest, uint32_t offset, size_t len)
|
|
|
|
{
|
|
|
|
if (offset + len > espfs_image_len) {
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
memcpy(dest, &espfs_image[offset], len);
|
|
|
|
return 0;
|
|
|
|
}
|