def upload(self, filename: str): payload = filename.encode('utf-8') timestamp = get_current_timestamp() self.sequence_number_client += 1 # Initiate connection message = FileTransferMessage.FileTransferMessage(self.own_address, FileTransferMessageTypes.NEW_UPL, timestamp, payload, self.sequence_number_client) self.networkInterface.send_msg(self.server_address, encrypt_message(message, self.session_key)) print('NEW_UPL message sent. Waiting for answer...') status, rsp = self.networkInterface.receive_msg(blocking=True) if status: response = decrypt_message(rsp, self.session_key) # Ha kapott ACK-t, akkor küld egy SEND-et, majd az adatokat if response.type == FileTransferMessageTypes.UPL_NEW_ACK: print('Response (UPL_NEW_ACK): ') response.print() print('Sending SEND') timestamp = get_current_timestamp() self.sequence_number_client += 1 message = FileTransferMessage.FileTransferMessage(self.own_address, FileTransferMessageTypes.SEND, timestamp, payload, self.sequence_number_client) self.networkInterface.send_msg(self.server_address, encrypt_message(message, self.session_key)) print('Uploading file...') self.send_file(filename) else: print('Wrong message type!') else: print('No answer arrived in 2 seconds')
def init_download(self, filename: str): timestamp = get_current_timestamp() payload = filename.encode('utf-8') self.sequence_number_server += 1 message = FileTransferMessage.FileTransferMessage(self.own_address, FileTransferMessageTypes.DNL_NEW_ACK, timestamp, payload, self.sequence_number_server) self.networkInterface.send_msg(self.active_client, encrypt_message(message, self.session_key)) self.sequence_number_server += 1 message = FileTransferMessage.FileTransferMessage(self.own_address, FileTransferMessageTypes.SEND, timestamp, payload, self.sequence_number_server) self.networkInterface.send_msg(self.active_client, encrypt_message(message, self.session_key))
def send_file(self, filename: str): last = False f = open(self.currentDir + '/' + filename, 'rb') while not last: timestamp = get_current_timestamp() self.sequence_number_server += 1 payload = f.read(2048) if len(payload) < 2048: last = True f.close() payload.ljust(512, '0'.encode('utf-8')) # padding message = FileTransferMessage.FileTransferMessage(self.own_address, FileTransferMessageTypes.DAT, timestamp, payload, self.sequence_number_server, last) self.networkInterface.send_msg(self.active_client, encrypt_message(message, self.session_key)) # Miután elküldött mindent, vár egy FIN-üzenetre, hogy a kliens megkapta-e az utolsó darabot is # Ha megkapja, akkor nyugtázza if last: status, rsp = self.networkInterface.receive_msg(blocking=True) response = decrypt_message(rsp, self.session_key) if response.type == FileTransferMessageTypes.FIN: print('FIN received, closing download...') response.print() self.close_download(filename) print('Done.') break
def close_upload(self, filename: str): timestamp = get_current_timestamp() payload = filename.encode('utf-8') self.sequence_number_client += 1 message = FileTransferMessage.FileTransferMessage(self.own_address, FileTransferMessageTypes.ACK_FIN, timestamp, payload, self.sequence_number_client) self.networkInterface.send_msg(self.server_address, encrypt_message(message, self.session_key))
def download(self, filename: str): payload = filename.encode('utf-8') timestamp = get_current_timestamp() self.sequence_number_client += 1 # Initiate connection message = FileTransferMessage.FileTransferMessage(self.own_address, FileTransferMessageTypes.NEW_DNL, timestamp, payload, self.sequence_number_client) self.networkInterface.send_msg(self.server_address, encrypt_message(message, self.session_key)) # Waiting for response status, rsp = self.networkInterface.receive_msg(blocking=True) if status: response = decrypt_message(rsp, self.session_key) if response.type == FileTransferMessageTypes.DNL_NEW_ACK: print('Response (DNL_NEW_ACK): ') response.print() status, rsp = self.networkInterface.receive_msg(blocking=True) if status: response = decrypt_message(rsp, self.session_key) print('Response (SND): ') response.print() if response.type == FileTransferMessageTypes.SEND: self.save_file(filename) else: print('Wrong message type!') else: print('No answer arrived!')
def init_upload(self, filename: str): timestamp = get_current_timestamp() payload = filename.encode('utf-8') self.sequence_number_server += 1 message = FileTransferMessage.FileTransferMessage(self.own_address, FileTransferMessageTypes.UPL_NEW_ACK, timestamp, payload, self.sequence_number_server) self.networkInterface.send_msg(self.active_client, encrypt_message(message, self.session_key)) status, rsp = self.networkInterface.receive_msg(blocking=True) response = decrypt_message(rsp, self.session_key) if response.type == FileTransferMessageTypes.SEND: print('Response (SND):') response.print()
def close_download(self, filename: str): timestamp = get_current_timestamp() payload = filename.encode('utf-8') self.sequence_number_client += 1 message = FileTransferMessage.FileTransferMessage(self.own_address, FileTransferMessageTypes.FIN, timestamp, payload, self.sequence_number_client) self.networkInterface.send_msg(self.server_address, encrypt_message(message, self.session_key)) status, rsp = self.networkInterface.receive_msg(blocking=True) if status: response = decrypt_message(rsp, self.session_key) if response.type == FileTransferMessageTypes.ACK_FIN: print('Response (ACK_FIN):') response.print() else: print('Invalid message type!') else: print('No answer received!')