From e922ee6405e761a85d06c5f62b4c0d1028b91854 Mon Sep 17 00:00:00 2001 From: Atsushi Konno Date: Thu, 10 Mar 2011 19:03:44 +0900 Subject: [PATCH] * Changed spec cache function --- src/chxj_specified_device.c | 10 +++++----- src/mod_chxj.c | 23 ++++++++++++++++++++--- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/chxj_specified_device.c b/src/chxj_specified_device.c index 61cd6824..d7b86108 100644 --- a/src/chxj_specified_device.c +++ b/src/chxj_specified_device.c @@ -104,12 +104,12 @@ chxj_specified_device(request_rec *r, const char *user_agent) DBG(r, "REQ[%X] start %s()", TO_ADDR(r),__func__); request_conf = (mod_chxj_req_config *)chxj_get_module_config(r->request_config, &chxj_module); - if (request_conf && request_conf->spec && request_conf->user_agent && strcmp(request_conf->user_agent, user_agent) == 0) { - DBG(r, "REQ[%x] Use spec cache.", TO_ADDR(r)); - DBG(r, "REQ[%x] end %s() (Exist spec cache)", TO_ADDR(r), __func__); - return request_conf->spec; + if (user_agent) { + request_conf->user_agent = apr_pstrdup(r->pool, user_agent); + } + else { + request_conf->user_agent = ""; } - request_conf->user_agent = user_agent; conf = chxj_get_module_config(r->per_dir_config, &chxj_module); if(! user_agent){ diff --git a/src/mod_chxj.c b/src/mod_chxj.c index 5e6b7adf..a3f5ae09 100644 --- a/src/mod_chxj.c +++ b/src/mod_chxj.c @@ -429,6 +429,7 @@ chxj_convert(request_rec *r, const char **src, apr_size_t *len, device_table *sp char *tmp; cookie_t *cookie; mod_chxj_config *dconf; + mod_chxj_req_config *request_conf; chxjconvrule_entry *entryp; DBG(r,"REQ[%X] start %s()", TO_ADDR(r),__func__); @@ -438,6 +439,7 @@ chxj_convert(request_rec *r, const char **src, apr_size_t *len, device_table *sp dst = apr_pstrcat(r->pool, (char *)*src, NULL); dconf = chxj_get_module_config(r->per_dir_config, &chxj_module); + request_conf = chxj_get_module_config(r->request_config, &chxj_module); entryp = chxj_apply_convrule(r, dconf->convrules); @@ -471,6 +473,9 @@ chxj_convert(request_rec *r, const char **src, apr_size_t *len, device_table *sp /* again */ spec = chxj_specified_device(r, user_agent); } + else { + spec = request_conf->spec; + } /* * save cookie. @@ -1477,6 +1482,7 @@ static apr_status_t chxj_input_handler(request_rec *r) { mod_chxj_config *dconf; + mod_chxj_req_config *request_conf; chxjconvrule_entry *entryp = NULL; device_table *spec = NULL; char *post_data = NULL; @@ -1495,12 +1501,18 @@ chxj_input_handler(request_rec *r) apr_pool_create(&pool, r->pool); dconf = chxj_get_module_config(r->per_dir_config, &chxj_module); + request_conf = chxj_get_module_config(r->request_config, &chxj_module); user_agent = (char*)apr_table_get(r->headers_in, CHXJ_HTTP_USER_AGENT); if (!user_agent) { user_agent = (char*)apr_table_get(r->headers_in, HTTP_USER_AGENT); } - spec = chxj_specified_device(r, user_agent); - entryp = chxj_apply_convrule(r, dconf->convrules); + if (user_agent && request_conf->user_agent && strcmp(user_agent, request_conf->user_agent)) { + spec = chxj_specified_device(r, user_agent); + } + else { + spec = request_conf->spec; + } + entryp = chxj_apply_convrule(r, dconf->convrules); post_data = apr_pstrdup(pool, ""); if (ap_setup_client_block(r, REQUEST_CHUNKED_DECHUNK) == OK) { @@ -1744,7 +1756,12 @@ chxj_insert_filter(request_rec *r) return; } - spec = chxj_specified_device(r, user_agent); + if (user_agent && req_conf->user_agent && strcmp(user_agent, req_conf->user_agent)) { + spec = chxj_specified_device(r, user_agent); + } + else { + spec = req_conf->spec; + } entryp = chxj_apply_convrule(r, dconf->convrules); if (!entryp) { DBG(r, "REQ[%X] end %s()", TO_ADDR(r),__func__); -- 2.11.0