def _setup_torrent_download(self, dcfg, pstate, initialdlstatus, lmcreatedcallback, lmvodeventcallback): self.dllock.acquire() try: torrentdef = self.get_def() metainfo = torrentdef.get_metainfo() self.correctedinfoname = fix_filebasename(torrentdef.get_name_as_unicode()) if dcfg is not None and DEBUG: log(self.log_prefix + '_setup_torrent_download: selected_files', dcfg.dlconfig['selected_files']) if DEBUG: log(self.log_prefix + '_setup_torrent_download: piece size', metainfo['info']['piece length']) itrackerurl = self.session.get_internal_tracker_url() metainfo = self.tdef.get_metainfo() usingitracker = False if DEBUG: if pstate is None: resumedata = None else: resumedata = pstate['engineresumedata'] log(self.log_prefix + '_setup_torrent_download: resumedata', resumedata) if itrackerurl.endswith('/'): slashless = itrackerurl[:-1] else: slashless = itrackerurl if 'announce' in metainfo and (metainfo['announce'] == itrackerurl or metainfo['announce'] == slashless): usingitracker = True elif 'announce-list' in metainfo: for tier in metainfo['announce-list']: if itrackerurl in tier or slashless in tier: usingitracker = True break if usingitracker: if DEBUG: log(self.log_prefix + '_setup_torrent_download: using internal tracker') self.session.add_to_internal_tracker(self.tdef) elif DEBUG: log(self.log_prefix + '_setup_torrent_download: not using internal tracker') if dcfg is None: cdcfg = DownloadStartupConfig() else: cdcfg = dcfg if cdcfg.is_hidden(): cdcfg.set_max_conns(10) cdcfg.set_max_conns_to_initiate(10) self.dlconfig = copy.copy(cdcfg.dlconfig) for k, v in self.session.get_current_startup_config_copy().sessconfig.iteritems(): self.dlconfig.setdefault(k, v) self.set_filepieceranges(metainfo) self.dlruntimeconfig = {} self.dlruntimeconfig['max_desired_upload_rate'] = 0 self.dlruntimeconfig['max_desired_download_rate'] = 0 if DEBUG: log(self.log_prefix + '_setup_torrent_download: initialdlstatus', `(self.tdef.get_name_as_unicode())`, initialdlstatus) self.dlconfig['cs_keys'] = self.tdef.get_cs_keys_as_ders() self.dlconfig['permid'] = self.session.get_permid() if self.dlconfig['cs_keys']: log(self.log_prefix + '_setup_torrent_download: this is a closed swarm') if pstate is not None and pstate.has_key('dlstate'): self.progressbeforestop = pstate['dlstate'].get('progress', 0.0) if initialdlstatus != DLSTATUS_STOPPED: if pstate is None or pstate['dlstate']['status'] != DLSTATUS_STOPPED: self.starting = True self.create_engine_wrapper(lmcreatedcallback, pstate, lmvodeventcallback, initialdlstatus) self.pstate_for_restart = pstate self.dllock.release() except Exception as e: log_exc() self.set_error(e) self.dllock.release()