You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by br...@apache.org on 2008/11/05 01:30:08 UTC

svn commit: r711479 - in /httpd/mod_wombat/trunk: mod_wombat.c request.c request.h test/htdocs/simple.lua

Author: brianm
Date: Tue Nov  4 16:30:07 2008
New Revision: 711479

URL: http://svn.apache.org/viewvc?rev=711479&view=rev
Log:
changing how dispatch works to be far less sucky, tests fail at the moment, but I am checking in anyway as I don't want to lose work

Modified:
    httpd/mod_wombat/trunk/mod_wombat.c
    httpd/mod_wombat/trunk/request.c
    httpd/mod_wombat/trunk/request.h
    httpd/mod_wombat/trunk/test/htdocs/simple.lua

Modified: httpd/mod_wombat/trunk/mod_wombat.c
URL: http://svn.apache.org/viewvc/httpd/mod_wombat/trunk/mod_wombat.c?rev=711479&r1=711478&r2=711479&view=diff
==============================================================================
--- httpd/mod_wombat/trunk/mod_wombat.c (original)
+++ httpd/mod_wombat/trunk/mod_wombat.c Tue Nov  4 16:30:07 2008
@@ -514,7 +514,7 @@
 static int wombat_open_hook(lua_State *L, apr_pool_t *p) {
     apr_lua_init(L, p);
     apw_load_apache2_lmodule(L);
-    apw_load_request_lmodule(L);
+    apw_load_request_lmodule(L, p);
     apw_load_config_lmodule(L);
     return OK;
 }

Modified: httpd/mod_wombat/trunk/request.c
URL: http://svn.apache.org/viewvc/httpd/mod_wombat/trunk/request.c?rev=711479&r1=711478&r2=711479&view=diff
==============================================================================
--- httpd/mod_wombat/trunk/request.c (original)
+++ httpd/mod_wombat/trunk/request.c Tue Nov  4 16:30:07 2008
@@ -193,6 +193,25 @@
   return 1;
 }
 
+static int req_dispatch(lua_State* L) {
+  request_rec* r = check_request_rec(L, 1);
+  const char *name = luaL_checkstring(L, 2);
+  ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, "dispatching %s", name);
+  lua_pop(L, 2);
+ 
+  lua_getfield(L, LUA_REGISTRYINDEX, "Apache2.Request.dispatch");
+  apr_hash_t* dispatch = lua_touserdata(L, 1);
+  lua_pop(L, 1);
+  lua_CFunction* func = (lua_CFunction*) apr_hash_get(dispatch, name, APR_HASH_KEY_STRING);
+  if (!func) {
+      ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, "no function for %s", name);
+      
+      return 0;
+  }
+  lua_pushcfunction(L, func);
+  return 1;
+}
+
 // helper function for the logging functions below
 static int req_log_at(lua_State* L, int level) {
     request_rec* r = check_request_rec(L, 1);
@@ -267,22 +286,8 @@
 }
 
 static const struct luaL_Reg request_methods[] = {
-    {"puts", req_puts},
-    {"write", req_write},
-    {"document_root", req_document_root},
-    {"parseargs", req_parseargs},
-    {"parsebody", req_parsebody},
-    
-    // Log methods
-    {"debug", req_debug},
-    {"info", req_info},
-    {"notice", req_notice},
-    {"warn", req_warn},
-    {"err", req_err},
-    {"crit", req_crit},
-    {"alert", req_alert},
-    {"emerg", req_emerg},
-    
+    {"__index", req_dispatch},
+    //   {"__newindex", req_set_field},    
     {NULL, NULL}
 };
 
@@ -296,7 +301,28 @@
     {NULL, NULL}
 };
 
