summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/LuaHttp.cc248
1 files changed, 146 insertions, 102 deletions
diff --git a/lib/LuaHttp.cc b/lib/LuaHttp.cc
index 422c0b3..c508474 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.17 2007-06-19 13:39:14 pixel Exp $ */
+/* $Id: LuaHttp.cc,v 1.18 2007-07-12 10:46:34 pixel Exp $ */
#include "md5.h"
#include "Domain.h"
@@ -26,16 +26,7 @@
#include "LuaTask.h"
#include "Base64.h"
-class LuaDomain : public Domain {
- public:
- LuaDomain(Lua * _L, String r);
- virtual ~LuaDomain();
- virtual void Do(const HttpRequest & req, HttpResponse * res) throw (GeneralException);
- private:
- Lua * L;
- static int max_id;
- int id;
-};
+class LuaDomain;
class LuaLuaDomain : public LuaObject {
public:
@@ -50,27 +41,36 @@ LuaLuaDomain::LuaLuaDomain(LuaDomain * _d) : d(_d) { }
enum LuaDomain_methods_t {
LUADOMAIN_ONTOP = 0,
+ LUADOMAIN_GETPATTERN,
};
enum LuaDomain_functions_t {
LUADOMAIN_NEWDOMAIN = 0,
+ LUADOMAIN_IDOMAIN,
+ LUADOMAIN_NDOMAIN,
};
struct lua_functypes_t LuaDomain_methods[] = {
- { LUADOMAIN_ONTOP, "OnTop", 0, 0, { } },
+ { LUADOMAIN_ONTOP, "OnTop", 0, 0, { } },
+ { LUADOMAIN_GETPATTERN, "GetPattern", 0, 0, { } },
{ -1, 0, 0, 0, 0 },
};
struct lua_functypes_t LuaDomain_functions[] = {
{ LUADOMAIN_NEWDOMAIN, "Domain", 2, 2, { LUA_STRING, LUA_FUNCTION } },
+ { LUADOMAIN_IDOMAIN, "iDomain", 0, 0, { } },
+ { LUADOMAIN_NDOMAIN, "nDomain", 2, 2, { LUA_USERDATA, LUA_STRING | LUA_NIL } },
{ -1, 0, 0, 0, 0 },
};
class sLua_LuaDomain : public Base {
public:
DECLARE_METHOD(LuaDomain, LUADOMAIN_ONTOP);
+ DECLARE_METHOD(LuaDomain, LUADOMAIN_GETPATTERN);
DECLARE_FUNCTION(LuaDomain, LUADOMAIN_NEWDOMAIN);
+ DECLARE_FUNCTION(LuaDomain, LUADOMAIN_IDOMAIN);
+ DECLARE_FUNCTION(LuaDomain, LUADOMAIN_NDOMAIN);
private:
static int LuaDomain_proceed(Lua * L, int n, LuaDomain * obj, int caller);
@@ -81,6 +81,7 @@ void LuaLuaDomain::pushmembers(Lua * L) {
pushme(L, d, "LuaDomain");
PUSH_METHOD(LuaDomain, LUADOMAIN_ONTOP);
+ PUSH_METHOD(LuaDomain, LUADOMAIN_GETPATTERN);
}
void LuaLuaDomain::pushstatics(Lua * L) throw (GeneralException) {
@@ -88,6 +89,8 @@ void LuaLuaDomain::pushstatics(Lua * L) throw (GeneralException) {
CHECK_FUNCTIONS(LuaDomain);
PUSH_FUNCTION(LuaDomain, LUADOMAIN_NEWDOMAIN);
+ PUSH_FUNCTION(LuaDomain, LUADOMAIN_IDOMAIN);
+ PUSH_FUNCTION(LuaDomain, LUADOMAIN_NDOMAIN);
}
#define DOMAIN_REGISTRY "DOMAINS_KEYS"
@@ -277,108 +280,113 @@ int sLua_HttpResponse::HttpResponse_proceed_statics(Lua * L, int n, int caller)
return r;
}
-LuaDomain::LuaDomain(Lua * _L, String r) : Domain(r), L(_L->Father()) {
- id = max_id++;
+class LuaDomain : public Domain {
+ public:
+ LuaDomain(Lua * _L, String r) : Domain(r), L(_L->Father()) {
+ id = max_id++;
- L->push(DOMAIN_REGISTRY);
- L->gettable(LUA_REGISTRYINDEX);
- L->push((lua_Number) id);
- L->copy(2);
- L->settable();
- L->pop();
-}
-
-LuaDomain::~LuaDomain() {
- L->push(DOMAIN_REGISTRY);
- L->gettable(LUA_REGISTRYINDEX);
- L->push((lua_Number) id);
- L->push();
- L->settable();
- L->pop();
-}
-
-void LuaDomain::Do(const HttpRequest & req, HttpResponse * res) throw (GeneralException) {
- int i;
+ L->push(DOMAIN_REGISTRY);
+ L->gettable(LUA_REGISTRYINDEX);
+ L->push((lua_Number) id);
+ L->copy(2);
+ L->settable();
+ L->pop();
+ }
+ virtual ~LuaDomain() {
+ L->push(DOMAIN_REGISTRY);
+ L->gettable(LUA_REGISTRYINDEX);
+ L->push((lua_Number) id);
+ L->push();
+ L->settable();
+ L->pop();
+ }
+ virtual void Do(const HttpRequest & req, HttpResponse * res) throw (GeneralException) {
+ int i;
- Lua * oldL = L;
- Lua * L = oldL->thread(false);
- oldL->pop();
+ Lua * oldL = L;
+ Lua * L = oldL->thread(true);
+ oldL->pop();
- L->push(DOMAIN_REGISTRY);
- L->gettable(LUA_REGISTRYINDEX);
- L->push((lua_Number) id);
- L->gettable();
- L->remove();
-
- L->newtable();
-
- L->push("vars");
- L->newtable();
- for (i = 0; i < req.vars->GetNb(); i++) {
- char * v = (*(req.vars))[i].strdup(), * p;
+ L->push(DOMAIN_REGISTRY);
+ L->gettable(LUA_REGISTRYINDEX);
+ L->push((lua_Number) id);
+ L->gettable();
+ L->remove();
- p = strchr(v, '=');
- *p = 0;
- p++;
+ L->newtable();
+
+ L->push("vars");
+ L->newtable();
+ for (i = 0; i < req.vars->GetNb(); i++) {
+ char * v = (*(req.vars))[i].strdup(), * p;
+
+ p = strchr(v, '=');
+ *p = 0;
+ p++;
+
+ L->push(v);
+ L->push(p);
+ L->settable();
+
+ free(v);
+ }
+ L->settable();
- L->push(v);
- L->push(p);
+ L->push("headers");
+ L->newtable();
+ for (i = 0; i < req.headers->GetNb(); i++) {
+ char * v = (*(req.headers))[i].strdup(), * p;
+
+ p = strchr(v, '=');
+ *p = 0;
+ p++;
+
+ L->push(v);
+ L->push(p);
+ L->settable();
+
+ free(v);
+ }
L->settable();
- free(v);
- }
- L->settable();
-
- L->push("headers");
- L->newtable();
- for (i = 0; i < req.headers->GetNb(); i++) {
- char * v = (*(req.headers))[i].strdup(), * p;
+ L->push("uri");
+ L->push(req.uri);
+ L->settable();
- p = strchr(v, '=');
- *p = 0;
- p++;
+ L->push("login");
+ L->push(req.login);
+ L->settable();
- L->push(v);
- L->push(p);
+ L->push("password");
+ L->push(req.password);
L->settable();
+
+ L->push("lip");
+ L->push((lua_Number) req.lip);
+ L->settable();
+
+ L->push("dip");
+ L->push((lua_Number) req.dip);
+ L->settable();
+
+ L->push("lport");
+ L->push((lua_Number) req.lport);
+ L->settable();
+
+ L->push("dport");
+ L->push((lua_Number) req.dport);
+ L->settable();
- free(v);
+ LuaHttpResponse r(res);
+ r.push(L);
+
+ res->builder = new LuaTask(L, 2);
}
- L->settable();
-
- L->push("uri");
- L->push(req.uri);
- L->settable();
-
- L->push("login");
- L->push(req.login);
- L->settable();
-
- L->push("password");
- L->push(req.password);
- L->settable();
-
- L->push("lip");
- L->push((lua_Number) req.lip);
- L->settable();
-
- L->push("dip");
- L->push((lua_Number) req.dip);
- L->settable();
-
- L->push("lport");
- L->push((lua_Number) req.lport);
- L->settable();
-
- L->push("dport");
- L->push((lua_Number) req.dport);
- L->settable();
-
- LuaHttpResponse r(res);
- r.push(L);
-
- res->builder = new LuaTask(L, 2);
-}
+ private:
+ Lua * L;
+ static int max_id;
+ int id;
+};
int LuaDomain::max_id = 1;
@@ -389,6 +397,10 @@ int sLua_LuaDomain::LuaDomain_proceed(Lua * L, int n, LuaDomain * obj, int calle
case LUADOMAIN_ONTOP:
obj->OnTop();
break;
+ case LUADOMAIN_GETPATTERN:
+ L->push(obj->GetPattern());
+ r = 1;
+ break;
}
return r;
@@ -396,6 +408,7 @@ int sLua_LuaDomain::LuaDomain_proceed(Lua * L, int n, LuaDomain * obj, int calle
int sLua_LuaDomain::LuaDomain_proceed_statics(Lua * L, int n, int caller) {
int r = 0;
+ Domain ** p;
switch (caller) {
case LUADOMAIN_NEWDOMAIN:
@@ -405,6 +418,37 @@ int sLua_LuaDomain::LuaDomain_proceed_statics(Lua * L, int n, int caller) {
r = 1;
}
break;
+ case LUADOMAIN_IDOMAIN:
+ L->getglobal("nDomain");
+ p = (Domain **) L->newuser(sizeof(Domain *));
+ *p = 0;
+ L->push();
+ r = 3;
+ printm(M_INFO, "IDOMAIN called.\n");
+ break;
+ case LUADOMAIN_NDOMAIN:
+ p = (Domain **) L->touserdata(1);
+ printm(M_INFO, "NDOMAIN called.\n");
+ if (*p) {
+ printm(M_INFO, "Not first time.\n");
+ *p = (*p)->Next();
+ } else {
+ printm(M_INFO, "First time. p = %p\n", Domain::First());
+ *p = Domain::First();
+ printm(M_INFO, "First has pattern: ");
+ printm(M_BARE, Domain::First()->GetPattern());
+ }
+ if (*p) {
+ printm(M_INFO, "Still has data.\n");
+ printm(M_INFO, "Get pattern = ");
+ printm(M_BARE, (*p)->GetPattern());
+ L->push((*p)->GetPattern());
+ } else {
+ printm(M_INFO, "No more data.\n");
+ L->push();
+ }
+ r = 1;
+ break;
}
return r;