OSDN Git Service

* Added Features.
[modchxj/mod_chxj.git] / src / mod_chxj.c
index fb096eb..1432630 100644 (file)
@@ -262,6 +262,12 @@ chxj_headers_fixup(request_rec *r)
     else {
       char *client_ip = (char *)apr_table_get(r->headers_in, CHXJ_HEADER_ORIG_CLIENT_IP);
       if (client_ip) {
+        if (dconf->post_log) {
+          apr_table_setn(r->subprocess_env, dconf->post_log, dconf->post_log);
+        }
+        else {
+          apr_table_setn(r->subprocess_env, "chxj-post-log", "chxj-post-log");
+        }
         apr_sockaddr_t *address = NULL;
         apr_status_t rv = apr_sockaddr_info_get(&address, ap_get_server_name(r), APR_UNSPEC, ap_get_server_port(r), 0, r->pool);
         if (rv != APR_SUCCESS) {
@@ -478,6 +484,7 @@ chxj_convert(request_rec *r, const char **src, apr_size_t *len, device_table *sp
 static void
 s_convert_guid_parameter_to_header(request_rec *r, const char *param, device_table *spec)
 {
+  DBG(r, "REQ[%X] start s_convert_guid_parameter() param:[%s]", (apr_size_t)(unsigned int)r, param);
   if (strcasecmp(param, "guid") == 0) {
     switch(spec->html_spec_type) {
     case CHXJ_SPEC_XHtml_Mobile_1_0:
@@ -501,6 +508,7 @@ s_convert_guid_parameter_to_header(request_rec *r, const char *param, device_tab
       break;
     }
   }
+  DBG(r, "REQ[%X] end s_convert_guid_parameter()", (apr_size_t)(unsigned int)r);
 }
 
 /**
@@ -579,7 +587,6 @@ chxj_convert_input_header(request_rec *r,chxjconvrule_entry *entryp, device_tabl
     value = apr_strtok(NULL, "=", &vstate);
     if (! name) continue;
     name = chxj_safe_to_jreserved_tag(r, name);
-
     if (strncasecmp(name, "_chxj", 5) != 0 && strncasecmp(name, "%5Fchxj", sizeof("%5Fchxj")-1) != 0) {
       if (strlen(result) != 0) 
         result = apr_pstrcat(r->pool, result, "&", NULL);
@@ -616,10 +623,13 @@ chxj_convert_input_header(request_rec *r,chxjconvrule_entry *entryp, device_tabl
         result = apr_pstrcat(r->pool, result, dname, "=", dvalue, NULL);
       }
       else {
-        if (strcmp(name, pair_sv) != 0)
+        s_convert_guid_parameter_to_header(r, name, spec);
+        if (strcmp(name, pair_sv) != 0) {
           result = apr_pstrcat(r->pool, result, name, "=", value, NULL);
-        else
+        } 
+        else {
           result = apr_pstrcat(r->pool, result, name, NULL);
+        }
       }
     }
     else
@@ -1226,6 +1236,8 @@ chxj_output_filter(ap_filter_t *f, apr_bucket_brigade *bb)
             if (! ap_is_HTTP_REDIRECT(r->status)) {
               r->status = HTTP_MOVED_TEMPORARILY;
             }
+          }
+          if (ctx->len && ap_is_HTTP_REDIRECT(r->status)) {
             ctx->buffer = apr_pstrdup(pool, "");
             ctx->len    = 0;
             ap_set_content_length(r, (apr_off_t)ctx->len);
@@ -1550,7 +1562,11 @@ chxj_translate_name(request_rec *r)
   DBG(r, "REQ[%X] START REQUEST (uri:[%s] args:[%s])", (unsigned int)(apr_size_t)r, r->unparsed_uri, r->args ? r->args : "");
   DBG(r, "REQ[%X] ", (unsigned int)(apr_size_t)r);
   DBG(r, "REQ[%X] =======================================================================", (unsigned int)(apr_size_t)r);
+#if 0
   return chxj_trans_name(r);
+#else
+  return DECLINED;
+#endif
 }
 
 
@@ -1704,6 +1720,7 @@ chxj_create_per_dir_config(apr_pool_t *p, char *arg)
   conf->forward_url_base = NULL;
   conf->forward_server_ip = NULL;
   conf->allowed_cookie_domain = NULL;
+  conf->post_log              = NULL;
 
   if (arg == NULL) {
     conf->dir                  = NULL;
@@ -1749,6 +1766,7 @@ chxj_merge_per_dir_config(apr_pool_t *p, void *basev, void *addv)
   mrg->forward_url_base = NULL;
   mrg->forward_server_ip = NULL;
   mrg->allowed_cookie_domain = NULL;
+  mrg->post_log         = NULL;
 
   mrg->dir = apr_pstrdup(p, add->dir);
 
@@ -1974,6 +1992,12 @@ chxj_merge_per_dir_config(apr_pool_t *p, void *basev, void *addv)
   else {
     mrg->allowed_cookie_domain = base->allowed_cookie_domain;
   }
+  if (add->post_log) {
+    mrg->post_log = add->post_log;
+  }
+  else {
+    mrg->post_log = base->post_log;
+  }
   return mrg;
 }
 
@@ -2828,6 +2852,23 @@ cmd_set_new_line_type(
   return NULL;
 }
 
+static const char *
+cmd_post_log_env(
+  cmd_parms   *cmd, 
+  void        *mconfig, 
+  const char  *arg)
+{
+  mod_chxj_config  *dconf;
+  if (strlen(arg) > 255)
+    return "mod_chxj: ChxjPostLogEnv is too long.";
+
+  dconf = (mod_chxj_config *)mconfig;
+
+  dconf->post_log = apr_pstrdup(cmd->pool, arg);
+
+  return NULL;
+}
+
 
 static const command_rec cmds[] = {
   AP_INIT_TAKE1(
@@ -2984,6 +3025,12 @@ static const command_rec cmds[] = {
     NULL,
     OR_ALL,
     "Domain that permits parameter addition for cookie besides hostname.(Default:hostname Only)"),
+  AP_INIT_TAKE1(
+    "ChxjPostLogEnv",
+    cmd_post_log_env,
+    NULL,
+    OR_ALL,
+    "for CustomLog directive. mod_chxj's internal POST log environment name.(Default:chxj-post-log)"),
   {NULL}
 };