Ejemplo n.º 1
0
	def recieveFile(self,sock,size):
		self.fullFilePath = Utils.join(Utils.DOWNLOADS_DIR,self.filePath)
		directory = os.path.dirname(self.fullFilePath)
		if not os.path.exists(directory):
			os.makedirs(directory)
		remainingsize=size
		f = open(self.fullFilePath,'wb')
		self.fle=f
		count=0
		while(1):
			if remainingsize==0:
				break
			elif remainingsize>=Utils.PACKET_SIZE:
				ret =  Utils.bytesToInt(Utils.getPacketOrStop(sock,1,threads=(self)))
				if ret==0:
					raise CancelException()
				packet = Utils.getPacketOrStop(sock,Utils.PACKET_SIZE,threads=(self))
				remainingsize = remainingsize-Utils.PACKET_SIZE
				if count%10==0:
					percent = format(float(size-remainingsize)/float(size)*100,'.2f')
					self.tree.set(self.treeItem,"progress",str(percent)+"%")#make this happen not as often
				count+=1
			else:
				ret = Utils.bytesToInt(Utils.getPacketOrStop(sock,1,threads=(self)))
				if ret==0:
					raise CancelException()
				packet = Utils.getPacketOrStop(sock,remainingsize,threads=(self))
				remainingsize=0
			f.write(packet)
		f.close()
Ejemplo n.º 2
0
	def silentExchange(self, sock, addressIP):
		data = "" + self.secretKey + ";" + self.username
		size = len(data)
		sock.send(Utils.EXCHANGE_INFO_HEADER+Utils.intToBytes(size,4)+Utils.stringToBytes(data))
		size = Utils.bytesToInt(Utils.getPacketOrStop(sock,4))
		resp = Utils.bytesToString(Utils.getPacketOrStop(sock,size))
		theirKey,theirID = resp.split(";")
		self.addNewContact([theirKey, addressIP, theirID])
		self.connectToPeer(sock, addressIP)		
Ejemplo n.º 3
0
	def run(self):
		conn = None
		try:
			s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
			s.bind((self.sock.getsockname()[0],0))
			s.listen(1)
			message = Utils.FILE_REQUEST+Utils.intToBytes(len(self.filePath),2)+Utils.stringToBytes(self.filePath)+Utils.intToBytes(s.getsockname()[1],2)#need to also send ip address
			self.sock.send(message)
			conn,addr = s.accept()
			succ = True
			ret = Utils.bytesToInt(Utils.getPacketOrStop(conn,1,threads=(self)))
			if ret==0:
				raise CancelException()
			rec = Utils.getPacketOrStop(conn,9,threads=(self))
			control = rec[:4]
			if control==Utils.SEND_FILE_HEADER:
				size = Utils.bytesToInt(rec[5:])
				self.recieveFile(conn,size)
			elif control == Utils.FILE_NOT_EXIST_ERR:
				print("The Requested File Isn't Being Uploaded By The Peer")
				succ = False
			else:
				print("There Was An Error With The Specified File")
				succ = False
			conn.close()
			if succ:
				self.tree.set(self.treeItem,"progress","Done")
				self.tree.move(self.treeItem,'',0)
			else:
				self.tree.set(self.treeItem,"progress","Failed")
			self.managerMailbox.put(("THREAD",(self,self.filePath,succ,self.treeItem)))
		except CancelException:
			self.tree.set(self.treeItem,"progress","Canceled")
			self.setCanceled(True)
			self.cancelDownload(conn)
		except SystemExit:#stopped by another thread
			self.cancelDownload(conn)     
		except:
			print("caught")
			self.tree.set(self.treeItem,"progress","Failed")
			print(self.filePath)
			self.managerMailbox.put(("THREAD",(self,self.filePath,False,self.treeItem)))
Ejemplo n.º 4
0
	def exchangeIDs(self, sock):
		data = "" + self.username
		size = len(data)
		sock.send(Utils.ID_EXCHANGE_HEADER+Utils.intToBytes(size,4)+Utils.stringToBytes(data))
		control = Utils.getPacketOrStop(sock,4) 
		if control == Utils.ID_EXCHANGE_HEADER:
			size = Utils.bytesToInt(Utils.getPacketOrStop(sock,4))
			ID = Utils.bytesToString(Utils.getPacketOrStop(sock,size))
			return ID
		else:
			sock.close()
Ejemplo n.º 5
0
	def verifyResponse(self, sock, info, addressIP):
		while 1:
			control = Utils.getPacketOrStop(sock,4)
			print(control)
			if control == Utils.VERIFY_HEADER:
				size = Utils.bytesToInt(Utils.getPacketOrStop(sock,4))
				resp = Utils.bytesToString(Utils.getPacketOrStop(sock,size))
				myKey,theirID = resp.split(";")
				if info == None:
					info = self.getUserInfo(addressIP, theirID)
				return myKey == self.secretKey and not info == None and info[2] == theirID
			elif control== Utils.EXCHANGE_INFO_HEADER:
				return Utils.EXCHANGE_INFO_HEADER
			else:
				return False
