def __init__(self, config, storage, rm, urlage, picker, numpieces, finished, errorfunc, kickfunc, banfunc, get_downrate): self.config = config self.storage = storage self.rm = rm self.urlage = urlage self.picker = picker self.errorfunc = errorfunc self.rerequester = None self.entered_endgame = False self.connection_manager = None self.chunksize = config['download_chunk_size'] self.numpieces = numpieces self.finished = finished self.snub_time = config['snub_time'] self.kickfunc = kickfunc self.banfunc = banfunc self.get_downrate = get_downrate self.downloads = [] self.perip = {} self.bad_peers = {} self.discarded_bytes = 0 self.useful_received_listeners = set() self.raw_received_listeners = set() if SPARSE_SET: self.piece_states = PieceSetBuckets() nothing = SparseSet() nothing.add(0, self.numpieces) self.piece_states.buckets.append(nothing) # I hate this nowhere = [(i, 0) for i in xrange(self.numpieces)] self.piece_states.place_in_buckets = dict(nowhere) else: typecode = resolve_typecode(self.numpieces) self.piece_states = SortedPieceBuckets(typecode) nothing = array.array(typecode, range(self.numpieces)) self.piece_states.buckets.append(nothing) # I hate this nowhere = [(i, (0, i)) for i in xrange(self.numpieces)] self.piece_states.place_in_buckets = dict(nowhere) self.last_update = 0 self.all_requests = set()
def __init__(self, config, storage, rm, urlage, picker, numpieces, finished, errorfunc, kickfunc, banfunc, get_downrate, micropayments=False): self.config = config self.storage = storage self.rm = rm self.urlage = urlage self.picker = picker self.errorfunc = errorfunc self.rerequester = None self.entered_endgame = False self.connection_manager = None self.chunksize = config['download_chunk_size'] self.numpieces = numpieces self.finished = finished self.snub_time = config['snub_time'] self.kickfunc = kickfunc self.banfunc = banfunc self.get_downrate = get_downrate self.downloads = [] self.perip = {} self.bad_peers = {} self.discarded_bytes = 0 self.useful_received_listeners = set() self.raw_received_listeners = set() self.micropayments = micropayments #boolean on/off self.key_rewards = {} #key rewards we use to "pay" uploaders self.waiting_for_reward = { } #hash with first key peerid then [(idx1,offset1,len1),(idx2,offset2,len2) ] self.payment_key_hash_cache = { } #stores payment key hashes received from tracker self.private_key = None self.public_key = None self.certificate = None self.pk_tools = None self.public_key_tracker = None if micropayments: """load keys and check certificates""" log("micropayments=" + str(micropayments)) #check if certifcates are OK cert = self.config["micropayment_certificate"] self.ca_dir = self.config["micropayment_trusted_ca_dir"] self.pk_tools = PKTools(self.ca_dir, config['save_incomplete_in']) if not self.pk_tools.validate_certificate(cert): log("invalid certificates") return else: log("valid certificates") self.certificate = parse_PEM_certificate( open(self.config["micropayment_certificate"])) self.public_key = self.certificate.publicKey self.private_key = parse_PEM_private_key( open(self.config["micropayment_private_key"])) log("cert tracker filename=%s:" % (self.config["micropayment_tracker_certificate"])) cert_tracker = parse_PEM_certificate( open(self.config["micropayment_tracker_certificate"])) self.public_key_tracker = cert_tracker.publicKey if SPARSE_SET: self.piece_states = PieceSetBuckets() nothing = SparseSet() nothing.add(0, self.numpieces) self.piece_states.buckets.append(nothing) # I hate this nowhere = [(i, 0) for i in xrange(self.numpieces)] self.piece_states.place_in_buckets = dict(nowhere) else: typecode = resolve_typecode(self.numpieces) self.piece_states = SortedPieceBuckets(typecode) nothing = array.array(typecode, range(self.numpieces)) self.piece_states.buckets.append(nothing) # I hate this nowhere = [(i, (0, i)) for i in xrange(self.numpieces)] self.piece_states.place_in_buckets = dict(nowhere) self.last_update = 0 self.all_requests = set()