--- parser3/src/targets/apache13/modules/extra/Attic/mod_parser3.C 2001/05/04 10:42:49 1.33 +++ parser3/src/targets/apache13/modules/extra/Attic/mod_parser3.C 2001/09/26 10:32:26 1.44 @@ -2,10 +2,9 @@ Parser: apache 1.3 module. Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com) - Author: Alexander Petrosyan (http://design.ru/paf) - $Id: mod_parser3.C,v 1.33 2001/05/04 10:42:49 paf Exp $ + $Id: mod_parser3.C,v 1.44 2001/09/26 10:32:26 parser Exp $ */ #include "httpd.h" @@ -15,6 +14,7 @@ #include "http_main.h" #include "http_protocol.h" #include "util_script.h" +#include "multithread.h" #include "pa_sapi.h" #include "classes.h" @@ -24,31 +24,58 @@ #include "pa_version.h" #include "pa_socks.h" +#ifdef _DEBUG +# define DEBUG_PREFIX "debug_" +# define PARSER3_MODULE debug_parser3_module +#else +# define DEBUG_PREFIX +# define PARSER3_MODULE parser3_module +#endif + +// consts + +extern const char *main_RCSIds[]; +extern const char *smtp_RCSIds[]; +extern const char *gd_RCSIds[]; +extern const char *classes_RCSIds[]; +extern const char *types_RCSIds[]; +extern const char *ApacheModuleParser3_RCSIds[]; +const char **RCSIds[]={ + main_RCSIds, + smtp_RCSIds, + gd_RCSIds, + classes_RCSIds, + types_RCSIds, + ApacheModuleParser3_RCSIds, + 0 +}; + + /// apache parser module configuration [httpd.conf + .htaccess-es] struct Parser_module_config { - const char* parser_root_auto_path; ///< filespec of admin's auto.p file - const char* parser_site_auto_path; ///< filespec of site's auto.p file + const char* parser_root_config_filespec; ///< filespec of admin's config file + const char* parser_site_config_filespec; ///< filespec of site's config file }; /* * Declare ourselves so the configuration routines can find and know us. * We'll fill it in at the end of the module. */ -extern "C" module MODULE_VAR_EXPORT parser3_module; +extern "C" module MODULE_VAR_EXPORT PARSER3_MODULE; /* * Locate our directory configuration record for the current request. */ static Parser_module_config *our_dconfig(request_rec *r) { return (Parser_module_config *) - ap_get_module_config(r->per_dir_config, &parser3_module); + ap_get_module_config(r->per_dir_config, &PARSER3_MODULE); } -static const char *cmd_parser_auto_path(cmd_parms *cmd, void *mconfig, char *file_spec) { +static const char *cmd_parser_config(cmd_parms *cmd, void *mconfig, char *file_spec) { Parser_module_config *cfg = (Parser_module_config *) mconfig; // remember assigned filespec into cfg - (cmd->info?cfg->parser_root_auto_path:cfg->parser_site_auto_path)=file_spec; + (cmd->info?cfg->parser_root_config_filespec:cfg->parser_site_config_filespec)=file_spec; return NULL; } @@ -128,6 +155,9 @@ size_t SAPI::read_post(Pool& pool, char void SAPI::add_header_attribute(Pool& pool, const char *key, const char *value) { request_rec *r=static_cast(pool.context()); + if(strcasecmp(key, "location")==0) + r->status=302; + if(strcasecmp(key, "content-type")==0) { /* r->content_type, *not* r->headers_out("Content-type"). If you don't * set it, it will be filled in with the server's default type (typically @@ -135,8 +165,10 @@ void SAPI::add_header_attribute(Pool& po * case. */ r->content_type = value; - } else - ap_table_merge(r->headers_out, key, value); + } else if(strcasecmp(key, "status")==0) + r->status=atoi(value); + else + ap_table_addn(r->headers_out, key, value); } void SAPI::send_header(Pool& pool) { @@ -162,8 +194,11 @@ void SAPI::send_body(Pool& pool, const v @todo intelligent cache-control */ -static int parser_handler(request_rec *r) -{ +static int parser_handler(request_rec *r) { +// _asm int 3; + if(r->finfo.st_mode == 0) + return NOT_FOUND; + Pool pool(r->pool); pool.set_context(r); @@ -188,10 +223,11 @@ static int parser_handler(request_rec *r request_info.uri=SAPI::get_env(pool, "REQUEST_URI"); request_info.content_type=SAPI::get_env(pool, "CONTENT_TYPE"); const char *content_length=SAPI::get_env(pool, "CONTENT_LENGTH"); - request_info.content_length=(content_length?atoi(content_length):0); + request_info.content_length=content_length?atoi(content_length):0; request_info.cookie=SAPI::get_env(pool, "HTTP_COOKIE"); request_info.user_agent=SAPI::get_env(pool, "HTTP_USER_AGENT"); + //_asm int 3; // prepare to process request Request request(pool, request_info, @@ -200,8 +236,8 @@ static int parser_handler(request_rec *r // process the request request.core( - dcfg->parser_root_auto_path, true, // /path/to/admin/auto.p - dcfg->parser_site_auto_path, true, // /path/to/site/auto.p + dcfg->parser_root_config_filespec, true, // /path/to/admin/config + dcfg->parser_site_config_filespec, true, // /path/to/site/config r->header_only!=0); // no actions with request' data past this point // request.exception not not handled here, but all @@ -281,7 +317,7 @@ static int parser_handler(request_rec *r */ static void setup_module_cells() { - static bool globals_inited=false; + static bool globals_inited=false; if(globals_inited) return; globals_inited=true; @@ -339,8 +375,8 @@ static void *parser_create_dir_config(po * Now fill in the defaults. If there are any `parent' configuration * records, they'll get merged as part of a separate callback. */ - cfg->parser_root_auto_path = 0; - cfg->parser_site_auto_path = 0; + cfg->parser_root_config_filespec = 0; + cfg->parser_site_config_filespec = 0; return (void *) cfg; } @@ -367,13 +403,13 @@ static void *parser_merge_dir_config(poo Parser_module_config *nconf = (Parser_module_config *) newloc_conf; // always from parent - merged_config->parser_root_auto_path = ap_pstrdup(p, pconf->parser_root_auto_path); + merged_config->parser_root_config_filespec = ap_pstrdup(p, pconf->parser_root_config_filespec); /* * Some things get copied directly from the more-specific record, rather * than getting merged. */ - merged_config->parser_site_auto_path = ap_pstrdup(p, nconf->parser_site_auto_path? - nconf->parser_site_auto_path:pconf->parser_site_auto_path); + merged_config->parser_site_config_filespec = ap_pstrdup(p, nconf->parser_site_config_filespec? + nconf->parser_site_config_filespec:pconf->parser_site_config_filespec); return (void *) merged_config; } @@ -393,8 +429,8 @@ static void *parser_create_server_config Parser_module_config *cfg= (Parser_module_config *) ap_pcalloc(p, sizeof(Parser_module_config)); - cfg->parser_root_auto_path = 0; - cfg->parser_site_auto_path = 0; + cfg->parser_root_config_filespec = 0; + cfg->parser_site_config_filespec = 0; return (void *) cfg; } @@ -425,10 +461,10 @@ static void *parser_merge_server_config( * Our inheritance rules are our own, and part of our module's semantics. * Basically, just note whence we came. */ - merged_config->parser_root_auto_path = ap_pstrdup(p, s2conf->parser_root_auto_path? - s2conf->parser_root_auto_path:s1conf->parser_root_auto_path); - merged_config->parser_site_auto_path = ap_pstrdup(p, s2conf->parser_site_auto_path? - s2conf->parser_site_auto_path:s1conf->parser_site_auto_path); + merged_config->parser_root_config_filespec = ap_pstrdup(p, s2conf->parser_root_config_filespec? + s2conf->parser_root_config_filespec:s1conf->parser_root_config_filespec); + merged_config->parser_site_config_filespec = ap_pstrdup(p, s2conf->parser_site_config_filespec? + s2conf->parser_site_config_filespec:s1conf->parser_site_config_filespec); return (void *) merged_config; } @@ -505,20 +541,20 @@ static int parser_access_checker(request static const command_rec parser_cmds[] = { { - "parser_root_auto_path", /* directive name */ - (const char *(*)(void))((void *)cmd_parser_auto_path), // config action routine + DEBUG_PREFIX"ParserRootConfig", /* directive name */ + (const char *(*)(void))((void *)cmd_parser_config), // config action routine (void*)true, /* argument to include in call */ (int)(ACCESS_CONF|RSRC_CONF), /* where available */ TAKE1, /* arguments */ - "Parser root auto.p filespec (Admin)" // directive description + "Parser root config filespec (Admin)" // directive description }, { - "parser_site_auto_path", /* directive name */ - (const char *(*)(void))((void *)cmd_parser_auto_path), // config action routine + DEBUG_PREFIX"ParserSiteConfig", /* directive name */ + (const char *(*)(void))((void *)cmd_parser_config), // config action routine (void*)false, /* argument to include in call */ (int)(OR_OPTIONS), /* where available */ TAKE1, /* arguments */ - "Parser site auto.p filespec" // directive description + "Parser site config filespec" // directive description }, {NULL} }; @@ -542,7 +578,7 @@ static const command_rec parser_cmds[] = */ static const handler_rec parser_handlers[] = { - {"parser3-handler", parser_handler}, + {DEBUG_PREFIX"parser3-handler", parser_handler}, {NULL} }; @@ -560,7 +596,7 @@ static const handler_rec parser_handlers * during request processing. Note that not all routines are necessarily * called (such as if a resource doesn't have access restrictions). */ -module MODULE_VAR_EXPORT parser3_module = +module MODULE_VAR_EXPORT PARSER3_MODULE = { STANDARD_MODULE_STUFF, parser_server_init, /* module initializer */ @@ -578,3 +614,12 @@ module MODULE_VAR_EXPORT parser3_module 0, /* [8] fixups */ 0 /* [10] logger */ }; + +#if defined(_MSC_VER) +# define APACHE_WIN32_SRC "/parser3project/win32apache13/src" +# ifdef _DEBUG +# pragma comment(lib, APACHE_WIN32_SRC "/CoreD/ApacheCore.lib") +# else +# pragma comment(lib, APACHE_WIN32_SRC "/CoreR/ApacheCore.lib") +# endif +#endif