[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; } |