From 2f3204dcc69065543986259c167e13382b92a6fa Mon Sep 17 00:00:00 2001 From: Atsushi Konno Date: Sun, 24 Apr 2011 19:49:15 +0900 Subject: [PATCH] * Fixed bug. - google analytics need Host header. --- include/mod_chxj.h | 1 + src/chxj_google.c | 25 ++++++++++++++++++++++++- src/chxj_serf.c | 1 + src/mod_chxj.c | 25 +++++++++++++++++++++++++ 4 files changed, 51 insertions(+), 1 deletion(-) diff --git a/include/mod_chxj.h b/include/mod_chxj.h index 06dd1326..c9cc0d6c 100755 --- a/include/mod_chxj.h +++ b/include/mod_chxj.h @@ -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 { diff --git a/src/chxj_google.c b/src/chxj_google.c index 44f33ee8..72b681c1 100644 --- a/src/chxj_google.c +++ b/src/chxj_google.c @@ -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__); } diff --git a/src/chxj_serf.c b/src/chxj_serf.c index fef38e77..0f4489d0 100644 --- a/src/chxj_serf.c +++ b/src/chxj_serf.c @@ -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; diff --git a/src/mod_chxj.c b/src/mod_chxj.c index 4a174400..c3f40573 100644 --- a/src/mod_chxj.c +++ b/src/mod_chxj.c @@ -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}, }; -- 2.11.0