[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[or-cvs] r12846: Support raw IP-to-country as well as postprocessed format. I (in tor/trunk: . doc src/or)



Author: nickm
Date: 2007-12-17 17:44:16 -0500 (Mon, 17 Dec 2007)
New Revision: 12846

Modified:
   tor/trunk/
   tor/trunk/doc/TODO
   tor/trunk/src/or/geoip.c
   tor/trunk/src/or/or.h
   tor/trunk/src/or/router.c
Log:
 r15531@tombo:  nickm | 2007-12-17 17:19:24 -0500
 Support raw IP-to-country as well as postprocessed format.  Include GEOIP summary in extrainfo of bridges.



Property changes on: tor/trunk
___________________________________________________________________
 svk:merge ticket from /tor/trunk [r15531] on d9e39d38-0f13-419c-a857-e10a0ce2aa0c

Modified: tor/trunk/doc/TODO
===================================================================
--- tor/trunk/doc/TODO	2007-12-17 22:44:11 UTC (rev 12845)
+++ tor/trunk/doc/TODO	2007-12-17 22:44:16 UTC (rev 12846)
@@ -31,18 +31,18 @@
   . geoip caching and publishing for bridges
 R   . spec
     - Implement
-      . Code to load a geoip file from disk
+      o Code to load a geoip file from disk
         o Truncated format
-        - Full format.
+        o Full format.
         o Actually invoke
       o Code to store a GEOIP file in memory.
       o Code to remember client IPs.
-      . Code to generate history lines
-        - Make history lines match spec.
+      o Code to generate history lines
       - Controller interface
       - Track consecutive time up, not time since last-forgotten IP.
       - Add log lines.
     - Tests
+    - Mention in dir-spec.txt
     d let Vidalia use the geoip data too rather than doing its own
       anonymized queries
   o bridge address disbursal strategies

Modified: tor/trunk/src/or/geoip.c
===================================================================
--- tor/trunk/src/or/geoip.c	2007-12-17 22:44:11 UTC (rev 12845)
+++ tor/trunk/src/or/geoip.c	2007-12-17 22:44:16 UTC (rev 12846)
@@ -81,10 +81,15 @@
   geoip_entries = smartlist_create();
   country_idxplus1_by_lc_code = strmap_new();
   while (!feof(f)) {
+    char buf[512];
     unsigned int low, high;
     char b[3];
-    if (fscanf(f, "%u,%u,%2s", &low, &high, b) == 3) {
+    if (fgets(buf, sizeof(buf), f) == NULL)
+      break;
+    if (sscanf(buf,"%u,%u,%2s", &low, &high, b) == 3) {
       geoip_add_entry(low, high, b);
+    } else if (sscanf(buf,"\"%u\",\"%u\",\"%2s\",", &low, &high, b) == 3) {
+      geoip_add_entry(low, high, b);
     }
   }
   /*XXXX020 abort and return -1 if */
@@ -200,6 +205,12 @@
 #define MIN_IPS_TO_NOTE_ANYTHING 16
 #define IP_GRANULARITY 8
 
+time_t
+geoip_get_history_start(void)
+{
+  return client_history_starts;
+}
+
 char *
 geoip_get_client_history(time_t now)
 {

Modified: tor/trunk/src/or/or.h
===================================================================
--- tor/trunk/src/or/or.h	2007-12-17 22:44:11 UTC (rev 12845)
+++ tor/trunk/src/or/or.h	2007-12-17 22:44:16 UTC (rev 12846)
@@ -3208,6 +3208,7 @@
 int geoip_is_loaded(void);
 void geoip_note_client_seen(uint32_t addr, time_t now);
 void geoip_remove_old_clients(time_t cutoff);
+time_t geoip_get_history_start(void);
 char *geoip_get_client_history(time_t now);
 void geoip_free_all(void);
 

Modified: tor/trunk/src/or/router.c
===================================================================
--- tor/trunk/src/or/router.c	2007-12-17 22:44:11 UTC (rev 12845)
+++ tor/trunk/src/or/router.c	2007-12-17 22:44:16 UTC (rev 12846)
@@ -1694,6 +1694,7 @@
 extrainfo_dump_to_string(char *s, size_t maxlen, extrainfo_t *extrainfo,
                          crypto_pk_env_t *ident_key)
 {
+  or_options_t *options = get_options();
   char identity[HEX_DIGEST_LEN+1];
   char published[ISO_TIME_LEN+1];
   char digest[DIGEST_LEN];
@@ -1708,14 +1709,32 @@
 
   result = tor_snprintf(s, maxlen,
                         "extra-info %s %s\n"
-                        "published %s\n%s"
-                        "router-signature\n",
+                        "published %s\n%s",
                         extrainfo->nickname, identity,
                         published, bandwidth_usage);
   tor_free(bandwidth_usage);
   if (result<0)
     return -1;
+
+  if (options->BridgeRelay && options->BridgeRecordUsageByCountry) {
+    char *geoip_summary = geoip_get_client_history(time(NULL));
+    if (geoip_summary) {
+      char geoip_start[ISO_TIME_LEN+1];
+      format_iso_time(geoip_start, geoip_get_history_start());
+      result = tor_snprintf(s+strlen(s), maxlen-strlen(s),
+                            "geoip-start-time %s\n"
+                            "geoip-client-origins %s\n",
+                            geoip_start, geoip_summary);
+      tor_free(geoip_summary);
+      if (result<0)
+        return -1;
+    }
+  }
+
+
   len = strlen(s);
+  strlcat(s+len, "router-signature\n", maxlen-len);
+  len += strlen(s+len);
   if (router_get_extrainfo_hash(s, digest)<0)
     return -1;
   if (router_append_dirobj_signature(s+len, maxlen-len, digest, ident_key)<0)