From fa2374a16360cb3d9bfb18827c574c8f44345925 Mon Sep 17 00:00:00 2001 From: Karsten Loesing Date: Thu, 9 Jul 2009 15:34:53 +0200 Subject: [PATCH] List unresolved requests in geoip stats as country '??'. --- ChangeLog | 3 ++- src/or/geoip.c | 11 ++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index c0a1a9e0cc..3c778c8643 100644 --- a/ChangeLog +++ b/ChangeLog @@ -16,7 +16,8 @@ Changes in version 0.2.2.1-alpha - 2009-??-?? to make sure nothing writes beyond the end of an area. This might help debug some conceivable causes of bug 930. - Directories that are configured with the --enable-geoip-stats flag - now write their GeoIP stats to disk exactly every 24 hours. + now write their GeoIP stats to disk exactly every 24 hours. Also, + unresolved requests are listed with country code '??'. - Exit nodes can write statistics on the number of exit streams and transferred bytes per port to disk every 24 hours. To enable this, run configure with the --enable-exit-stats option, and set diff --git a/src/or/geoip.c b/src/or/geoip.c index 13a6a28500..13b9b7d0f0 100644 --- a/src/or/geoip.c +++ b/src/or/geoip.c @@ -188,7 +188,14 @@ geoip_load_file(const char *filename, or_options_t *options) return -1; } if (!geoip_countries) { + geoip_country_t *geoip_unresolved; geoip_countries = smartlist_create(); + /* Add a geoip_country_t for requests that could not be resolved to a + * country as first element (index 0) to geoip_countries. */ + geoip_unresolved = tor_malloc_zero(sizeof(geoip_country_t)); + strlcpy(geoip_unresolved->countrycode, "??", + sizeof(geoip_unresolved->countrycode)); + smartlist_add(geoip_countries, geoip_unresolved); country_idxplus1_by_lc_code = strmap_new(); } if (geoip_entries) { @@ -375,6 +382,8 @@ geoip_note_client_seen(geoip_client_action_t action, if (action == GEOIP_CLIENT_NETWORKSTATUS || action == GEOIP_CLIENT_NETWORKSTATUS_V2) { int country_idx = geoip_get_country_by_ip(addr); + if (country_idx < 0) + country_idx = 0; /** unresolved requests are stored at index 0. */ if (country_idx >= 0 && country_idx < smartlist_len(geoip_countries)) { geoip_country_t *country = smartlist_get(geoip_countries, country_idx); if (action == GEOIP_CLIENT_NETWORKSTATUS) @@ -505,7 +514,7 @@ geoip_get_client_history(time_t now, geoip_client_action_t action) continue; country = geoip_get_country_by_ip((*ent)->ipaddr); if (country < 0) - continue; + country = 0; /** unresolved requests are stored at index 0. */ tor_assert(0 <= country && country < n_countries); ++counts[country]; ++total; -- 2.11.4.GIT