Peppeink
31-03-2009, 14:43
Ciao a tutti,
qualcuno saprebbe indicarmi come procedere per la realizzazione di un modulo per Apache 2.0?
Al momento ho iniziato a leggere il libro Writing Apache Modules with Perl and C ma mi sono accorto che tutte le indicazioni si riferiscono alla versione 1.3 di Apache e da quello che ho capito nella versione 2.0 hanno cambiato tutte le Api, hanno introdotto gli Hook(di cui tutt'ora non ho capito niente :) ).
Nel libro che vi ho citato sopra con la versione 6 di Visual Studio fa creare un progetto di tipo Dll e poi lo fa mettere nella cartella modules di Apache. Questa tecnica sembra non funzionare con la versione Apache 2.0.
Sto lavorando in ambiente Win32 e vi invio il codice sorgente che ho provato ad eseguire. Il Codice compila ma nel momento in cui lo vado a caricare in apache tramite la direttiva nel file di configurazione
LoadModule hello2_module modules/mod_hello2.dll
<Location /ciao/funziona>
SetHandler hello2_module
</Location>
si blocca l'avviamento del server apache.
Il codive è questo:
#include "httpd.h"
#include "http_config.h"
#include "http_request.h"
#include "http_protocol.h"
#include "http_core.h"
#include "http_main.h"
#include "http_log.h"
#include "apr.h"
#include "ap_mpm.h"
#include "apr_strings.h"
#include "scoreboard.h"
/* file: mod_hello.c */
/* here's the content handler */
static int hello2_handler(request_rec *r) {
//const char* hostname;
r->content_type = "text/html";
//ap_send_http_header(r);
//hostname = ap_get_remote_host(r->connection,r->per_dir_config,REMOTE_NAME);
ap_rputs("<HTML>\n" ,r);
ap_rputs("<HEAD>\n" ,r);
ap_rputs("<TITLE>Hello There</TITLE>\n" ,r);
ap_rputs("</HEAD>\n" ,r);
ap_rputs("<BODY>\n" ,r);
ap_rprintf(r,"<H1>Hello %s</H1>\n");
ap_rputs("Who would take this book seriously if the first example didn't\n",r);
ap_rputs("say \"hello world\"?\n" ,r);
ap_rputs("</BODY>\n" ,r);
ap_rputs("</HTML>\n" ,r);
return OK;
}
static void register_hooks(void)
{
static const char * const aszPre[]={ "mod_hello2.c",NULL };
ap_hook_access_checker(hello2_handler,NULL,NULL,APR_HOOK_MIDDLE);
// ap_hook_post_config(hello2_handler,NULL,NULL,APR_HOOK_MIDDLE);
ap_hook_translate_name(hello2_handler,aszPre,NULL,APR_HOOK_LAST);
};
module AP_MODULE_DECLARE_DATA hello2_module = {
STANDARD20_MODULE_STUFF,
NULL, /* create per-dir config structures */
NULL, /* merge per-dir config structures */
NULL, /* create per-server config structures */
NULL, /* merge per-server config structures */
NULL,
register_hooks
};
Grazie a tutti
qualcuno saprebbe indicarmi come procedere per la realizzazione di un modulo per Apache 2.0?
Al momento ho iniziato a leggere il libro Writing Apache Modules with Perl and C ma mi sono accorto che tutte le indicazioni si riferiscono alla versione 1.3 di Apache e da quello che ho capito nella versione 2.0 hanno cambiato tutte le Api, hanno introdotto gli Hook(di cui tutt'ora non ho capito niente :) ).
Nel libro che vi ho citato sopra con la versione 6 di Visual Studio fa creare un progetto di tipo Dll e poi lo fa mettere nella cartella modules di Apache. Questa tecnica sembra non funzionare con la versione Apache 2.0.
Sto lavorando in ambiente Win32 e vi invio il codice sorgente che ho provato ad eseguire. Il Codice compila ma nel momento in cui lo vado a caricare in apache tramite la direttiva nel file di configurazione
LoadModule hello2_module modules/mod_hello2.dll
<Location /ciao/funziona>
SetHandler hello2_module
</Location>
si blocca l'avviamento del server apache.
Il codive è questo:
#include "httpd.h"
#include "http_config.h"
#include "http_request.h"
#include "http_protocol.h"
#include "http_core.h"
#include "http_main.h"
#include "http_log.h"
#include "apr.h"
#include "ap_mpm.h"
#include "apr_strings.h"
#include "scoreboard.h"
/* file: mod_hello.c */
/* here's the content handler */
static int hello2_handler(request_rec *r) {
//const char* hostname;
r->content_type = "text/html";
//ap_send_http_header(r);
//hostname = ap_get_remote_host(r->connection,r->per_dir_config,REMOTE_NAME);
ap_rputs("<HTML>\n" ,r);
ap_rputs("<HEAD>\n" ,r);
ap_rputs("<TITLE>Hello There</TITLE>\n" ,r);
ap_rputs("</HEAD>\n" ,r);
ap_rputs("<BODY>\n" ,r);
ap_rprintf(r,"<H1>Hello %s</H1>\n");
ap_rputs("Who would take this book seriously if the first example didn't\n",r);
ap_rputs("say \"hello world\"?\n" ,r);
ap_rputs("</BODY>\n" ,r);
ap_rputs("</HTML>\n" ,r);
return OK;
}
static void register_hooks(void)
{
static const char * const aszPre[]={ "mod_hello2.c",NULL };
ap_hook_access_checker(hello2_handler,NULL,NULL,APR_HOOK_MIDDLE);
// ap_hook_post_config(hello2_handler,NULL,NULL,APR_HOOK_MIDDLE);
ap_hook_translate_name(hello2_handler,aszPre,NULL,APR_HOOK_LAST);
};
module AP_MODULE_DECLARE_DATA hello2_module = {
STANDARD20_MODULE_STUFF,
NULL, /* create per-dir config structures */
NULL, /* merge per-dir config structures */
NULL, /* create per-server config structures */
NULL, /* merge per-server config structures */
NULL,
register_hooks
};
Grazie a tutti