class Connection(threading.Thread): """ Represents one connection to a server. """ def __init__(self, resource, maxspeed = -1, chunksize = 4096): threading.Thread.__init__(self) self.file = resource.file self.resource = resource self.loc = resource.url self.setDaemon(True) self.begin = 0 self.end = 0 self.place = 0 self.size = 0 self.paused = False self.active = True self.chunksize = chunksize self.maxspeed = maxspeed def run(self): connection = httplib.HTTPConnection(urlparse(self.loc)[1]) while self.active: self.begin, self.size = self.file.get_piece(self) self.place = self.begin self.end = self.begin + self.size #print 'fetching %s bytes starting at %s and ending at %s' % (self.size, self.begin, self.end) if self.size <= 0: break else: #connection.request('GET', urlparse(self.loc)[2]) connection.request('GET', urlparse(self.loc)[2], headers={'Range':'bytes=%s-%s' % (self.begin, self.end)}) response = connection.getresponse() if response.getheader('content-length') is None: break while self.active: data = response.read(self.chunksize) if data == '': break self.write(data) while self.paused: time.sleep(1) print "Paused..." # if self.place > self.end: # break connection.close() self.resource.remove_connection(self) def pause(self, state): self.paused = state def write(self, data): self.file.write_data(data, self.place) self.place = self.place + len(data) def stop(self): self.active = False