[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] r10232: Eased up geoip-configuration by introducing a GeoIPConfig-cl (torflow/trunk/TorCtl)
- To: or-cvs@xxxxxxxxxxxxx
- Subject: [or-cvs] r10232: Eased up geoip-configuration by introducing a GeoIPConfig-cl (torflow/trunk/TorCtl)
- From: renner@xxxxxxxx
- Date: Sun, 20 May 2007 18:20:15 -0400 (EDT)
- Delivered-to: archiver@seul.org
- Delivered-to: or-cvs-outgoing@seul.org
- Delivered-to: or-cvs@seul.org
- Delivery-date: Sun, 20 May 2007 18:20:39 -0400
- Reply-to: or-dev@xxxxxxxxxxxxx
- Sender: owner-or-cvs@xxxxxxxxxxxxx
Author: renner
Date: 2007-05-20 18:20:09 -0400 (Sun, 20 May 2007)
New Revision: 10232
Modified:
torflow/trunk/TorCtl/GeoIPSupport.py
torflow/trunk/TorCtl/PathSupport.py
Log:
Eased up geoip-configuration by introducing a GeoIPConfig-class and added ExcludeCountriesRestriction
to exclude a list of countries from route selection.
Modified: torflow/trunk/TorCtl/GeoIPSupport.py
===================================================================
--- torflow/trunk/TorCtl/GeoIPSupport.py 2007-05-20 20:16:45 UTC (rev 10231)
+++ torflow/trunk/TorCtl/GeoIPSupport.py 2007-05-20 22:20:09 UTC (rev 10232)
@@ -73,11 +73,24 @@
# Select method to get the country_code here
self.country_code = geoip.country_code_by_addr(self.get_ip_dotted())
#self.country_code = get_country_from_record(self.get_ip_dotted())
- self.continent = None
- if self.country_code == None:
+ if self.country_code == None:
plog("WARN", self.nickname + ": Country code not found")
+ self.continent = None
else: self.continent = get_continent(self.country_code)
# Convert long int back to dotted quad string
def get_ip_dotted(self):
return socket.inet_ntoa(struct.pack('>I', self.ip))
+
+# Class to configure GeoIP-based path building
+class GeoIPConfig:
+ def __init__(self, unique_countries, src_country, crossings, excludes):
+ # Do not use a country twice in a route
+ self.unique_countries = unique_countries
+ # Pass the country we are staying at for getting
+ # Entry in src_country, None if not wished
+ self.src_country = src_country
+ # Configure max continent crossings in one path
+ self.max_cont_crossings = crossings
+ # List of countries to not use in routes
+ self.excludes = excludes
Modified: torflow/trunk/TorCtl/PathSupport.py
===================================================================
--- torflow/trunk/TorCtl/PathSupport.py 2007-05-20 20:16:45 UTC (rev 10231)
+++ torflow/trunk/TorCtl/PathSupport.py 2007-05-20 22:20:09 UTC (rev 10232)
@@ -313,11 +313,21 @@
def r_is_ok(self, r):
return r.country_code == self.country_code
+# Exclude a list of country_codes
+class ExcludeCountriesRestriction(NodeRestriction):
+ def __init__(self, countries):
+ self.countries = countries
+
+ def r_is_ok(self, r):
+ return not (r.country_code in self.countries)
+
# Ensure every router to have distinct country
class UniqueCountryRestriction(PathRestriction):
def r_is_ok(self, path, router):
for r in path:
if router.country_code == r.country_code:
+ # Exceptionally allow US because of so many states
+ if router.country_code == "US": return True
return False
return True
@@ -433,7 +443,7 @@
"""
def __init__(self, pathlen, order_exits,
percent_fast, percent_skip, min_bw, use_all_exits,
- uniform, use_exit, use_guards, use_geoip=False):
+ uniform, use_exit, use_guards, geoip_config=None):
self.__ordered_exit_gen = None
self.pathlen = pathlen
self.order_exits = order_exits
@@ -444,8 +454,7 @@
self.uniform = uniform
self.exit_name = use_exit
self.use_guards = use_guards
- # Replace with a geoip-config object?
- self.use_geoip = use_geoip
+ self.geoip_config = geoip_config
def reconfigure(self, sorted_r):
if self.use_all_exits:
@@ -484,20 +493,27 @@
self.exit_rstr.add_restriction(NickRestriction(self.exit_name))
# GeoIP configuration
- # TODO: Make configurable, config-object?
- if self.use_geoip:
- # Restrictions for Entry
+ if self.geoip_config:
+ # Every node needs country_code
entry_rstr.add_restriction(CountryCodeRestriction())
- # First hop in our country
- #entry_rstr.add_restriction(CountryRestriction("DE"))
- # Middle
mid_rstr.add_restriction(CountryCodeRestriction())
- # Exit
self.exit_rstr.add_restriction(CountryCodeRestriction())
- # Path
- self.path_rstr.add_restriction(UniqueCountryRestriction())
+ # First hop in our country?
+ src = self.geoip_config.src_country
+ if src:
+ entry_rstr.add_restriction(CountryRestriction(src))
+ # Excludes
+ plog("INFO", "Excluded countries: " + str(self.geoip_config.excludes))
+ if len(self.geoip_config.excludes) > 0:
+ entry_rstr.add_restriction(ExcludeCountriesRestriction(self.geoip_config.excludes))
+ mid_rstr.add_restriction(ExcludeCountriesRestriction(self.geoip_config.excludes))
+ self.exit_rstr.add_restriction(ExcludeCountriesRestriction(self.geoip_config.excludes))
+ # Unique countries?
+ if self.geoip_config.unique_countries:
+ self.path_rstr.add_restriction(UniqueCountryRestriction())
# Specify max number of crossings here
- self.path_rstr.add_restriction(ContinentRestriction(1))
+ n = self.geoip_config.max_cont_crossings
+ self.path_rstr.add_restriction(ContinentRestriction(n))
# This is kind of hokey..
if self.order_exits: