OSDN Git Service

* Changed spec cache function
authorAtsushi Konno <konn@users.sourceforge.jp>
Thu, 10 Mar 2011 10:03:44 +0000 (19:03 +0900)
committerAtsushi Konno <konn@users.sourceforge.jp>
Thu, 10 Mar 2011 10:03:44 +0000 (19:03 +0900)
src/chxj_specified_device.c
src/mod_chxj.c

index 61cd682..d7b8610 100644 (file)
@@ -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){
index 5e6b7ad..a3f5ae0 100644 (file)
@@ -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__);