diff options
author | pixel <pixel> | 2008-07-16 16:50:24 +0000 |
---|---|---|
committer | pixel <pixel> | 2008-07-16 16:50:24 +0000 |
commit | d1d512080aafbf9a271c13cd3eb04815baeebadc (patch) | |
tree | 999acff041d17618f02cd1b066477d87da6afa2b | |
parent | 5627c9a50ada2bce7c43c7bdeefe822c2b53df61 (diff) |
Adding basic cookies support.
-rw-r--r-- | include/HttpServ.h | 4 | ||||
-rw-r--r-- | lib/HttpServ.cc | 11 | ||||
-rw-r--r-- | lib/LuaHttp.cc | 20 |
3 files changed, 31 insertions, 4 deletions
diff --git a/include/HttpServ.h b/include/HttpServ.h index bf0970e..3d4cc27 100644 --- a/include/HttpServ.h +++ b/include/HttpServ.h @@ -17,7 +17,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -/* $Id: HttpServ.h,v 1.26 2008-01-28 17:30:46 pixel Exp $ */ +/* $Id: HttpServ.h,v 1.27 2008-07-16 16:50:24 pixel Exp $ */ #ifndef __HTTPSERV_H__ #define __HTTPSERV_H__ @@ -54,6 +54,8 @@ class HttpResponse : public Base { String domain; String server_name; String file_name; + std::vector<std::pair<String, String> > cookies; + String cookies_path; return_code_t return_code; time_t last_modified; Buffer contents; diff --git a/lib/HttpServ.cc b/lib/HttpServ.cc index 3b14c49..a16bc45 100644 --- a/lib/HttpServ.cc +++ b/lib/HttpServ.cc @@ -17,7 +17,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -/* $Id: HttpServ.cc,v 1.63 2008-07-16 09:37:40 pixel Exp $ */ +/* $Id: HttpServ.cc,v 1.64 2008-07-16 16:50:24 pixel Exp $ */ #include <vector> @@ -915,6 +915,15 @@ void HttpResponse::PrepareResponse(Handle * b) { strftime(buf, 1024, "%a, %d %b %Y %H:%M:%S GMT", ft); (*b) << "Last-Modified: " << buf << "\r\n"; } + if (cookies.size()) { + (*b) << "Set-Cookie: "; + for (std::vector<std::pair<String, String> >::iterator i = cookies.begin(); i != cookies.end(); i++) { + (*b) << i->first << "=" << i->second << ";"; + } + if (cookies_path != "") + (*b) << "path=" << cookies_path; + (*b) << "\r\n"; + } (*b) << "\r\n"; } diff --git a/lib/LuaHttp.cc b/lib/LuaHttp.cc index 0f2bd70..8284537 100644 --- a/lib/LuaHttp.cc +++ b/lib/LuaHttp.cc @@ -17,7 +17,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -/* $Id: LuaHttp.cc,v 1.27 2008-02-26 18:23:58 pixel Exp $ */ +/* $Id: LuaHttp.cc,v 1.28 2008-07-16 16:50:24 pixel Exp $ */ #include "Domain.h" #include "LuaHttp.h" @@ -220,6 +220,10 @@ int sLua_HttpResponse::HttpResponse_proceed(Lua * L, int n, HttpResponse * res, } } else if (i == "cache") { L->push(res->cache); + } else if (i == "cookies_path") { + L->push(res->cookies_path); + } else if (i == "cookies") { + L->error("Can't read cookies (for now)"); } else { L->error("Unknow field in HttpResponse object: " + i); } @@ -245,6 +249,18 @@ int sLua_HttpResponse::HttpResponse_proceed(Lua * L, int n, HttpResponse * res, L->error("Can't alter field buffer in HttpResponse."); } else if (i == "cache") { res->cache = L->toboolean(3); + } else if (i == "cookies_path") { + res->cookies_path = L->tostring(3); + } else if (i == "cookies") { + String cookie = L->tostring(3), key, value; + int pos = cookie.strchr('='); + if (pos < 0) { + L->error("Malformed cookie."); + } + key = cookie.extract(0, pos - 1).trim(); + value = cookie.extract(pos + 1).trim(); + std::pair<String, String> e(key, value); + res->cookies.push_back(e); } else { L->error("Unknow field in HttpResponse object: " + i); } @@ -325,7 +341,7 @@ int sLua_HttpResponse::HttpResponse_proceed_statics(Lua * L, int n, int caller) } LuaDomain::LuaDomain(Lua * _L, String r) : Domain(r), L(_L->Father()) { - id = max_id++; + id = max_id++; /***FIXME***/ L->push(DOMAIN_REGISTRY); L->gettable(LUA_REGISTRYINDEX); |