OSDN Git Service

* Fixed bug.
authorAtsushi Konno <konn@users.sourceforge.jp>
Sun, 24 Apr 2011 10:49:15 +0000 (19:49 +0900)
committerAtsushi Konno <konn@users.sourceforge.jp>
Sun, 24 Apr 2011 10:49:15 +0000 (19:49 +0900)
    - google analytics need Host header.

include/mod_chxj.h
src/chxj_google.c
src/chxj_serf.c
src/mod_chxj.c

index 06dd132..c9cc0d6 100755 (executable)
@@ -399,6 +399,7 @@ struct mod_chxj_config {
   int                   use_google_analytics;
   char                  *google_analytics_account;
   char                  *google_analytics_target;   /* i.e. /ga.pl */
+  char                  *google_analytics_debug;    /* debug filename */
 };
 
 struct mod_chxj_req_config_t {
index 44f33ee..72b681c 100644 (file)
@@ -22,6 +22,7 @@
 
 #include "apr_uuid.h"
 #include "apr_md5.h"
+#include "apr_tables.h"
 
 
 char *
@@ -119,6 +120,7 @@ chxj_google_analytics_get_image_url(request_rec *r, const char *pagetitle)
 #define DL_COOKIE_PATH "/"
 #define DL_COOKIE_USER_PERSISTENCE (63072000)
 #define DL_UTM_GIF_LOCATION "http://www.google-analytics.com/__utm.gif"
+#define DL_GOOGLE_HOST "www.google-analytics.com"
 
 
 // 1x1 transparent GIF
@@ -242,12 +244,33 @@ s_send_request_to_google_analytics(request_rec *r, const char *utm_url)
   apr_pool_t *ppool;
   apr_size_t response_len;
   char *data;
+  int ii;
+  request_rec *get_r;
+  mod_chxj_config *conf;
 
   DBG(r, "REQ[%X] start %s()", TO_ADDR(r),__func__);
   apr_pool_create(&ppool, r->pool);
+  get_r = apr_palloc(ppool, sizeof(request_rec));
+  memset(get_r, 0, sizeof(request_rec));
+  get_r->pool = ppool;
+  get_r->headers_in = apr_table_make(ppool, 4);
+  get_r->headers_out = apr_table_make(ppool, 4);
   
+  apr_table_setn(get_r->headers_in, "User-Agent",apr_table_get(r->headers_in, "User-Agent"));
+  apr_table_setn(get_r->headers_in, "Host", DL_GOOGLE_HOST);
+
   // ichiou data ni totte oku. tsukawanai kedo.
-  data = chxj_serf_get(r, ppool, utm_url, 0, &response_len);
+  data = chxj_serf_get(get_r, ppool, utm_url, 0, &response_len);
+  DBG(r, "REQ[%X] response from google:[%s]", TO_ADDR(r), data);
+  conf = chxj_get_module_config(r->per_dir_config, &chxj_module);
+  if (conf->google_analytics_debug && *conf->google_analytics_debug) {
+    FILE *fp;
+    if ((fp = fopen(conf->google_analytics_debug, "w")) != NULL) {
+      fwrite(data, response_len, 1, fp);
+      fclose(fp);
+    }
+  }
+  
   DBG(r, "REQ[%X] end %s()", TO_ADDR(r),__func__);
 }
 
index fef38e7..0f4489d 100644 (file)
@@ -383,6 +383,7 @@ default_chxj_serf_get(request_rec *r, apr_pool_t *ppool, const char *url_path, i
   else {
     ret = apr_pstrdup(ppool, "");
   }
+  *response_len = handler_ctx.response_len;
   if (set_headers_flag) {
     r->headers_out = apr_table_copy(pool, handler_ctx.headers_out);
     *response_len = handler_ctx.response_len;
index 4a17440..c3f4057 100644 (file)
@@ -2122,6 +2122,7 @@ chxj_create_per_dir_config(apr_pool_t *p, char *arg)
   conf->use_google_analytics = 0;
   conf->google_analytics_account = NULL;
   conf->google_analytics_target = NULL;
+  conf->google_analytics_debug = NULL;
 
   return conf;
 }
@@ -2481,6 +2482,12 @@ chxj_merge_per_dir_config(apr_pool_t *p, void *basev, void *addv)
   else{
     mrg->google_analytics_target = base->google_analytics_target;
   }
+  if (add->google_analytics_debug){
+    mrg->google_analytics_debug = add->google_analytics_debug;
+  }
+  else{
+    mrg->google_analytics_debug = base->google_analytics_debug;
+  }
 
   return mrg;
 }
@@ -3570,6 +3577,17 @@ cmd_google_analytics_target(cmd_parms *parms, void *mconfig, const char *arg)
   conf->google_analytics_target = apr_pstrdup(parms->pool, arg);
   return NULL;
 }
+static const char *
+cmd_google_analytics_debug(cmd_parms *parms, void *mconfig, const char *arg)
+{
+  mod_chxj_config *conf;
+  if (strlen(arg) > 256){
+    return "mod_chxj: set ChxjGoogleAnalyticsDebug is too long.";
+  }
+  conf = (mod_chxj_config *)mconfig;
+  conf->google_analytics_debug = apr_pstrdup(parms->pool, arg);
+  return NULL;
+}
 
 
 static const command_rec cmds[] = {
@@ -3807,6 +3825,13 @@ static const command_rec cmds[] = {
     OR_ALL,
     "Set img target for Google Analytics. i.e. `/ga.pl'"
    ),
+  AP_INIT_TAKE1(
+    "ChxjGoogleAnalyticsDebug",
+    cmd_google_analytics_debug,
+    NULL,
+    OR_ALL,
+    "Set filename which is outputed response from google analytics."
+   ),
   {NULL,{NULL},NULL,0,0,NULL},
 };