]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
List unresolved requests in geoip stats as country '??'.
authorKarsten Loesing <karsten.loesing@gmx.net>
Thu, 9 Jul 2009 13:34:53 +0000 (15:34 +0200)
committerKarsten Loesing <karsten.loesing@gmx.net>
Thu, 9 Jul 2009 13:34:53 +0000 (15:34 +0200)
ChangeLog
src/or/geoip.c

index c0a1a9e0cc9a1043fbe429f58c48242c7a719032..3c778c86432d1693864efb3ba44ca97df68dd79d 100644 (file)
--- 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
index 13a6a2850025460acfc34efb46a9aac1660acb32..13b9b7d0f03fa030a2c0f24527bef4e6dd522efe 100644 (file)
@@ -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;