예제 #1
0
 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')
예제 #2
0
 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))
예제 #3
0
 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
예제 #4
0
 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))
예제 #5
0
 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!')
예제 #6
0
 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()
예제 #7
0
 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!')