From 645b320558d6fe3cb22736fa41ea383967f89f5b Mon Sep 17 00:00:00 2001 From: Jeroen Domburg Date: Fri, 10 Oct 2014 17:32:50 +0200 Subject: [PATCH] Added redirect function to httpd --- user/httpd.c | 17 ++++++++++++++++- user/httpd.h | 1 + 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/user/httpd.c b/user/httpd.c index 72d0fad..69198b5 100644 --- a/user/httpd.c +++ b/user/httpd.c @@ -110,6 +110,7 @@ int httpdUrlDecode(char *val, int valLen, char *ret, int retLen) { } //Find a specific arg in a string of get- or post-data. +//Returns len of arg or -1 if not found. int ICACHE_FLASH_ATTR httpdFindArg(char *line, char *arg, char *buff, int buffLen) { char *p, *e; int len; @@ -128,7 +129,7 @@ int ICACHE_FLASH_ATTR httpdFindArg(char *line, char *arg, char *buff, int buffLe if (p!=NULL) p+=1; } os_printf("Finding %s in %s: Not found :/\n", arg, line); - return 0; //not found + return -1; //not found } static const char *httpNotFoundHeader="HTTP/1.0 404 Not Found\r\nServer: esp8266-httpd/0.1\r\nContent-Type: text/plain\r\n\r\nNot Found.\r\n"; @@ -160,6 +161,20 @@ void ICACHE_FLASH_ATTR httpdRedirect(HttpdConnData *conn, char *newUrl) { espconn_sent(conn->conn, buff, l); } +int ICACHE_FLASH_ATTR cgiRedirect(HttpdConnData *connData) { + int len; + char buff[1024]; + + if (connData->conn==NULL) { + //Connection aborted. Clean up. + return HTTPD_CGI_DONE; + } + + httpdRedirect(connData, (char*)connData->cgiArg); + return HTTPD_CGI_DONE; +} + + static void ICACHE_FLASH_ATTR httpdSentCb(void *arg) { int r; HttpdConnData *conn=httpdFindConnData(arg); diff --git a/user/httpd.h b/user/httpd.h index e3ac04e..f1b9038 100644 --- a/user/httpd.h +++ b/user/httpd.h @@ -36,6 +36,7 @@ typedef struct { 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);