Exemplo n.º 1
0
class Tracker():
	"""Tracker for torrents"""
	def __init__(self, ip, port=None, dbName=None):
		self.ip = ip
		self.port = port
		if dbName:
			self.db = DB(dbName).db
		else:
			self.db = None

		self.socket = None
		self.groups = {}

	# start the tracker server	
	def Start(self):
		# create a tcp thread
		self.socket = Socket(self.ip, self.port).TCP()
		self.socket.bind((self.ip, self.port))

		# now listen for any incomming connection
		print "Tracker listening at  "+ self.ip + ":"+str(self.port)
		self.socket.listen(5)

		while True:
			clientSocket, (ip, port) = self.socket.accept()
			print "Responding to ", ip, port
			clientThread = ClientThread(self, clientSocket, ip, port)
			clientThread.start()
Exemplo n.º 2
0
class Server():
	"""Server for torrent files"""
	def __init__(self, ip, port=None, dbName=None):
		self.socket = None
		self.ip = ip
		self.port = port
		self.db = DB(dbName).db

	"""
	Start the server
	"""
	def Start(self):
		# create a tcp socket	
		self.socket = Socket(self.ip, self.port).TCP()
		self.socket.bind((self.ip, self.port))

		# listen for any incomming connections
		print "Listening at: ", (self.ip, self.port)
		self.socket.listen(5)

		while True:
			clientSocket, (ip, port) = self.socket.accept()
			print "Responding to : ", ip, port
			clientThread = ClientThread(self, clientSocket, ip, port)
			clientThread.start()
Exemplo n.º 3
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.º 4
0
	def SendFile(self, file_name):

		print "Waiting for any group connection at ", self.ip, self.port, "..."
		# keep connection open, listen
		sock = Socket(self.ip, self.port).TCP()
		sock.bind((self.ip, self.port))
		sock.listen(5)

		# accept connection from tracker
		while True:
			groupSocket, (ip, port) = sock.accept()
			print "Seeding to group ", ip, port
			groupThread = ClientThread(groupSocket, ip, port, file_name)
			groupThread.start()
Exemplo n.º 5
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
Exemplo n.º 6
0
	def JoinGroup(self, groupIP, groupPort):
		'''
		Create a UDP socket
		Join the group
		'''

		s = Socket(self.ip, self.port).UDP()

		# Allow multiple copies of this program on one machine
		s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)


		# Bind it to the port
		s.bind((groupIP, groupPort))

		# get the group to join
		group_bin = socket.inet_pton(socket.AF_INET, groupIP)

		# Join group
		mreq = group_bin + struct.pack('=I', socket.INADDR_ANY)
		s.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
	
		return s