def enableTracker(self): if self.tracker is None and self.listen_port: presets = {'port': self.listen_port, 'allowed_dir': os.path.join(utility.configdir.dir_root, 'tracker'), 'dfile': os.path.join(utility.getDatabaseDir(), 'tracker.db'), } trackconfig, args = parseargs('', defaults, presets = presets) self.tracker = Tracker(trackconfig, self.rawserver) self.handler.http = HTTPHandler(self.tracker.get, trackconfig['min_time_between_log_flushes'])
class LaunchMany(Thread): def __init__(self): Thread.__init__(self, name = "LaunchMany") try: self.Output = Output() btconfig = utility.getBTParams() if not _natpmp_supported: btconfig["natpmp"] = 0 self.stats_period = btconfig['display_interval'] self.counter = 0 self.doneflag = Event() self.hashcheck_queue = [] self.hashcheck_current = None # BT RawServer self.rawserver = RawServer(self.doneflag, btconfig['timeout_check_interval'], btconfig['timeout'], ipv6_enable = btconfig['ipv6_enabled'], failfunc = self.failed, errorfunc = self.exchandler) self.upnp_type = 0 self.listen_port = self.getPort(btconfig) if self.listen_port and utility.config.Write('useport', self.listen_port, "int"): utility.config.Flush() self.handler = MultiHandler(self.rawserver, self.doneflag, btconfig) self.rawserver.add_task(self.stats, 0) # DHT if btconfig["dht"] and self.listen_port: utility.dht = Khashmir(btconfig['bind'], self.listen_port, utility.getDatabaseDir(), ipv6_enable = btconfig['ipv6_enabled'], upnp = self.upnp_type, natpmp = btconfig['natpmp']) else: utility.dht = None OPTION_PATTERN[63] = False # Tracker self.tracker = None if btconfig["tracker"] and self.listen_port: self.enableTracker() except IOError: data = StringIO() print_exc(file = data) self.Output.exception(data.getvalue()) def enableTracker(self): if self.tracker is None and self.listen_port: presets = {'port': self.listen_port, 'allowed_dir': os.path.join(utility.configdir.dir_root, 'tracker'), 'dfile': os.path.join(utility.getDatabaseDir(), 'tracker.db'), } trackconfig, args = parseargs('', defaults, presets = presets) self.tracker = Tracker(trackconfig, self.rawserver) self.handler.http = HTTPHandler(self.tracker.get, trackconfig['min_time_between_log_flushes']) def disableTracker(self): if self.tracker is not None: self.handler.http.shutdown() self.handler.http = None self.tracker.save_state() self.tracker = None def getPort(self, btconfig): listen_port = None self.upnp_type = UPnP_test(btconfig['upnp_nat_access']) while True: try: listen_port = self.rawserver.find_and_bind(btconfig['minport'], btconfig['maxport'], btconfig['bind'], ipv6_socket_style = btconfig['ipv6_binds_v4'], upnp = self.upnp_type, randomizer = False, natpmp = btconfig['natpmp']) utility.listen_port = listen_port break except socketerror, e: message = _('listening port not available') + \ "\n" + \ _('would you like to try another port?') #+ \ #"\n\n" + _('Details:') + forceunicode(e.strerror) dialog = wx.MessageDialog(None, message, _('Error'), wx.YES_NO|wx.ICON_ERROR) result = dialog.ShowModal() dialog.Destroy() if(result == wx.ID_NO): self.failed(_('listening port not available')) break btconfig['minport'] = btconfig['minport'] + 1 btconfig['maxport'] = btconfig['maxport'] + 1 return listen_port