def create_session(self, hops=0): settings = lt.session_settings() if hops == 0: settings.user_agent = 'Tribler/' + version_id # Elric: Strip out the -rcX, -beta, -whatever tail on the version string. fingerprint = ['TL'] + map(int, version_id.split('-')[0].split('.')) + [0] # Workaround for libtorrent 0.16.3 segfault (see https://code.google.com/p/libtorrent/issues/detail?id=369) ltsession = lt.session(lt.fingerprint(*fingerprint), flags=1) enable_utp = self.trsession.get_libtorrent_utp() settings.enable_outgoing_utp = enable_utp settings.enable_incoming_utp = enable_utp pe_settings = lt.pe_settings() pe_settings.prefer_rc4 = True ltsession.set_pe_settings(pe_settings) else: settings.enable_outgoing_utp = True settings.enable_incoming_utp = True settings.enable_outgoing_tcp = False settings.enable_incoming_tcp = False settings.anonymous_mode = True # No PEX for anonymous sessions ltsession = lt.session(flags=0) ltsession.add_extension(lt.create_ut_metadata_plugin) ltsession.add_extension(lt.create_smart_ban_plugin) ltsession.set_settings(settings) ltsession.set_alert_mask(lt.alert.category_t.stats_notification | lt.alert.category_t.error_notification | lt.alert.category_t.status_notification | lt.alert.category_t.storage_notification | lt.alert.category_t.performance_warning | lt.alert.category_t.tracker_notification) # Load proxy settings if hops == 0: proxy_settings = self.trsession.get_libtorrent_proxy_settings() else: proxy_settings = list(self.trsession.get_anon_proxy_settings()) proxy_host, proxy_ports = proxy_settings[1] proxy_settings[1] = (proxy_host, proxy_ports[hops - 1]) self.set_proxy_settings(ltsession, *proxy_settings) # Set listen port & start the DHT if hops == 0: listen_port = self.trsession.get_listen_port() ltsession.listen_on(listen_port, listen_port + 10) if listen_port != ltsession.listen_port(): self.trsession.set_listen_port_runtime(ltsession.listen_port()) try: dht_state = open(os.path.join(self.trsession.get_state_dir(), DHTSTATE_FILENAME)).read() ltsession.start_dht(lt.bdecode(dht_state)) except Exception, exc: self._logger.info("could not restore dht state, got exception: %r. starting from scratch" % exc) ltsession.start_dht(None)
def create_session(self, hops=0, store_listen_port=True): settings = {} # Due to a bug in Libtorrent 0.16.18, the outgoing_port and num_outgoing_ports value should be set in # the settings dictionary settings['outgoing_port'] = 0 settings['num_outgoing_ports'] = 1 settings['allow_multiple_connections_per_ip'] = 0 # Copy construct so we don't modify the default list extensions = list(DEFAULT_LT_EXTENSIONS) # Elric: Strip out the -rcX, -beta, -whatever tail on the version string. fingerprint = ['TL'] + [int(x) for x in version_id.split('-')[0].split('.')] + [0] ltsession = lt.session(lt.fingerprint(*fingerprint), flags=0) if hops == 0 else lt.session(flags=0) if hops == 0: settings['user_agent'] = 'Tribler/' + version_id enable_utp = self.tribler_session.config.get_libtorrent_utp() settings['enable_outgoing_utp'] = enable_utp settings['enable_incoming_utp'] = enable_utp if LooseVersion(self.get_libtorrent_version()) >= LooseVersion("1.1.0"): settings['prefer_rc4'] = True settings["listen_interfaces"] = "0.0.0.0:%d" % self.tribler_session.config.get_libtorrent_port() else: pe_settings = lt.pe_settings() pe_settings.prefer_rc4 = True ltsession.set_pe_settings(pe_settings) mid = self.tribler_session.trustchain_keypair.key_to_hash() settings['peer_fingerprint'] = mid settings['handshake_client_version'] = 'Tribler/' + version_id + '/' + str(hexlify(mid)) else: settings['enable_outgoing_utp'] = True settings['enable_incoming_utp'] = True settings['enable_outgoing_tcp'] = False settings['enable_incoming_tcp'] = False settings['anonymous_mode'] = True settings['force_proxy'] = True if LooseVersion(self.get_libtorrent_version()) >= LooseVersion("1.1.0"): settings["listen_interfaces"] = "0.0.0.0:%d" % self.tribler_session.config.get_anon_listen_port() self.set_session_settings(ltsession, settings) ltsession.set_alert_mask(self.default_alert_mask) # Load proxy settings if hops == 0: proxy_settings = self.tribler_session.config.get_libtorrent_proxy_settings() else: proxy_settings = list(self.tribler_session.config.get_anon_proxy_settings()) proxy_host, proxy_ports = proxy_settings[1] proxy_settings[1] = (proxy_host, proxy_ports[hops - 1]) self.set_proxy_settings(ltsession, *proxy_settings) for extension in extensions: ltsession.add_extension(extension) # Set listen port & start the DHT if hops == 0: listen_port = self.tribler_session.config.get_libtorrent_port() ltsession.listen_on(listen_port, listen_port + 10) if listen_port != ltsession.listen_port() and store_listen_port: self.tribler_session.config.set_libtorrent_port_runtime(ltsession.listen_port()) try: lt_state = lt.bdecode( open(os.path.join(self.tribler_session.config.get_state_dir(), LTSTATE_FILENAME)).read()) if lt_state is not None: ltsession.load_state(lt_state) else: self._logger.warning("the lt.state appears to be corrupt, writing new data on shutdown") except Exception as exc: self._logger.info("could not load libtorrent state, got exception: %r. starting from scratch" % exc) else: ltsession.listen_on(self.tribler_session.config.get_anon_listen_port(), self.tribler_session.config.get_anon_listen_port() + 20) ltsession_settings = ltsession.get_settings() ltsession_settings['upload_rate_limit'] = self.tribler_session.config.get_libtorrent_max_upload_rate() ltsession_settings['download_rate_limit'] = self.tribler_session.config.get_libtorrent_max_download_rate() self.set_session_settings(ltsession, ltsession_settings) if self.tribler_session.config.get_libtorrent_dht_enabled(): ltsession.start_dht() for router in DEFAULT_DHT_ROUTERS: ltsession.add_dht_router(*router) ltsession.start_lsd() self._logger.debug("Started libtorrent session for %d hops on port %d", hops, ltsession.listen_port()) self.lt_session_shutdown_ready[hops] = False return ltsession
def create_session(self, hops=0, store_listen_port=True): settings = {} # Due to a bug in Libtorrent 0.16.18, the outgoing_port and num_outgoing_ports value should be set in # the settings dictionary settings['outgoing_port'] = 0 settings['num_outgoing_ports'] = 1 # Elric: Strip out the -rcX, -beta, -whatever tail on the version string. fingerprint = ['TL'] + map(int, version_id.split('-')[0].split('.')) + [0] ltsession = lt.session(lt.fingerprint( *fingerprint), flags=1) if hops == 0 else lt.session(flags=0) if hops == 0: settings['user_agent'] = 'Tribler/' + version_id enable_utp = self.trsession.get_libtorrent_utp() settings['enable_outgoing_utp'] = enable_utp settings['enable_incoming_utp'] = enable_utp if LooseVersion( self.get_libtorrent_version()) >= LooseVersion("1.1.0"): settings['prefer_rc4'] = True settings[ "listen_interfaces"] = "0.0.0.0:%d" % self.trsession.get_listen_port( ) else: pe_settings = lt.pe_settings() pe_settings.prefer_rc4 = True ltsession.set_pe_settings(pe_settings) else: settings['enable_outgoing_utp'] = True settings['enable_incoming_utp'] = True settings['enable_outgoing_tcp'] = False settings['enable_incoming_tcp'] = False settings['anonymous_mode'] = True settings['force_proxy'] = True if LooseVersion( self.get_libtorrent_version()) >= LooseVersion("1.1.0"): settings[ "listen_interfaces"] = "0.0.0.0:%d" % self.trsession.get_anon_listen_port( ) # No PEX for anonymous sessions ltsession = lt.session(flags=0) ltsession.add_extension(lt.create_ut_metadata_plugin) ltsession.add_extension(lt.create_smart_ban_plugin) ltsession.set_settings(settings) ltsession.set_alert_mask(lt.alert.category_t.stats_notification | lt.alert.category_t.error_notification | lt.alert.category_t.status_notification | lt.alert.category_t.storage_notification | lt.alert.category_t.performance_warning | lt.alert.category_t.tracker_notification) # Load proxy settings if hops == 0: proxy_settings = self.trsession.get_libtorrent_proxy_settings() else: proxy_settings = list(self.trsession.get_anon_proxy_settings()) proxy_host, proxy_ports = proxy_settings[1] proxy_settings[1] = (proxy_host, proxy_ports[hops - 1]) self.set_proxy_settings(ltsession, *proxy_settings) # Set listen port & start the DHT if hops == 0: listen_port = self.trsession.get_listen_port() ltsession.listen_on(listen_port, listen_port + 10) if listen_port != ltsession.listen_port() and store_listen_port: self.trsession.set_listen_port_runtime(ltsession.listen_port()) try: lt_state = lt.bdecode( open( os.path.join(self.trsession.get_state_dir(), LTSTATE_FILENAME)).read()) if lt_state is not None: ltsession.load_state(lt_state) else: self._logger.warning( "the lt.state appears to be corrupt, writing new data on shutdown" ) except Exception, exc: self._logger.info( "could not load libtorrent state, got exception: %r. starting from scratch" % exc) ltsession.start_dht()
def create_session(self, hops=0, store_listen_port=True): settings = {} # Due to a bug in Libtorrent 0.16.18, the outgoing_port and num_outgoing_ports value should be set in # the settings dictionary settings['outgoing_port'] = 0 settings['num_outgoing_ports'] = 1 # Copy construct so we don't modify the default list extensions = list(DEFAULT_LT_EXTENSIONS) # Elric: Strip out the -rcX, -beta, -whatever tail on the version string. fingerprint = ['TL'] + map(int, version_id.split('-')[0].split('.')) + [0] ltsession = lt.session(lt.fingerprint(*fingerprint), flags=0) if hops == 0 else lt.session(flags=0) if hops == 0: settings['user_agent'] = 'Tribler/' + version_id enable_utp = self.tribler_session.config.get_libtorrent_utp() settings['enable_outgoing_utp'] = enable_utp settings['enable_incoming_utp'] = enable_utp if LooseVersion(self.get_libtorrent_version()) >= LooseVersion("1.1.0"): settings['prefer_rc4'] = True settings["listen_interfaces"] = "0.0.0.0:%d" % self.tribler_session.config.get_libtorrent_port() else: pe_settings = lt.pe_settings() pe_settings.prefer_rc4 = True ltsession.set_pe_settings(pe_settings) mid = self.tribler_session.trustchain_keypair.key_to_hash() settings['peer_fingerprint'] = mid settings['handshake_client_version'] = 'Tribler/' + version_id + '/' + mid.encode('hex') else: settings['enable_outgoing_utp'] = True settings['enable_incoming_utp'] = True settings['enable_outgoing_tcp'] = False settings['enable_incoming_tcp'] = False settings['anonymous_mode'] = True settings['force_proxy'] = True if LooseVersion(self.get_libtorrent_version()) >= LooseVersion("1.1.0"): settings["listen_interfaces"] = "0.0.0.0:%d" % self.tribler_session.config.get_anon_listen_port() # No PEX for anonymous sessions if lt.create_ut_pex_plugin in extensions: extensions.remove(lt.create_ut_pex_plugin) ltsession.set_settings(settings) ltsession.set_alert_mask(self.default_alert_mask) # Load proxy settings if hops == 0: proxy_settings = self.tribler_session.config.get_libtorrent_proxy_settings() else: proxy_settings = list(self.tribler_session.config.get_anon_proxy_settings()) proxy_host, proxy_ports = proxy_settings[1] proxy_settings[1] = (proxy_host, proxy_ports[hops - 1]) self.set_proxy_settings(ltsession, *proxy_settings) for extension in extensions: ltsession.add_extension(extension) # Set listen port & start the DHT if hops == 0: listen_port = self.tribler_session.config.get_libtorrent_port() ltsession.listen_on(listen_port, listen_port + 10) if listen_port != ltsession.listen_port() and store_listen_port: self.tribler_session.config.set_libtorrent_port_runtime(ltsession.listen_port()) try: lt_state = lt.bdecode( open(os.path.join(self.tribler_session.config.get_state_dir(), LTSTATE_FILENAME)).read()) if lt_state is not None: ltsession.load_state(lt_state) else: self._logger.warning("the lt.state appears to be corrupt, writing new data on shutdown") except Exception, exc: self._logger.info("could not load libtorrent state, got exception: %r. starting from scratch" % exc) ltsession.start_dht()
def create_session(self, hops=0): settings = {} # Due to a bug in Libtorrent 0.16.18, the outgoing_port and num_outgoing_ports value should be set in # the settings dictionary settings['outgoing_port'] = 0 settings['num_outgoing_ports'] = 1 # Copy construct so we don't modify the default list extensions = list(DEFAULT_LT_EXTENSIONS) if hops == 0: settings['user_agent'] = 'Tribler/' + version_id # Elric: Strip out the -rcX, -beta, -whatever tail on the version string. fingerprint = ['TL'] + map( int, version_id.split('-')[0].split('.')) + [0] # Workaround for libtorrent 0.16.3 segfault (see https://code.google.com/p/libtorrent/issues/detail?id=369) ltsession = lt.session(lt.fingerprint(*fingerprint), flags=0) enable_utp = self.tribler_session.config.get_libtorrent_utp() settings['enable_outgoing_utp'] = enable_utp settings['enable_incoming_utp'] = enable_utp pe_settings = lt.pe_settings() pe_settings.prefer_rc4 = True ltsession.set_pe_settings(pe_settings) else: settings['enable_outgoing_utp'] = True settings['enable_incoming_utp'] = True settings['enable_outgoing_tcp'] = False settings['enable_incoming_tcp'] = False settings['anonymous_mode'] = True settings['force_proxy'] = True ltsession = lt.session(flags=0) # No PEX for anonymous sessions if lt.create_ut_pex_plugin in extensions: extensions.remove(lt.create_ut_pex_plugin) ltsession.set_settings(settings) ltsession.set_alert_mask(self.default_alert_mask) # Load proxy settings if hops == 0: proxy_settings = self.tribler_session.config.get_libtorrent_proxy_settings( ) else: proxy_settings = list( self.tribler_session.config.get_anon_proxy_settings()) proxy_host, proxy_ports = proxy_settings[1] proxy_settings[1] = (proxy_host, proxy_ports[hops - 1]) self.set_proxy_settings(ltsession, *proxy_settings) for extension in extensions: ltsession.add_extension(extension) # Set listen port & start the DHT if hops == 0: listen_port = self.tribler_session.config.get_libtorrent_port() ltsession.listen_on(listen_port, listen_port + 10) if listen_port != ltsession.listen_port(): self.tribler_session.config.set_libtorrent_port_runtime( ltsession.listen_port()) try: lt_state = lt.bdecode( open( os.path.join( self.tribler_session.config.get_state_dir(), LTSTATE_FILENAME)).read()) if lt_state is not None: ltsession.load_state(lt_state) else: self._logger.warning( "the lt.state appears to be corrupt, writing new data on shutdown" ) except Exception, exc: self._logger.info( "could not load libtorrent state, got exception: %r. starting from scratch" % exc) ltsession.start_dht()
def create_session(self, hops=0): settings = lt.session_settings() if hops == 0: settings.user_agent = 'Tribler/' + version_id # Elric: Strip out the -rcX, -beta, -whatever tail on the version string. fingerprint = ['TL'] + map( int, version_id.split('-')[0].split('.')) + [0] # Workaround for libtorrent 0.16.3 segfault (see https://code.google.com/p/libtorrent/issues/detail?id=369) ltsession = lt.session(lt.fingerprint(*fingerprint), flags=1) enable_utp = self.trsession.get_libtorrent_utp() settings.enable_outgoing_utp = enable_utp settings.enable_incoming_utp = enable_utp pe_settings = lt.pe_settings() pe_settings.prefer_rc4 = True ltsession.set_pe_settings(pe_settings) else: settings.enable_outgoing_utp = True settings.enable_incoming_utp = True settings.enable_outgoing_tcp = False settings.enable_incoming_tcp = False settings.anonymous_mode = True # No PEX for anonymous sessions ltsession = lt.session(flags=0) ltsession.add_extension(lt.create_ut_metadata_plugin) ltsession.add_extension(lt.create_smart_ban_plugin) ltsession.set_settings(settings) ltsession.set_alert_mask(lt.alert.category_t.stats_notification | lt.alert.category_t.error_notification | lt.alert.category_t.status_notification | lt.alert.category_t.storage_notification | lt.alert.category_t.performance_warning | lt.alert.category_t.tracker_notification) # Load proxy settings if hops == 0: proxy_settings = self.trsession.get_libtorrent_proxy_settings() else: proxy_settings = list(self.trsession.get_anon_proxy_settings()) proxy_host, proxy_ports = proxy_settings[1] proxy_settings[1] = (proxy_host, proxy_ports[hops - 1]) self.set_proxy_settings(ltsession, *proxy_settings) # Set listen port & start the DHT if hops == 0: listen_port = self.trsession.get_listen_port() ltsession.listen_on(listen_port, listen_port + 10) if listen_port != ltsession.listen_port(): self.trsession.set_listen_port_runtime(ltsession.listen_port()) try: dht_state = open( os.path.join(self.trsession.get_state_dir(), DHTSTATE_FILENAME)).read() ltsession.start_dht(lt.bdecode(dht_state)) except Exception, exc: self._logger.info( "could not restore dht state, got exception: %r. starting from scratch" % exc) ltsession.start_dht(None)