Ejemplo n.º 1
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
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 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.º 4
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.º 5
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()