httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Rian Hunter <r...@MIT.EDU>
Subject Re: mod_smtpd design.
Date Fri, 01 Jul 2005 13:41:18 GMT
Ben Laurie wrote:
> Another approach still would require a fairly large change to the core 
> and many modules, but it strikes me as a better option...
> 
> struct http_data {
>     .
>     .
>     .
> };
> 
> struct smtp_data {
>     .
>     .
>     .
> };
> 
> struct request_rec {
>     .
>     . /* common stuff */
>     .
>     struct http_data *http;
>     struct smtp_data *smtp;
> }
> 

If there was going to be a large change to core, request_rec and friends 
how about:

struct request_rec {
	/* common stuff */
	char *protocol_name; // different from r->protocol,
	                     // but maybe doesn't have to be
	struct ap_conf_vector_t *request_config;
};

The request_config vector would store all the protocol specific data. 
Protocol_name would be so modules new what they were dealing with. To 
retrieve protocol specific data define this in each protocol module:

smtpd_request_rec *get_smtpd_request(request_rec *r) {
	return ap_get_module_config(r->request_config, &MODULE_NAME);
}

Then in handler modules:

type misc_smtp_handler(request_rec *r) {
	smtpd_request_rec *smtp_data;

	if (strncmp("http", r->protocol_name, 4)) {
		// decline to handle, this module doesn't handle
		// http requests.
	}
	//then get smtpd specific data
	smtp_data = get_smtpd_request(r);

	// do some handlin'
}

The advantage to this approach is a less bulky (but more all 
encompassing) request_rec with support for an arbitrary amount of 
protocols and protocol specific data.
-rian

Mime
View raw message