|
|
|
#ifndef HTTPD_H
|
|
|
|
#define HTTPD_H
|
|
|
|
#include <c_types.h>
|
|
|
|
#include <ip_addr.h>
|
|
|
|
#include <espconn.h>
|
|
|
|
|
|
|
|
#define HTTPDVER "0.3"
|
|
|
|
|
|
|
|
#define HTTPD_CGI_MORE 0
|
|
|
|
#define HTTPD_CGI_DONE 1
|
|
|
|
#define HTTPD_CGI_NOTFOUND 2
|
|
|
|
#define HTTPD_CGI_AUTHENTICATED 3
|
|
|
|
|
|
|
|
#define HTTPD_METHOD_GET 1
|
|
|
|
#define HTTPD_METHOD_POST 2
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct HttpdPriv HttpdPriv;
|
|
|
|
typedef struct HttpdConnData HttpdConnData;
|
|
|
|
typedef struct HttpdPostData HttpdPostData;
|
|
|
|
|
|
|
|
typedef int (* cgiSendCallback)(HttpdConnData *connData);
|
|
|
|
|
|
|
|
//A struct describing a http connection. This gets passed to cgi functions.
|
|
|
|
struct HttpdConnData {
|
|
|
|
struct espconn *conn;
|
|
|
|
char requestType;
|
|
|
|
char *url;
|
|
|
|
char *getArgs;
|
|
|
|
const void *cgiArg;
|
|
|
|
void *cgiData;
|
|
|
|
void *cgiPrivData; // Used for streaming handlers storing state between requests
|
|
|
|
HttpdPriv *priv;
|
|
|
|
cgiSendCallback cgi;
|
|
|
|
HttpdPostData *post;
|
|
|
|
};
|
|
|
|
|
|
|
|
//A struct describing the POST data sent inside the http connection. This is used by the CGI functions
|
|
|
|
struct HttpdPostData {
|
|
|
|
int len; // POST Content-Length
|
|
|
|
int buffSize; // The maximum length of the post buffer
|
|
|
|
int buffLen; // The amount of bytes in the current post buffer
|
|
|
|
int received; // The total amount of bytes received so far
|
|
|
|
char *buff; // Actual POST data buffer
|
|
|
|
char *multipartBoundary;
|
|
|
|
};
|
|
|
|
|
|
|
|
//A struct describing an url. This is the main struct that's used to send different URL requests to
|
|
|
|
//different routines.
|
|
|
|
typedef struct {
|
|
|
|
const char *url;
|
|
|
|
cgiSendCallback cgiCb;
|
|
|
|
const void *cgiArg;
|
|
|
|
} HttpdBuiltInUrl;
|
|
|
|
|
|
|
|
int ICACHE_FLASH_ATTR cgiRedirect(HttpdConnData *connData);
|
|
|
|
void ICACHE_FLASH_ATTR httpdRedirect(HttpdConnData *conn, char *newUrl);
|
|
|
|
int httpdUrlDecode(char *val, int valLen, char *ret, int retLen);
|
|
|
|
int ICACHE_FLASH_ATTR httpdFindArg(char *line, char *arg, char *buff, int buffLen);
|
|
|
|
void ICACHE_FLASH_ATTR httpdInit(HttpdBuiltInUrl *fixedUrls, int port);
|
|
|
|
const char *httpdGetMimetype(char *url);
|
|
|
|
#ifdef GZIP_COMPRESSION
|
|
|
|
const char* sendGZIPEncodingIfNeeded(HttpdConnData *connData);
|
|
|
|
#endif
|
|
|
|
void ICACHE_FLASH_ATTR httpdStartResponse(HttpdConnData *conn, int code);
|
|
|
|
void ICACHE_FLASH_ATTR httpdHeader(HttpdConnData *conn, const char *field, const char *val);
|
|
|
|
void ICACHE_FLASH_ATTR httpdEndHeaders(HttpdConnData *conn);
|
|
|
|
int ICACHE_FLASH_ATTR httpdGetHeader(HttpdConnData *conn, char *header, char *ret, int retLen);
|
|
|
|
int ICACHE_FLASH_ATTR httpdSend(HttpdConnData *conn, const char *data, int len);
|
|
|
|
|
|
|
|
#endif
|