Ejemplo n.º 6
0
	def exhangeInfoWithNewContact(self, sock, addressIP):
		data = "" + self.secretKey + ";" + self.username
		size = len(data)
		sock.send(Utils.EXCHANGE_INFO_HEADER+Utils.intToBytes(size,4)+Utils.stringToBytes(data))
		control = Utils.getPacketOrStop(sock,4) 
		if control == Utils.GO_AHEAD_HEADER:
			control = Utils.getPacketOrStop(sock,4) 
		if control == Utils.EXCHANGE_INFO_HEADER:
			size = Utils.bytesToInt(Utils.getPacketOrStop(sock,4))
			resp = Utils.bytesToString(Utils.getPacketOrStop(sock,size))
			theirKey,theirID = resp.split(";")
			self.addNewContact([theirKey, addressIP, theirID])
			
			self.connectToPeer(sock, addressIP)		
		else:
			sock.close()
Ejemplo n.º 7
0
	def run(self):
		while 1:
			control = Utils.getPacketOrStop(self.sock,4,function=self.listeningThread.disconnectThread,peer=self,isServer=True)
			print(control)
			if control == Utils.FILE_REQUEST:
				size = Utils.bytesToInt(Utils.getPacketOrStop(self.sock,2,function=self.listeningThread.disconnectThread,peer=self,isServer=True))
				fileName = Utils.bytesToString(Utils.getPacketOrStop(self.sock,size,function=self.listeningThread.disconnectThread,peer=self,isServer=True))
				port = Utils.bytesToInt(Utils.getPacketOrStop(self.sock,2,function=self.listeningThread.disconnectThread,peer=self,isServer=True))
				self.managerMailbox.put(("FILES",[self.ip,port,fileName]))
			elif control == Utils.MESSAGE_HEADER:
				size = Utils.bytesToInt(Utils.getPacketOrStop(self.sock,4,function=self.listeningThread.disconnectThread,peer=self,isServer=True))
				data = Utils.bytesToString(Utils.getPacketOrStop(self.sock,size,function=self.listeningThread.disconnectThread,peer=self,isServer=True))
				self.putOtherMessageInChat(data)
			elif control == Utils.LIST_HEADER:
				folderStruc = Utils.listfolder(Utils.UPLOADS_DIR)[0]
				encodedStruc = pickle.dumps(folderStruc)
				size = len(encodedStruc)
				self.sock.send(Utils.LIST_RES_HEADER+Utils.intToBytes(size,4)+encodedStruc)
			elif control == Utils.LIST_RES_HEADER:
				size = Utils.bytesToInt(Utils.getPacketOrStop(self.sock,4,function=self.listeningThread.disconnectThread,peer=self,isServer=True))
				self.peerFolderStruc = pickle.loads(Utils.getPacketOrStop(self.sock,size,function=self.listeningThread.disconnectThread,peer=self,isServer=True))
				strippedStruc = self.stripFolderStruc(self.peerFolderStruc,"")
				self.client.setFolderStruc(strippedStruc)
				if(self.listeningThread.isCurrentServer(self)):
					self.fillBrowseTree()
			elif control == Utils.QUERY_IP_HEADER:
				size = Utils.bytesToInt(Utils.getPacketOrStop(self.sock,4,function=self.listeningThread.disconnectThread,peer=self,isServer=True))
				ID = Utils.bytesToString(Utils.getPacketOrStop(self.sock,size,function=self.listeningThread.disconnectThread,peer=self,isServer=True))
				info = self.listeningThread.getUserInfo(None, ID)
				if(info is not None):
					data = "" + ID + ";" + info[1]
					size = len(data)
					self.sock.send(Utils.QUERY_IP_FOUND_HEADER+Utils.intToBytes(size,4)+Utils.stringToBytes(data))
				else:
					data = "" + ID
					size = len(data)
					self.sock.send(Utils.QUERY_IP_FAILED_HEADER+Utils.intToBytes(size,4)+Utils.stringToBytes(data))
			elif control == Utils.QUERY_IP_FAILED_HEADER:
				pass
			elif control == Utils.QUERY_IP_FOUND_HEADER:
				size = Utils.bytesToInt(Utils.getPacketOrStop(self.sock,4,function=self.listeningThread.disconnectThread,peer=self,isServer=True))
				resp = Utils.bytesToString(Utils.getPacketOrStop(self.sock,size,function=self.listeningThread.disconnectThread,peer=self,isServer=True))
				ID,IP = resp.split(";")
				self.listeningThread.foundIPAddress((IP, ID))
			elif control==Utils.BEAT_HEADER:
				pass