lua_request.c revision e4709c20138a8cd7c85a6ffba716d85fd2f6cdf5
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd * Licensed to the Apache Software Foundation (ASF) under one or more
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd * contributor license agreements. See the NOTICE file distributed with
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd * this work for additional information regarding copyright ownership.
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd * The ASF licenses this file to You under the Apache License, Version 2.0
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd * (the "License"); you may not use this file except in compliance with
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd * the License. You may obtain a copy of the License at
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd * Unless required by applicable law or agreed to in writing, software
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd * distributed under the License is distributed on an "AS IS" BASIS,
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd * See the License for the specific language governing permissions and
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd * limitations under the License.
ad74a0524a06bfe11b7de9e3b4ce7233ab3bd3f7ndtypedef apr_table_t *(*req_field_apr_table_f) (request_rec * r);
ad74a0524a06bfe11b7de9e3b4ce7233ab3bd3f7ndvoid apl_rstack_dump(lua_State *L, request_rec *r, const char *msg)
a76bfec941c4c5e3e1e24d7007108f4d3dac91a5nd ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, "Lua Stack Dump: [%s]", msg);
6df89e6e4adeb986b41b7ec6b7593a887e031ce7nd int t = lua_type(L, i);
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd switch (t) {
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, "%d: userdata",
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd "%d: lightuserdata", i);
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, "%d: NIL", i);
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, "%d: None", i);
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd i) ? "true" :
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd "%d: <table>", i);
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd "%d: <function>", i);
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd * Verify that the thing at index is a request_rec wrapping
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd * userdata thingamajig and return it if it is. if it is not
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd * lua will enter its error handling routine.
6116c12fdd3ed06d388fe6572e50a22e9320dfa5ndstatic request_rec *apl_check_request_rec(lua_State *L, int index)
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd/* ------------------ request methods -------------------- */
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd/* helper callback for req_parseargs */
6116c12fdd3ed06d388fe6572e50a22e9320dfa5ndstatic int req_aprtable2luatable_cb(void *l, const char *key,
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd const char *value)
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd lua_State *L = (lua_State *) l; /* [table<s,t>, table<s,s>] */
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd /* rstack_dump(L, RRR, "start of cb"); */
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak /* L is [table<s,t>, table<s,s>] */
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd /* build complex */
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd lua_getfield(L, -1, key); /* [VALUE, table<s,t>, table<s,s>] */
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd /* rstack_dump(L, RRR, "after getfield"); */
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd switch (t) {
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd lua_pushnumber(L, 1); /* [1, array, table<s,t>, table<s,s>] */
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd lua_pushstring(L, value); /* [string, 1, array, table<s,t>, table<s,s>] */
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd lua_settable(L, -3); /* [array, table<s,t>, table<s,s>] */
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd /* [array, table<s,t>, table<s,s>] */
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd lua_pushnumber(L, size + 1); /* [#, array, table<s,t>, table<s,s>] */
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd lua_pushstring(L, value); /* [string, #, array, table<s,t>, table<s,s>] */
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd lua_settable(L, -3); /* [array, table<s,t>, table<s,s>] */
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd /* L is [table<s,t>, table<s,s>] */
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd /* build simple */
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd lua_getfield(L, -2, key); /* [VALUE, table<s,s>, table<s,t>] */
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd if (lua_isnoneornil(L, -1)) { /* only set if not already set */
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd lua_pushstring(L, value); /* [string, table<s,s>, table<s,t>] */
71fccc298df6a1540d408151a26aa22beed55d0bnd/* r:parseargs() returning a lua table */
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd apr_table_do(req_aprtable2luatable_cb, L, form_table, NULL);
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd return 2; /* [table<string, string>, table<string, array<string>>] */
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd/* wrap ap_rputs as r:puts(String) */
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd/* wrap ap_rwrite as r:write(String) */
08cf4a15275e4cb65a424b3a1db5410bfb51085cjim/* r:parsebody() */
05ede5110427cb9dc071cc671d5aaba5d3b88c79nd apr_table_do(req_aprtable2luatable_cb, L, form_table, NULL);
611049e38bfbaeb173d2d7fab2e44a48753436a1nd/* r:addoutputfilter(name|function) */
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, "adding output filter %s",
2704de98885368683621b01c8f8f4e4b01557611takashi/* BEGIN dispatch mathods for request_rec fields */
d2b809e5d72658bff23819d8b77f20e4939af541nd return r->uri;
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd return r->method;
6116c12fdd3ed06d388fe6572e50a22e9320dfa5ndstatic const char *req_canonical_filename_field(request_rec *r)
6116c12fdd3ed06d388fe6572e50a22e9320dfa5nd return r->user;
71fccc298df6a1540d408151a26aa22beed55d0bndstatic const char *req_content_encoding_field(request_rec *r)
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end return r->range;
return r->the_request;
return r->status;
return r->assbackwards;
return r->headers_in;
return r->headers_out;
if (rft) {
case APL_REQ_FUNTYPE_TABLE:{
name);
case APL_REQ_FUNTYPE_LUACFUN:{
name);
case APL_REQ_FUNTYPE_STRING:{
char *rs;
case APL_REQ_FUNTYPE_INT:{
int rs;
case APL_REQ_FUNTYPE_BOOLEAN:{
int rs;
const char *msg;
/* handle r.status = 201 */
const char *key;
key));
lua_error(L);
return rft;
APL_REQ_FUNTYPE_STRING, p));
lua_boxpointer(L, c);
lua_boxpointer(L, s);
lua_boxpointer(L, r);