improvements in template engine and routes
This commit is contained in:
@@ -13,11 +13,11 @@ typedef enum {
|
||||
|
||||
typedef struct EspFsFile EspFsFile;
|
||||
|
||||
EspFsInitResult espFsInit(void *flashAddress);
|
||||
EspFsFile *espFsOpen(char *fileName);
|
||||
EspFsInitResult espFsInit(const void *flashAddress);
|
||||
EspFsFile *espFsOpen(const char *fileName);
|
||||
int espFsFlags(EspFsFile *fh);
|
||||
int espFsRead(EspFsFile *fh, char *buff, int len);
|
||||
void espFsClose(EspFsFile *fh);
|
||||
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -26,9 +26,15 @@ struct HttpdConnData {
|
||||
char requestType; // One of the HTTPD_METHOD_* values
|
||||
char *url; // The URL requested, without hostname or GET arguments
|
||||
char *getArgs; // The GET arguments for this request, if any.
|
||||
|
||||
const void *cgiArg; // Argument to the CGI function, as stated as the 3rd argument of
|
||||
// the builtInUrls entry that referred to the CGI function.
|
||||
|
||||
const void *cgiArg2; // Argument to the CGI function, as stated as the 4th argument of
|
||||
// the builtInUrls entry that referred to the CGI function.
|
||||
|
||||
void *cgiData; // Opaque data pointer for the CGI function
|
||||
|
||||
char *hostName; // Host name field of request
|
||||
HttpdPriv *priv; // Opaque pointer to data for internal httpd housekeeping
|
||||
cgiSendCallback cgi; // CGI function pointer
|
||||
@@ -55,8 +61,33 @@ typedef struct {
|
||||
const char *url;
|
||||
cgiSendCallback cgiCb;
|
||||
const void *cgiArg;
|
||||
const void *cgiArg2;
|
||||
} HttpdBuiltInUrl;
|
||||
|
||||
|
||||
// macros for defining HttpdBuiltInUrl's
|
||||
|
||||
#define ROUTE_CGI_ARG2(path, handler, arg1, arg2) {path, handler, (void *)arg1, (void *)arg2}
|
||||
|
||||
#define ROUTE_CGI_ARG(path, handler, arg1) ROUTE_CGI_ARG2(path, handler, arg1, NULL)
|
||||
#define ROUTE_CGI(path, handler) ROUTE_CGI_ARG2(path, handler, NULL, NULL)
|
||||
|
||||
#define ROUTE_FILE(path, filepath) ROUTE_CGI_ARG(path, cgiEspFsStaticFile, filepath)
|
||||
|
||||
// the argument of a template route is accessible as cgiArg2 on the connData struct.
|
||||
#define ROUTE_TPL(path, replacer) ROUTE_CGI_ARG(path, cgiEspFsTemplate, replacer)
|
||||
#define ROUTE_TPL_FILE(path, replacer, filepath) ROUTE_CGI_ARG2(path, cgiEspFsTemplate, replacer, filepath)
|
||||
|
||||
#define ROUTE_REDIRECT(path, target) ROUTE_CGI_ARG(path, cgiRedirect, target)
|
||||
#define ROUTE_AUTH(path, passwdFunc) ROUTE_CGI_ARG(path, authBasic, passwdFunc)
|
||||
|
||||
// catch-all route
|
||||
#define ROUTE_FS(path) ROUTE_CGI(path, cgiEspFsHook)
|
||||
|
||||
#define ROUTE_END() {NULL, NULL, NULL, NULL}
|
||||
|
||||
|
||||
|
||||
int cgiRedirect(HttpdConnData *connData);
|
||||
int cgiRedirectToHostname(HttpdConnData *connData);
|
||||
int cgiRedirectApClientToHostname(HttpdConnData *connData);
|
||||
@@ -64,7 +95,7 @@ void httpdRedirect(HttpdConnData *conn, char *newUrl);
|
||||
int httpdUrlDecode(char *val, int valLen, char *ret, int retLen);
|
||||
int httpdFindArg(char *line, char *arg, char *buff, int buffLen);
|
||||
void httpdInit(HttpdBuiltInUrl *fixedUrls, int port);
|
||||
const char *httpdGetMimetype(char *url);
|
||||
const char *httpdGetMimetype(const char *url);
|
||||
void httpdDisableTransferEncoding(HttpdConnData *conn);
|
||||
void httpdStartResponse(HttpdConnData *conn, int code);
|
||||
void httpdHeader(HttpdConnData *conn, const char *field, const char *val);
|
||||
@@ -80,4 +111,11 @@ void httpdDisconCb(ConnTypePtr conn, char *remIp, int remPort);
|
||||
int httpdConnectCb(ConnTypePtr conn, char *remIp, int remPort);
|
||||
|
||||
|
||||
// debugging
|
||||
|
||||
#define LOG_EOL "\n"
|
||||
#define dbg(fmt, ...) httpd_printf(fmt LOG_EOL, ##__VA_ARGS__);
|
||||
#define error(fmt, ...) httpd_printf("\x1b[31;1m"fmt"\x1b[0m"LOG_EOL, ##__VA_ARGS__);
|
||||
#define info(fmt, ...) httpd_printf("\x1b[32;1m"fmt"\x1b[0m"LOG_EOL, ##__VA_ARGS__);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -3,7 +3,13 @@
|
||||
|
||||
#include "httpd.h"
|
||||
|
||||
/** Catch-all, use in '*' routes */
|
||||
int cgiEspFsHook(HttpdConnData *connData);
|
||||
|
||||
/** Template route */
|
||||
int ICACHE_FLASH_ATTR cgiEspFsTemplate(HttpdConnData *connData);
|
||||
|
||||
#endif
|
||||
/** Static file route with the file as the first arg. */
|
||||
int ICACHE_FLASH_ATTR cgiEspFsFile(HttpdConnData *connData);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user