[Modsnake-cvs] (jick) mod_snake/src apache_api.iapr.iconn_rec.imod_snake.cmod_snake.hmod_snake_buf.c
Status: Alpha
Brought to you by:
jick
|
From: Mod S. C. L. <mod...@so...> - 2002-01-07 06:35:21
|
Mod Snake CVS committal
Author : jick
Project : mod_snake
Module : src
Dir : mod_snake/src
Modified Files:
apache_api.i apr.i conn_rec.i mod_snake.c mod_snake.h
mod_snake_buf.c request_rec.i snake_modules.c
Log Message:
Get things working with Apache 2.0 HEAD
===================================================================
RCS file: /cvsroot/modsnake/mod_snake/src/apache_api.i,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -3 -r1.15 -r1.16
--- apache_api.i 2001/02/10 09:08:46 1.15
+++ apache_api.i 2002/01/07 06:35:18 1.16
@@ -123,7 +123,7 @@
#ifdef APACHE13
pool = ap_make_sub_pool(NULL);
#else
- pool = ap_make_sub_pool(NULL, NULL);
+ ap_make_sub_pool(&pool, NULL, NULL);
#endif
while((word = ap_getword_conf(pool, &cp)) && word[0] != '\0'){
pstr = PyString_FromString(word);
@@ -152,7 +152,7 @@
#ifdef APACHE13
pool = ap_make_sub_pool(NULL);
#else
- pool = ap_make_sub_pool(NULL, NULL);
+ ap_make_sub_pool(&pool, NULL, NULL);
#endif
rel = ap_server_root_relative(pool, file);
res = PyString_FromString(rel); /* Result is incref'd */
===================================================================
RCS file: /cvsroot/modsnake/mod_snake/src/apr.i,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -3 -r1.6 -r1.7
--- apr.i 2001/01/27 20:21:05 1.6
+++ apr.i 2002/01/07 06:35:18 1.7
@@ -65,7 +65,7 @@
static
PyObject *ap_table_t_get_keys_or_values(ap_table_t *table, int is_keys){
PyObject *plist;
- ap_array_header_t *keys;
+ const ap_array_header_t *keys;
int i;
keys = ap_table_elts(table);
@@ -110,7 +110,7 @@
static
PyObject *ap_table_t_items(ap_table_t *table){
PyObject *plist;
- ap_array_header_t *keys;
+ const ap_array_header_t *keys;
int i;
keys = ap_table_elts(table);
===================================================================
RCS file: /cvsroot/modsnake/mod_snake/src/conn_rec.i,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -3 -r1.18 -r1.19
--- conn_rec.i 2001/04/30 14:29:43 1.18
+++ conn_rec.i 2002/01/07 06:35:18 1.19
@@ -72,13 +72,16 @@
Py_BEGIN_ALLOW_THREADS
#ifdef APACHE13
res = *nwrote = ap_bwrite(c->client, lbuf->data, lbuf->len);
+ Py_END_ALLOW_THREADS
+ /* we don't PyMem_DEL lbuf->data, as it is ref'd from Python's memory */
+ PyMem_DEL(lbuf);
#else
- *nwrote = lbuf->len;
- res = apr_send(c->client_socket, lbuf->data, nwrote);
-#endif
+ PyErr_SetString(PyExc_SystemError, "operation unsupported in Apache 2.0");
Py_END_ALLOW_THREADS
/* we don't PyMem_DEL lbuf->data, as it is ref'd from Python's memory */
PyMem_DEL(lbuf);
+ res = HTTP_INTERNAL_SERVER_ERROR;
+#endif
return res;
}
@@ -104,6 +107,9 @@
static
PyObject *conn_rec_read(conn_rec *c, int n_to_read)
{
+#ifndef APACHE13
+ SNAKE20_UNSUP(NULL);
+#else
ap_status_t err;
PyObject *restuple, *pstr;
int str_alloced; /* # of bytes allocated in the string pstr */
@@ -130,12 +136,7 @@
}
Py_BEGIN_ALLOW_THREADS
-#ifdef APACHE13
njust_read = err = ap_bread(c->client, buf + num_read, bytes_left);
-#else
- njust_read = bytes_left;
- err = apr_recv(c->client_socket, buf + num_read, &njust_read);
-#endif
Py_END_ALLOW_THREADS
num_read += njust_read;
if(err != APR_SUCCESS)
@@ -156,6 +157,7 @@
restuple = Py_BuildValue("(iiO)", err, num_read, pstr);
Py_DECREF(pstr);
return restuple;
+#endif
}
static long conn_rec_id_get(conn_rec *c){
===================================================================
RCS file: /cvsroot/modsnake/mod_snake/src/mod_snake.c,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -3 -r1.28 -r1.29
--- mod_snake.c 2001/02/12 01:34:51 1.28
+++ mod_snake.c 2002/01/07 06:35:18 1.29
@@ -67,12 +67,12 @@
static
-void mod_snake_common_post_cfg(ap_pool_t *ap_cfg, ap_pool_t *plog,
- ap_pool_t *ptemp, server_rec *s)
+int mod_snake_common_post_cfg(ap_pool_t *ap_cfg, ap_pool_t *plog,
+ ap_pool_t *ptemp, server_rec *s)
{
ModSnakeSCfg *cfg = mod_snake_get_svr_cfg(s);
char *server_string = PACKAGE "/" VERSION;
- int i;
+ int i, rc;
#ifndef APACHE13
ap_add_version_component(ap_cfg, server_string);
@@ -84,8 +84,11 @@
ModSnakePyMod *pymod = (ModSnakePyMod *)Modules->elts + i;
if(!pymod->hooks[SNAKE_HOOK_POST_CONFIG]) continue;
- mod_snake_run_hook_post_config(pymod, cfg);
+ if((rc = mod_snake_run_hook_post_config(pymod, cfg)) != OK &&
+ rc != DECLINED)
+ return rc;
}
+ return OK;
}
/*
@@ -95,10 +98,10 @@
#ifndef APACHE13
static
-void mod_snake_post_cfg_cb(ap_pool_t *p, ap_pool_t *plog,
- ap_pool_t *ptemp, server_rec *s)
+int mod_snake_post_cfg_cb(ap_pool_t *p, ap_pool_t *plog,
+ ap_pool_t *ptemp, server_rec *s)
{
- mod_snake_common_post_cfg(p, plog, ptemp, s);
+ return mod_snake_common_post_cfg(p, plog, ptemp, s);
}
#endif
@@ -505,13 +508,20 @@
apr_hash_index_t *hi;
void *val;
- for(hi=apr_hash_first(pymod->input_filters); hi; hi=apr_hash_next(hi)){
+ for(hi=apr_hash_first(pymod->ap_p, pymod->input_filters);
+ hi;
+ hi=apr_hash_next(hi))
+ {
ModSnakeRegFilter *rfilter;
apr_hash_this(hi, NULL, NULL, &val);
rfilter = (ModSnakeRegFilter *)val;
Py_DECREF(rfilter->func);
}
- for(hi=apr_hash_first(pymod->output_filters); hi; hi=apr_hash_next(hi)){
+
+ for(hi=apr_hash_first(pymod->ap_p, pymod->output_filters);
+ hi;
+ hi=apr_hash_next(hi))
+ {
ModSnakeRegFilter *rfilter;
apr_hash_this(hi, NULL, NULL, &val);
rfilter = (ModSnakeRegFilter *)val;
@@ -535,7 +545,7 @@
const char *module_name, int is_profile)
{
ModSnakePyMod *pymod = ap_push_array(modulelist);
- ap_pool_t *ap_p = AP_ARRAY_POOL(modulelist);
+ ap_pool_t *ap_p = modulelist->pool;
int i;
MS_TRACE;
@@ -638,18 +648,21 @@
}
static
-void mod_snake_open_logs_cb(ap_pool_t *pconf, ap_pool_t *plog, ap_pool_t *ptmp,
- server_rec *s)
+int mod_snake_open_logs_cb(ap_pool_t *pconf, ap_pool_t *plog, ap_pool_t *ptmp,
+ server_rec *s)
{
ModSnakeSCfg *cfg = mod_snake_get_svr_cfg(s);
- int i;
+ int i, rc;
for(i=0; i< Modules->nelts; i++){
ModSnakePyMod *pymod = (ModSnakePyMod *)Modules->elts + i;
if(!pymod->hooks[SNAKE_HOOK_OPEN_LOGS]) continue;
- mod_snake_run_hook_open_logs(pymod, cfg);
+ if((rc = mod_snake_run_hook_open_logs(pymod, cfg)) != OK &&
+ rc != DECLINED)
+ return rc;
}
+ return OK;
}
#ifdef APACHE13
===================================================================
RCS file: /cvsroot/modsnake/mod_snake/src/mod_snake.h,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -3 -r1.29 -r1.30
--- mod_snake.h 2001/02/12 01:34:51 1.29
+++ mod_snake.h 2002/01/07 06:35:18 1.30
@@ -28,6 +28,7 @@
#include "apr_network_io.h"
#include "apr_strings.h"
#include "apr_hash.h"
+#include "apr_uri.h"
#endif
#include "snake_precompile.h"
#include <sys/param.h>
@@ -234,12 +235,6 @@
#endif
#ifdef APACHE13
-#define AP_ARRAY_POOL(p) (p)->pool
-#else
-#define AP_ARRAY_POOL(p) (p)->cont
-#endif
-
-#ifdef APACHE13
#define AP_CLEANUP_RESTYPE void
#define AP_CLEANUP_RESULT(x)
#else
@@ -318,10 +313,10 @@
extern int mod_snake_hooknum_to_type(int hookno);
extern int mod_snake_hookname_to_num(const char *hookname);
extern const char *mod_snake_hooknum_to_name(int hookno);
-extern void mod_snake_run_hook_post_config(ModSnakePyMod *pymod,
- ModSnakeSCfg *scfg);
-extern void mod_snake_run_hook_open_logs(ModSnakePyMod *pymod,
- ModSnakeSCfg *scfg);
+extern int mod_snake_run_hook_post_config(ModSnakePyMod *pymod,
+ ModSnakeSCfg *scfg);
+extern int mod_snake_run_hook_open_logs(ModSnakePyMod *pymod,
+ ModSnakeSCfg *scfg);
extern void mod_snake_log_error_unformat(const char *file, int line, int level,
ap_status_t status, const server_rec *s,
===================================================================
RCS file: /cvsroot/modsnake/mod_snake/src/mod_snake_buf.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- mod_snake_buf.c 2001/02/10 09:08:46 1.4
+++ mod_snake_buf.c 2002/01/07 06:35:18 1.5
@@ -83,7 +83,7 @@
apr_bucket *mod_snake_buf_bucketize(ModSnakeBuf *buf){
apr_bucket *res;
- res = apr_bucket_heap_create(buf->data, buf->endp - buf->data, 0, NULL);
+ res = apr_bucket_heap_create(buf->data, buf->endp - buf->data, 0);
if(!res) return NULL;
free(buf);
return res;
===================================================================
RCS file: /cvsroot/modsnake/mod_snake/src/request_rec.i,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -3 -r1.30 -r1.31
--- request_rec.i 2001/05/28 20:33:45 1.30
+++ request_rec.i 2002/01/07 06:35:18 1.31
@@ -84,6 +84,14 @@
#endif
}
+static char *request_rec_content_language_get(request_rec *obj){
+#ifdef APACHE13
+ return obj->content_language;
+#else
+ SNAKE20_UNSUP(NULL);
+#endif
+}
+
static char *request_rec_content_type_get(request_rec *obj){
return (char *)obj->content_type;
}
@@ -551,7 +559,9 @@
%readonly
char *handler;
- char *content_language;
+ %addmethods {
+ char *content_language;
+ }
ap_array_header_t *content_languages;
char *vlist_validator;
@@ -573,6 +583,6 @@
%addmethods {
PyObject *finfo;
}
- apr_uri_components parsed_uri;
+ apr_uri_t parsed_uri;
} request_rec;
===================================================================
RCS file: /cvsroot/modsnake/mod_snake/src/snake_modules.c,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -3 -r1.28 -r1.29
--- snake_modules.c 2001/05/28 20:31:39 1.28
+++ snake_modules.c 2002/01/07 06:35:18 1.29
@@ -278,10 +278,8 @@
initmod_snakec();
if(mod_snake_initmod_internal("mod_snake", &Mod_Snake_Py) == -1){
- if(PyErr_Occurred())
- PyErr_Print();
mod_snake_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_CRIT, 0, s,
- "mod_snake: Error initializing internal mod_snakea!");
+ "mod_snake: Error initializing internal mod_snake!");
if(PyErr_Occurred())
PyErr_Print();
Py_EndInterpreter(thr);
@@ -696,16 +694,17 @@
return res;
}
-void mod_snake_run_hook_post_config(ModSnakePyMod *pymod, ModSnakeSCfg *scfg){
+int mod_snake_run_hook_post_config(ModSnakePyMod *pymod, ModSnakeSCfg *scfg){
PyObject *pargs, *pres, *per_svr_data;
PyThreadState *tstate;
+ int res;
/* Lock */
if((tstate = mod_snake_create_thread_and_lock(pymod->interp)) == NULL){
mod_snake_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_CRIT,
0, mod_snake_get_main_server(),
"mod_snake: Failed to create a new threadstate");
- return;
+ return HTTP_INTERNAL_SERVER_ERROR;
}
if(!(per_svr_data = mod_snake_find_svr_cback_data(pymod, scfg)))
@@ -715,25 +714,34 @@
pres =mod_snake_pyeval_callobject(pymod,pymod->hooks[SNAKE_HOOK_POST_CONFIG],
pargs,SNAKE_HOOK_POST_CONFIG);/* Incref */
Py_DECREF(pargs);
- if(pres == NULL){
+ if(pres == NULL || !PyInt_Check(pres)){
+ mod_snake_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_CRIT, 0,scfg->server,
+ "mod_snake: (%s) Failed to call post_cfg hook",
+ pymod->name);
+ if(!PyErr_Occurred() && !PyInt_Check(pres))
+ PyErr_SetString(PyExc_TypeError, "Return value not an int");
if(PyErr_Occurred())
PyErr_Print();
- } else
- Py_DECREF(pres); /* Discard the result */
+ res = HTTP_INTERNAL_SERVER_ERROR;
+ } else {
+ res = PyInt_AsLong(pres);
+ Py_DECREF(pres);
+ }
mod_snake_destroy_thread_and_unlock(tstate); /* Unlock */
- return;
+ return res;
}
-void mod_snake_run_hook_open_logs(ModSnakePyMod *pymod, ModSnakeSCfg *scfg){
+int mod_snake_run_hook_open_logs(ModSnakePyMod *pymod, ModSnakeSCfg *scfg){
PyObject *pargs, *pres, *ppymod, *per_svr_data;
PyThreadState *tstate;
+ int res;
/* Lock */
if((tstate = mod_snake_create_thread_and_lock(pymod->interp)) == NULL){
mod_snake_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_CRIT,
0, mod_snake_get_main_server(),
"mod_snake: Failed to create a new threadstate");
- return;
+ return HTTP_INTERNAL_SERVER_ERROR;
}
ppymod = mod_snake_get_modsnakepymod_shadowclass(pymod);
@@ -745,13 +753,21 @@
pres = mod_snake_pyeval_callobject(pymod, pymod->hooks[SNAKE_HOOK_OPEN_LOGS],
pargs, SNAKE_HOOK_OPEN_LOGS); /* Incref */
Py_DECREF(pargs);
- if(pres == NULL){
+ if(pres == NULL || !PyInt_Check(pres)){
+ mod_snake_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_CRIT, 0,scfg->server,
+ "mod_snake: (%s) Failed to call open_logs hook",
+ pymod->name);
+ if(!PyErr_Occurred() && !PyInt_Check(pres))
+ PyErr_SetString(PyExc_TypeError, "Return value not an int");
if(PyErr_Occurred())
PyErr_Print();
- } else
- Py_DECREF(pres); /* Discard the result */
+ res = HTTP_INTERNAL_SERVER_ERROR;
+ } else {
+ res = PyInt_AsLong(pres);
+ Py_DECREF(pres);
+ }
mod_snake_destroy_thread_and_unlock(tstate); /* Unlock */
- return;
+ return res;
}
|