-void apw_load_request_lmodule(lua_State *L) {
+void apw_load_request_lmodule(lua_State *L, apr_pool_t *p) {
+    
+    apr_hash_t* dispatch = apr_hash_make(p);
+    apr_hash_set(dispatch, "puts", APR_HASH_KEY_STRING, &req_puts);
+    apr_hash_set(dispatch, "write", APR_HASH_KEY_STRING, &req_write);
+    apr_hash_set(dispatch, "document_root", APR_HASH_KEY_STRING, &req_document_root);
+    apr_hash_set(dispatch, "parseargs", APR_HASH_KEY_STRING, &req_parseargs);
+    apr_hash_set(dispatch, "parsebody", APR_HASH_KEY_STRING, &req_parsebody);
+    
+    
+    apr_hash_set(dispatch, "debug", APR_HASH_KEY_STRING, &req_debug);
+    apr_hash_set(dispatch, "info", APR_HASH_KEY_STRING, &req_info);
+    apr_hash_set(dispatch, "notice", APR_HASH_KEY_STRING, &req_notice);
+    apr_hash_set(dispatch, "warn", APR_HASH_KEY_STRING, &req_warn);
+    apr_hash_set(dispatch, "err", APR_HASH_KEY_STRING, &req_err);
+    apr_hash_set(dispatch, "crit", APR_HASH_KEY_STRING, &req_crit);
+    apr_hash_set(dispatch, "alert", APR_HASH_KEY_STRING, &req_alert);
+    apr_hash_set(dispatch, "emerg", APR_HASH_KEY_STRING, &req_emerg);
+    
+    lua_pushlightuserdata(L, dispatch);
+    lua_setfield(L, LUA_REGISTRYINDEX, "Apache2.Request.dispatch");
+    
     luaL_newmetatable(L, "Apache2.Request"); // [metatable]
     lua_pushvalue(L, -1); 
 
@@ -355,75 +381,77 @@
     luaL_getmetatable(L, "Apache2.Request");
     lua_setmetatable(L, -2);
     luaL_getmetatable(L, "Apache2.Request");
-
-    lua_pushinteger(L, r->status);
-    lua_setfield(L, -2, "status");
+    rstack_dump(L, r, "apw_push_request pre pop");
+    lua_pop(L, 1);
+    rstack_dump(L, r, "apw_push_request post pop");
+    // lua_pushinteger(L, r->status);
+    // lua_setfield(L, -2, "status");
         
-    lua_pushstring(L, r->method);
-    lua_setfield(L, -2, "method");
-
-    lua_pushstring(L, r->the_request);
-    lua_setfield(L, -2, "the_request");
+    // lua_pushstring(L, r->method);
+    // lua_setfield(L, -2, "method");
 
-    lua_pushstring(L, r->protocol);
-    lua_setfield(L, -2, "protocol");
-    
-    lua_pushstring(L, r->range);
-    lua_setfield(L, -2, "range");
-    
-    lua_pushstring(L, r->content_type);
-    lua_setfield(L, -2, "content_type");
-    
-    lua_pushstring(L, r->content_encoding);
-    lua_setfield(L, -2, "content_encoding");
-    
-    lua_pushstring(L, r->user);
-    lua_setfield(L, -2, "user");
-    
-    lua_pushstring(L, r->ap_auth_type);
-    lua_setfield(L, -2, "ap_auth_type");
-    
-    lua_pushstring(L, r->unparsed_uri);
-    lua_setfield(L, -2, "unparsed_uri");
-    
-    lua_pushstring(L, r->uri);
-    lua_setfield(L, -2, "uri");
-    
-    lua_pushstring(L, r->filename);
-    lua_setfield(L, -2, "filename");
-
-    lua_pushstring(L, r->canonical_filename);
-    lua_setfield(L, -2, "canonical_filename");
-
-    lua_pushstring(L, r->path_info);
-    lua_setfield(L, -2, "path_info");
-    
-    lua_pushstring(L, r->args);
-    lua_setfield(L, -2, "args");
-    
-    lua_pushstring(L, r->hostname);
-    lua_setfield(L, -2, "hostname");
-
-    lua_pushboolean(L, r->assbackwards);
-    lua_setfield(L, -2, "assbackwards");
-
-    lua_pushcfunction(L, &req_add_output_filter);
-    lua_setfield(L, -2, "addoutputfilter");
-
-    apw_push_apr_table(L, "subprocess_env", r->subprocess_env);
-    apw_push_apr_table(L, "headers_out", r->headers_out);
-    apw_push_apr_table(L, "headers_in", r->headers_in);
-    apw_push_apr_table(L, "notes", r->notes);
-
-    apw_push_connection(L, r->connection);
-    lua_setfield(L, -2, "connection");
-
-    apw_push_server(L, r->server);
-    lua_setfield(L, -2, "server");
-
-    lua_pushlightuserdata(L, r);
-    lua_pushcclosure(L, &req_newindex, 1);
-    lua_setfield(L, -2, "__newindex");
-    lua_pop(L, 1);
+    // lua_pushstring(L, r->the_request);
+    //     lua_setfield(L, -2, "the_request");
+    // 
+    //     lua_pushstring(L, r->protocol);
+    //     lua_setfield(L, -2, "protocol");
+    //     
+    //     lua_pushstring(L, r->range);
+    //     lua_setfield(L, -2, "range");
+    //     
+    //     lua_pushstring(L, r->content_type);
+    //     lua_setfield(L, -2, "content_type");
+    //     
+    //     lua_pushstring(L, r->content_encoding);
+    //     lua_setfield(L, -2, "content_encoding");
+    //     
+    //     lua_pushstring(L, r->user);
+    //     lua_setfield(L, -2, "user");
+    //     
+    //     lua_pushstring(L, r->ap_auth_type);
+    //     lua_setfield(L, -2, "ap_auth_type");
+    //     
+    //     lua_pushstring(L, r->unparsed_uri);
+    //     lua_setfield(L, -2, "unparsed_uri");
+    //     
+    //     lua_pushstring(L, r->uri);
+    //     lua_setfield(L, -2, "uri");
+    //     
+    //     lua_pushstring(L, r->filename);
+    //     lua_setfield(L, -2, "filename");
+    // 
+    //     lua_pushstring(L, r->canonical_filename);
+    //     lua_setfield(L, -2, "canonical_filename");
+    // 
+    //     lua_pushstring(L, r->path_info);
+    //     lua_setfield(L, -2, "path_info");
+    //     
+    //     lua_pushstring(L, r->args);
+    //     lua_setfield(L, -2, "args");
+    //     
+    //     lua_pushstring(L, r->hostname);
+    //     lua_setfield(L, -2, "hostname");
+    // 
+    //     lua_pushboolean(L, r->assbackwards);
+    //     lua_setfield(L, -2, "assbackwards");
+    // 
+    //     lua_pushcfunction(L, &req_add_output_filter);
+    //     lua_setfield(L, -2, "addoutputfilter");
+    // 
+    //     apw_push_apr_table(L, "subprocess_env", r->subprocess_env);
+    //     apw_push_apr_table(L, "headers_out", r->headers_out);
+    //     apw_push_apr_table(L, "headers_in", r->headers_in);
+    //     apw_push_apr_table(L, "notes", r->notes);
+    // 
+    //     apw_push_connection(L, r->connection);
+    //     lua_setfield(L, -2, "connection");
+    // 
+    //     apw_push_server(L, r->server);
+    //     lua_setfield(L, -2, "server");
+    // 
+    //     lua_pushlightuserdata(L, r);
+    //     lua_pushcclosure(L, &req_newindex, 1);
+    //     lua_setfield(L, -2, "__newindex");
+    //     lua_pop(L, 1);
 }
 

Modified: httpd/mod_wombat/trunk/request.h
URL: http://svn.apache.org/viewvc/httpd/mod_wombat/trunk/request.h?rev=711479&r1=711478&r2=711479&view=diff
==============================================================================
--- httpd/mod_wombat/trunk/request.h (original)
+++ httpd/mod_wombat/trunk/request.h Tue Nov  4 16:30:07 2008
@@ -19,7 +19,7 @@
 #define REQUEST_H
 
 APR_DECLARE(void) apw_push_request(lua_State* L, request_rec* r);
-APR_DECLARE(void) apw_load_request_lmodule(lua_State *L);
+APR_DECLARE(void) apw_load_request_lmodule(lua_State *L, apr_pool_t *p);
 
 #endif
 

Modified: httpd/mod_wombat/trunk/test/htdocs/simple.lua
URL: http://svn.apache.org/viewvc/httpd/mod_wombat/trunk/test/htdocs/simple.lua?rev=711479&r1=711478&r2=711479&view=diff
==============================================================================
--- httpd/mod_wombat/trunk/test/htdocs/simple.lua (original)
+++ httpd/mod_wombat/trunk/test/htdocs/simple.lua Tue Nov  4 16:30:07 2008
@@ -1,3 +1,3 @@
 function handle(r)
-    r:puts("Hi!")
+   r:puts("Hi!")
 end