author | Mahlon E. Smith <mahlon@martini.nu> |
Tue, 09 Jun 2015 12:01:57 -0700 | |
changeset 32 | 6dc2d52e4b13 |
parent 22 | 822094314703 |
permissions | -rw-r--r-- |
22
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
1 |
/* vim: set noet nosta sw=4 ts=4 ft=c : */ |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
2 |
/* |
32 | 3 |
Copyright (c) 2011-2015, Mahlon E. Smith <mahlon@martini.nu> |
22
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
4 |
All rights reserved. |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
5 |
Redistribution and use in source and binary forms, with or without |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
6 |
modification, are permitted provided that the following conditions are met: |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
7 |
|
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
8 |
* Redistributions of source code must retain the above copyright |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
9 |
notice, this list of conditions and the following disclaimer. |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
10 |
|
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
11 |
* Redistributions in binary form must reproduce the above copyright |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
12 |
notice, this list of conditions and the following disclaimer in the |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
13 |
documentation and/or other materials provided with the distribution. |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
14 |
|
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
15 |
* Neither the name of Mahlon E. Smith nor the names of his |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
16 |
contributors may be used to endorse or promote products derived |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
17 |
from this software without specific prior written permission. |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
18 |
|
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
19 |
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
20 |
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
21 |
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
22 |
DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
23 |
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
24 |
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
25 |
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
26 |
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
27 |
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
28 |
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
29 |
*/ |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
30 |
|
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
31 |
#include "volta.h" |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
32 |
#include "lua.h" |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
33 |
|
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
34 |
/* |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
35 |
* Emit a lua error if a variable is declared without the use of 'local'. |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
36 |
* Since we only start up one lua interpreter, we want to ensure the |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
37 |
* global namespace isn't polluted by random scripts. |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
38 |
* |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
39 |
*/ |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
40 |
int |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
41 |
luaV_globalindex( lua_State *lua ) |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
42 |
{ |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
43 |
return luaL_error( lua, "attempt to set global var '%s' (use local!)", lua_tostring(lua, -2) ); |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
44 |
} |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
45 |
|
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
46 |
|
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
47 |
/* |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
48 |
* Override the regular lua print() function with one that formats the string |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
49 |
* in the same fashion as the rest of volta output -- and goes to stderr instead |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
50 |
* of stdout, which would just confuse squid. |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
51 |
* |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
52 |
*/ |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
53 |
int |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
54 |
luaV_print( lua_State *lua ) |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
55 |
{ |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
56 |
lua_Debug info; |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
57 |
int i = 0; |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
58 |
|
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
59 |
/* get the file and line number print() was called from. */ |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
60 |
lua_getstack( lua, 1, &info ); |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
61 |
lua_getinfo( lua, "Sl", &info ); |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
62 |
|
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
63 |
/* output each argument */ |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
64 |
for( i = 1; i <= lua_gettop( lua ); i++ ) |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
65 |
debug( 2, info.short_src, info.currentline, "%s\n", lua_tostring(lua, i) ); |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
66 |
|
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
67 |
return( 1 ); |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
68 |
} |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
69 |
|
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
70 |
|
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
71 |
/* |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
72 |
* Create the initial lua interpreter, and configure the default environment. |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
73 |
* |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
74 |
*/ |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
75 |
lua_State * |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
76 |
luaV_setup( void ) |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
77 |
{ |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
78 |
lua_State *lua = luaL_newstate(); |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
79 |
luaL_openlibs( lua ); /* include lua standard libraries */ |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
80 |
|
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
81 |
/* Predeclare the request table. */ |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
82 |
lua_createtable( lua, 0, 7 ); |
32 | 83 |
lua_setglobal( lua, "request" ); |
22
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
84 |
|
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
85 |
/* Predeclare a table for shared data */ |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
86 |
lua_newtable( lua ); |
32 | 87 |
lua_setglobal( lua, "shared" ); |
22
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
88 |
|
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
89 |
/* replace the lua print() function with one that calls debug() instead */ |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
90 |
lua_register( lua, "print", luaV_print ); |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
91 |
|
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
92 |
/* Restrict additional globals. */ |
32 | 93 |
lua_createtable( lua, 0, 1); |
94 |
lua_pushcfunction( lua, luaV_globalindex ); |
|
95 |
lua_setfield( lua, -2, "__newindex"); |
|
96 |
lua_pushboolean( lua, 0 ); |
|
97 |
lua_setfield( lua, -2, "__metatable"); |
|
98 |
lua_setmetatable( lua, -2 ); |
|
22
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
99 |
|
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
100 |
lua_settop( lua, 0 ); /* wipe the stack */ |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
101 |
return( lua ); |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
102 |
} |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
103 |
|
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
104 |
|
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
105 |
/* |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
106 |
* Convert the request struct into a lua table, and inject it into the interpreter. |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
107 |
* |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
108 |
*/ |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
109 |
void |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
110 |
luaV_setup_request( parsed *request ) |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
111 |
{ |
32 | 112 |
lua_getglobal( v.lua, "request" ); |
22
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
113 |
lua_pushstring( v.lua, request->scheme ); |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
114 |
lua_setfield( v.lua, 1, "scheme" ); |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
115 |
lua_pushstring( v.lua, request->host ); |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
116 |
lua_setfield( v.lua, 1, "host" ); |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
117 |
lua_pushstring( v.lua, request->path ); |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
118 |
lua_setfield( v.lua, 1, "path" ); |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
119 |
lua_pushstring( v.lua, request->port ); |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
120 |
lua_setfield( v.lua, 1, "port" ); |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
121 |
lua_pushstring( v.lua, request->method ); |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
122 |
lua_setfield( v.lua, 1, "method" ); |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
123 |
lua_pushstring( v.lua, request->client_ip ); |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
124 |
lua_setfield( v.lua, 1, "client_ip" ); |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
125 |
lua_pushstring( v.lua, request->tld ); |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
126 |
lua_setfield( v.lua, 1, "domain" ); |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
127 |
|
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
128 |
return; |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
129 |
} |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
130 |
|
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
131 |
|
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
132 |
/* |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
133 |
* Given a request struct and a path to a lua script (or bytecode), |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
134 |
* execute the script within the global lua interpreter, and return |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
135 |
* a pointer to the string it generated (or NULL). |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
136 |
* |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
137 |
*/ |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
138 |
char * |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
139 |
luaV_run( parsed *request, char *path ) |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
140 |
{ |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
141 |
int lua_err = 0; |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
142 |
|
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
143 |
/* provide access to the request struct */ |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
144 |
luaV_setup_request( request ); |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
145 |
|
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
146 |
/* suck in the lua chunk(s) */ |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
147 |
debug( 4, LOC, "Loading Lua code from '%s'\n", path ); |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
148 |
lua_err = luaL_loadfile( v.lua, path ); |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
149 |
if ( lua_err ) { |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
150 |
debug( 2, LOC, "Unable to run lua rule: %s\n", lua_tostring(v.lua, -1) ); |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
151 |
lua_settop( v.lua, 0 ); |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
152 |
return( NULL ); |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
153 |
} |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
154 |
|
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
155 |
/* execute the lua, expecting one value to be returned. */ |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
156 |
lua_err = lua_pcall( v.lua, 0, 1, 0 ); |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
157 |
if ( lua_err ) { |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
158 |
debug( 2, LOC, "Unable to run lua rule: %s\n", lua_tostring(v.lua, -1) ); |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
159 |
lua_settop( v.lua, 0 ); |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
160 |
return( NULL ); |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
161 |
} |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
162 |
|
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
163 |
/* get the last element in the stack, which should be the script's return value. */ |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
164 |
char *rewrite = (char *)lua_tostring( v.lua, -1 ); |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
165 |
|
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
166 |
debug( 5, LOC, "Lua is currently consuming %dKB of memory\n", lua_gc(v.lua, LUA_GCCOUNT, 0) ); |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
167 |
lua_settop( v.lua, 0 ); /* reset the stack. */ |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
168 |
|
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
169 |
return( rewrite ); |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
170 |
} |
822094314703
Add the ability to optionally script rewrite logic using Lua.
Mahlon E. Smith <mahlon@martini.nu>
parents:
diff
changeset
|
171 |