rendered paste bodyclass 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