HTTP Server, WebSocket support
Fork of HTTPD by
Revision 1:f30e7b210e53, committed 2015-09-04
- Comitter:
- mitsarionas
- Date:
- Fri Sep 04 08:41:12 2015 +0000
- Parent:
- 0:d18dff347122
- Commit message:
- redirect
Changed in this revision
HTTPD.h | Show annotated file Show diff for this revision Revisions of this file |
HTTPD_util.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r d18dff347122 -r f30e7b210e53 HTTPD.h --- a/HTTPD.h Wed Nov 13 01:58:04 2013 +0000 +++ b/HTTPD.h Fri Sep 04 08:41:12 2015 +0000 @@ -32,7 +32,7 @@ #define HTTPD_TIMEOUT 15000 #define HTTPD_MAX_HANDLES 10 -#define HTTPD_CMD_SIZE 100 +#define HTTPD_CMD_SIZE 256 #define HTTPD_BUF_SIZE 256 #define HTTPD_STACK_SIZE (1024 * 6) //#define HTTPD_ENABLE_CLOSER @@ -116,6 +116,7 @@ int base64encode (const char *input, int length, char *output, int len); int urlencode (const char *str, char *buf, int len); int urldecode (const char *str, char *buf, int len); + int redirect (int id, int code, char *location, const char *body, int len, const char *header = NULL); static HTTPD * getInstance() { return _inst;
diff -r d18dff347122 -r f30e7b210e53 HTTPD_util.cpp --- a/HTTPD_util.cpp Wed Nov 13 01:58:04 2013 +0000 +++ b/HTTPD_util.cpp Fri Sep 04 08:41:12 2015 +0000 @@ -80,6 +80,42 @@ return _state[id].client->send_all((char*)body, len); } +int HTTPD::redirect (int id, int code, char *location, const char *body, int len, const char *header) { + char buf[HTTPD_CMD_SIZE]; + strcpy(buf, "HTTP/1.1 "); + switch (code) { + case 301: + strcat(buf, "301 Moved Permanently\r\n"); + break; + case 302: + strcat(buf, "302 Found\r\n"); + break; + case 307: + strcat(buf, "307 Temporary Redirect\r\n"); + break; + default: + return -1; + } + _state[id].client->send_all(buf, strlen(buf)); + strcpy(buf, "Server: GSwifi httpd\r\n"); + _state[id].client->send_all(buf, strlen(buf)); + if (_state[id].keepalive) { + strcpy(buf, "Connection: Keep-Alive\r\n"); + } else { + strcpy(buf, "Connection: close\r\n"); + } + _state[id].client->send_all(buf, strlen(buf)); + sprintf(buf, "Location: %s\r\n\r\n", location); + _state[id].client->send_all(buf, strlen(buf)); + if (header) { + _state[id].client->send_all((char*)header, strlen(header)); + } + sprintf(buf, "Content-Length: %d\r\n\r\n", len); + _state[id].client->send_all(buf, strlen(buf)); + + return _state[id].client->send_all((char*)body, len); +} + int HTTPD::getHandler (const char *uri) { int i;