All pastes #973423 Raw Edit

Anonymous

public text v1 · immutable
·published 2008-04-06 02:42 UTC
rendered paste body
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