Exemplo n.º 1
0
	def UploadTorrent(self, file_name, serverAddr):
		# create a tcp 
		s = Socket(self.ip, self.port).TCP()
		
		s.bind((self.ip, self.port))
		# connect to severAddr
		print "Connecting to :", serverAddr
		s.connect(serverAddr)
		
		# upload file to server
		resp = s.recv(256)
		if resp == "Ok":
			s.send("Upload")
			resp = s.recv(256)
			if resp == "Ok":
				# convert file to .torrent file
				print "Creating torrent file."
				fp = open(file_name, 'rb')
				fileContent = fp.read(1024)
				enCodedString = Torrent().encode(fileName=file_name)
				fp.close()
				
				fp = open(file_name+".torrent", "wb")
				fp.write(enCodedString)
				fp.close()

				# send torrent file to server
				# open the file
				# send recursively
				print "Sending file to server.."
				f = open(file_name+'.torrent', 'rb')
				l = f.read(1024)
				while(l):
					s.send(l)
					l = f.read(1024)
				f.close()

				print "Waiting for resonse from server"
				resp = s.recv(1024)
				if resp == "Failed":
					print "File upload failed."
					s.close()
					# self.UploadTorrent(file_name, serverAddr)
				elif resp == "Ok":
					# file successfully uploaded. Now open socket to let users download this file
					print "File successfully uploaded."
					s.close()
					self.SendFile( file_name)
			else:
				print "Server won't let you upload"
		else:
			print "Unable to talk to server. Please try after sometime."
			s.close()
Exemplo n.º 2
0
	def Upload(self, torrentFile):
		# decode the torrent file
		decod = Torrent().decode(torrentFile)

		# get the file name
		fileName = decod["info"]["name"]

		# get trackers 
		trackers = decod["announce"]

		# update database of itself
		print "Updating database of torrent files"
		self.server.db.torrents.insert({"fileName": fileName})

		# inform trackers to update there database
		trackerIP, trackerPort = trackers.split(":")
		trackerPort = int(trackerPort)

		print "Connecting to tracker at "+trackers
		serSoc = Socket('172.34.12.12', 6767).TCP()
		serSoc.connect((trackerIP, trackerPort))

		print "Waiting for response from racker"
		resp = serSoc.recv(256)
		if resp == "Ok":
			serSoc.send("Server")
			resp = serSoc.recv(256)
			if resp == "Ok":
				data = self.ip + ":" + str(self.port) + "||" + fileName
				print "Sending data to tracker..."
				serSoc.send(data)
				resp = serSoc.recv(256)
				if resp == "Failed":
					self.socket.send("Failed")
					return 
		else:
			self.socket.send("Failed")
			return

		# put file into the server 
		print "Putting content into a torrent file..."
		fp = open(fileName+".torrent", "wb")
		fp.write(torrentFile)
		fp.close()

		# send confirmation to client thread
		print "Sending confirmation to seeder..."
		serSoc.close()
		self.socket.send("Ok")
		return 
Exemplo n.º 3
0
	def Die(self):
		s = Socket(self.ip, self.port2).TCP()
		s.connect(self.trackerAddr)
		resp = s.recv(256)
		if resp == "Ok":
			# send seederAddr and groupAddr to tracker.
			seederAddr = self.seeders[0] + ":" + str(self.seeders[1])
			groupAddr = self.ip + ":" + str(self.port)
			s.send(seederAddr + "||" + groupAddr)
			s.close()
			print "Group died successfully."
		else:
			print "Unable to remove group trackers database. Trying again"
			s.close()
		return 
Exemplo n.º 4
0
	def GetGroup(self, trackerAddr, fileName):
		'''
		Get tracker's ip and port
		Create a TCP socket and get group after doing some message passing
		'''					
		# create a tcp socket
		s = Socket(self.ip, self.port).TCP()

		s.bind((self.ip, self.port))
		
		# connect socket to tracker
		s.connect(trackerAddr)

		# get group from tracker after doing some message passing
		resp = s.recv(256)
		if resp == "Ok":
			s.send("Leecher")
			resp = s.recv(256)
			if resp == "Ok":
				s.send(fileName)
				resp = s.recv(256)
				if resp == "Ok":
					resp = s.recv(1024)
					if resp == "Failed":
						print "Unable to assign a group.."
						groupAddr =  None
					# we got the group addr	
					groupAddr = resp
				else:
					print "File not exists at server"
					groupAddr = None
		else:
			print "Tracker is not respoinding..."
			groupAddr =  None		
		
		s.close()

		return groupAddr