def __init__(self, parent, start): self.parent = parent self.numactive = 0 self.start = start self.requests = OrderedDict()
def __init__(self, make_upload, downloader, choker, numpieces, ratelimiter, rawserver, config, private, my_id, add_task, infohash, context, addcontactfunc, reported_port, tracker_ips, log_prefix): """ @param downloader: MultiDownload for this torrent. @param my_id: my peer id. @param tracker_ips: list of tracker ip addresses. ConnectionManager does not drop connections from the tracker. This allows trackers to perform NAT checks even when there are max_allow_in connections. @param log_prefix: string used as the prefix for all log entries generated by the ConnectionManager and its created Connectors. """ self.make_upload = make_upload self.downloader = downloader self.choker = choker # aaargh self.piece_size = downloader.storage.piece_size self.numpieces = numpieces self.ratelimiter = ratelimiter self.rawserver = rawserver self.my_id = my_id self.private = private self.config = config self.add_task = add_task self.infohash = infohash self.context = context self.addcontact = addcontactfunc self.reported_port = reported_port self.everinc = False self.tracker_ips = tracker_ips self.log_prefix = log_prefix self.logger = logging.getLogger(self.log_prefix) self.closed = False # submitted self.pending_connections = {} # transport connected self.connectors = set() # protocol active # we do a lot of itterating and few mutations, so use a list self.complete_connectors = [] # set() # use a dict for a little semi-randomness self.spares = {} # OrderedDict() self.cached_peers = OrderedDict() self.cache_limit = 300 self.connector_ips = DictWithInts() self.connector_ids = DictWithInts() self.banned = set() self._ka_task = self.add_task(config['keepalive_interval'], self.send_keepalives) self._pex_task = None if not self.private: self._pex_task = self.add_task(config['pex_interval'], self.send_pex) self.reopen(reported_port)