def __str__(self):
return repr(self.message)
-version = versions.Version('apt-p2p', 0, 0, 0)
+version = versions.Version('apt-p2p', 0, 1, 2)
# Set the home parameter
home = os.path.expandvars('${HOME}')
# Set this to 0 to not limit the upload bandwidth.
'UPLOAD_LIMIT': '0',
+ # The minimum number of peers before the mirror is not used.
+ # If there are fewer peers than this for a file, the mirror will also be
+ # used to speed up the download. Set to 0 to never use the mirror if
+ # there are peers.
+ 'MIN_DOWNLOAD_PEERS': '3',
+
# Directory to store the downloaded files in
'CACHE_DIR': home + '/.apt-p2p/cache',
# for everybody to download
'OTHER_DIRS': """""",
- # User name to try and run as
- 'USERNAME': '',
-
# Whether it's OK to use an IP address from a known local/private range
'LOCAL_OK': 'no',
+ # Whether a remote peer can access the statistics page
+ 'REMOTE_STATS': 'yes',
+
# Unload the packages cache after an interval of inactivity this long.
# The packages cache uses a lot of memory, and only takes a few seconds
# to reload when a new request arrives.
# Refresh the DHT keys after this much time has passed.
# This should be a time slightly less than the DHT's KEY_EXPIRE value.
- 'KEY_REFRESH': '57m',
+ 'KEY_REFRESH': '2.5h',
+ # The user name to try and run as (leave blank to run as current user)
+ 'USERNAME': 'apt-p2p',
+
# Which DHT implementation to use.
# It must be possible to do "from <DHT>.DHT import DHT" to get a class that
# implements the IDHT interface.
# whether this node is a bootstrap node
'BOOTSTRAP_NODE': "no",
- # Kademlia "K" constant, this should be an even number
- 'K': '8',
-
- # SHA1 is 160 bits long
- 'HASH_LENGTH': '160',
-
# checkpoint every this many seconds
'CHECKPOINT_INTERVAL': '5m', # five minutes
'BUCKET_STALENESS': '1h', # one hour
# expire entries older than this
- 'KEY_EXPIRE': '1h', # 60 minutes
+ 'KEY_EXPIRE': '3h', # 3 hours
+
+ # Timeout KRPC requests to nodes after this time.
+ 'KRPC_TIMEOUT': '9s',
+ # KRPC requests are resent using exponential backoff starting with this delay.
+ # The request will first be resent after the delay set here.
+ # The request will be resent again after twice the delay set here. etc.
+ # e.g. if TIMEOUT is 9 sec., and INITIAL_DELAY is 2 sec., then requests will
+ # be resent at times 0, 2 (2 sec. later), and 6 (4 sec. later), and then will
+ # timeout at 9.
+ 'KRPC_INITIAL_DELAY': '2s',
+
# whether to spew info about the requests/responses in the protocol
- 'SPEW': 'yes',
+ 'SPEW': 'no',
}
class AptP2PConfigParser(SafeConfigParser):
if suffix in self.time_multipliers.keys():
mult = self.time_multipliers[suffix]
value = value[:-1]
- return int(value)*mult
+ return int(float(value)*mult)
def getstring(self, section, option):
"""Read the config parameter as a string."""
config.set('DEFAULT', 'time_tester_4', '37s')
self.failUnless(config.gettime('DEFAULT', 'time_tester_4') == 37)
+ def test_floating_time(self):
+ config.set('DEFAULT', 'time_float_tester_1', '2.5d')
+ self.failUnless(config.gettime('DEFAULT', 'time_float_tester_1') == int(2.5*86400))
+ config.set('DEFAULT', 'time_float_tester_2', '0.5h')
+ self.failUnless(config.gettime('DEFAULT', 'time_float_tester_2') == int(0.5*3600))
+ config.set('DEFAULT', 'time_float_tester_3', '4.3333m')
+ self.failUnless(config.gettime('DEFAULT', 'time_float_tester_3') == int(4.3333*60))
+
def test_string(self):
config.set('DEFAULT', 'string_test', 'foobar')
self.failUnless(type(config.getstring('DEFAULT', 'string_test')) == str)