def __init__(self, downloader, connection): # 2fastbt_ SingleDownloadHelperInterface.__init__(self) # _2fastbt self.downloader = downloader self.connection = connection self.choked = True self.interested = False self.active_requests = [] self.measure = Measure(downloader.max_rate_period) self.peermeasure = Measure(downloader.max_rate_period) self.have = Bitfield(downloader.numpieces) self.last = -1000 self.last2 = -1000 self.example_interest = None self.backlog = 2 self.ip = connection.get_ip() self.guard = BadDataGuard(self) # 2fastbt_ self.helper = downloader.picker.helper self.proxy_have = Bitfield(downloader.numpieces) # _2fastbt # boudewijn: VOD needs a download measurement that is not # averaged over a 'long' period. downloader.max_rate_period is # (by default) 20 seconds because this matches the unchoke # policy. self.short_term_measure = Measure(5) # boudewijn: each download maintains a counter for the number # of high priority piece requests that did not get any # responce within x seconds. self.bad_performance_counter = 0
def __init__(self, downloader, url): SingleDownloadHelperInterface.__init__(self) self.downloader = downloader self.baseurl = url try: (self.scheme, self.netloc, path, pars, query, fragment) = urlparse(url) except: self.downloader.errorfunc('cannot parse http seed address: '+url) return if self.scheme != 'http': self.downloader.errorfunc('http seed url not http: '+url) return # Arno, 2010-03-08: Make proxy aware self.proxyhost = find_proxy(url) try: if self.proxyhost is None: self.connection = HTTPConnection(self.netloc) else: self.connection = HTTPConnection(self.proxyhost) except: self.downloader.errorfunc('cannot connect to http seed: '+url) return self.seedurl = path self.measure = Measure(downloader.max_rate_period) self.index = None self.piece_size = self.downloader.storage._piecelen( 0 ) self.total_len = self.downloader.storage.total_length self.url = '' self.requests = [] self.request_size = 0 self.endflag = False self.error = None self.retry_period = 30 self._retry_period = None self.errorcount = 0 self.goodseed = False self.active = False self.cancelled = False # HTTP Video Support self.request_lock = Lock() self.video_support_policy = True # TODO : get from constructor parameters self.video_support_enabled = False # Don't start immediately with support self.video_support_speed = 0.0 # Start with the faster rescheduling speed self.video_support_slow_start = False # If enabled delay the first request (give chance to peers to give bandwidth) # Arno, 2010-04-07: Wait 1 second before using HTTP seed. TODO good policy # If Video Support policy is not eneabled then use Http seed normaly if not self.video_support_policy: self.resched(1)
def __init__(self, downloader, url): # 2fastbt_ SingleDownloadHelperInterface.__init__(self) # _2fastbt self.downloader = downloader self.baseurl = url try: (self.scheme, self.netloc, path, pars, query, fragment) = urlparse(url) except: self.downloader.errorfunc('cannot parse http seed address: '+url) return if self.scheme != 'http': self.downloader.errorfunc('http seed url not http: '+url) return # Arno, 2010-03-08: Make proxy aware self.proxyhost = find_proxy(url) try: if self.proxyhost is None: self.connection = HTTPConnection(self.netloc) else: self.connection = HTTPConnection(self.proxyhost) except: self.downloader.errorfunc('cannot connect to http seed: '+url) return self.seedurl = path if pars: self.seedurl += ';'+pars self.seedurl += '?' if query: self.seedurl += query+'&' self.seedurl += 'info_hash='+urllib.quote(self.downloader.infohash) self.measure = Measure(downloader.max_rate_period) self.index = None self.url = '' self.requests = [] self.request_size = 0 self.endflag = False self.error = None self.retry_period = 30 self._retry_period = None self.errorcount = 0 self.goodseed = False self.active = False self.cancelled = False self.resched(randint(2, 10))