Updated header_handler in apache2filter and apache_hooks

This commit is contained in:
Arnaud Le Blanc 2008-11-13 13:41:08 +00:00
parent 494dbdb1c1
commit aaaf67e19e
2 changed files with 78 additions and 44 deletions

View file

@ -34,7 +34,7 @@ static void php_save_umask(void);
static void php_restore_umask(void);
static int sapi_apache_read_post(char *buffer, uint count_bytes TSRMLS_DC);
static char *sapi_apache_read_cookies(TSRMLS_D);
static int sapi_apache_header_handler(sapi_header_struct *sapi_header, sapi_headers_struct *sapi_headers TSRMLS_DC);
static int sapi_apache_header_handler(sapi_header_struct *sapi_header, sapi_header_op_enum op, sapi_headers_struct *sapi_headers TSRMLS_DC);
static int sapi_apache_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC);
static int send_php(request_rec *r, int display_source_mode, char *filename);
static int send_parsed_php(request_rec * r);
@ -308,35 +308,54 @@ static char *sapi_apache_read_cookies(TSRMLS_D)
/* {{{ sapi_apache_header_handler
*/
static int sapi_apache_header_handler(sapi_header_struct *sapi_header, sapi_headers_struct *sapi_headers TSRMLS_DC)
static int sapi_apache_header_handler(sapi_header_struct *sapi_header, sapi_header_op_enum op, sapi_headers_struct *sapi_headers TSRMLS_DC)
{
char *header_name, *header_content, *p;
request_rec *r = (request_rec *) SG(server_context);
header_name = sapi_header->header;
header_content = p = strchr(header_name, ':');
if (!p) {
efree(sapi_header->header);
if(!r) {
return 0;
}
*p = 0;
do {
header_content++;
} while (*header_content==' ');
switch(op) {
case SAPI_HEADER_DELETE_ALL:
clear_table(r->headers_out);
return 0;
if (!strcasecmp(header_name, "Content-Type")) {
r->content_type = pstrdup(r->pool, header_content);
} else if (!strcasecmp(header_name, "Set-Cookie")) {
table_add(r->headers_out, header_name, header_content);
} else {
table_set(r->headers_out, header_name, header_content);
case SAPI_HEADER_DELETE:
table_unset(r->headers_out, sapi_header->header);
return 0;
case SAPI_HEADER_ADD:
case SAPI_HEADER_REPLACE:
header_name = sapi_header->header;
header_content = p = strchr(header_name, ':');
if (!p) {
return 0;
}
*p = 0;
do {
header_content++;
} while (*header_content==' ');
if (!strcasecmp(header_name, "Content-Type")) {
r->content_type = pstrdup(r->pool, header_content);
} else if (!strcasecmp(header_name, "Set-Cookie")) {
table_add(r->headers_out, header_name, header_content);
} else if (op == SAPI_HEADER_REPLACE) {
table_set(r->headers_out, header_name, header_content);
} else {
table_add(r->headers_out, header_name, header_content);
}
*p = ':'; /* a well behaved header handler shouldn't change its original arguments */
return SAPI_HEADER_ADD;
default:
return 0;
}
*p = ':'; /* a well behaved header handler shouldn't change its original arguments */
return SAPI_HEADER_ADD;
}
/* }}} */