Beispiel #1
0
    def generate_data(self):
        if self.IS_COMMAND_RESTORED and not self._command_restored_request_sended:
            self._command_restored_request_sended = True
            self._load_client_data()

            if self._file_writer.start_file_size <= _config.package_size:
                start_from = 0
            else:
                start_from = self._file_writer.start_file_size - _config.package_size

            self._file_writer.seek(start_from)

            return generate_packet(CommandIds.DOWNLOAD_COMMAND_ID, ErrorIds.DOWNLOAD_START_FROM, str(start_from))

        if self._raise_finished:
            self._file_writer.close()
            delete_client_data()

            print("Download finished")
            print('time spent: %4fs' % (time.time() - self._start_time))
            raise CommandFinished

        if self._send_approve:
            self._raise_finished = True

            return generate_packet(CommandIds.DOWNLOAD_COMMAND_ID, ErrorIds.DOWNLOAD_SUCCESSFUL, "")

        if self._generate_request_package:
            self._generate_request_package = False
            return generate_packet(CommandIds.DOWNLOAD_COMMAND_ID, 0, self._server_file_path)
        else:
            return None
Beispiel #2
0
    def generate_data(self):
        if self._raise_command_finished:
            raise CommandFinished

        if self._send_response_flag:
            self._send_response_flag = False
            if self._session_reactivated:
                self.session_instance.command = self._reactivated_session.command
                LOG.info('Client %s:%d: logical connection restored' % self.session_instance.client_address)
                return generate_packet(CommandIds.CONNECT_COMMAND_ID, ErrorIds.CONNECT_SESSION_REACTIVATION, "")
            self._raise_command_finished = True
            LOG.info('Client %s:%d: logical connection established' % self.session_instance.client_address)
            return generate_packet(CommandIds.CONNECT_COMMAND_ID, ErrorIds.SUCCESSFUL, "")
        return None
Beispiel #3
0
    def generate_data(self):
        if self._raise_command_finished:
            raise CommandFinished

        self._raise_command_finished = True
        return generate_packet(CommandIds.TIME_COMMAND_ID, ErrorIds.SUCCESSFUL,
                               str(time.ctime()))
    def generate_data(self):
        if self._wait_for_approve:
            return

        if self._send_pointer_moved:
            self._send_pointer_moved = False
            return generate_packet(CommandIds.DOWNLOAD_COMMAND_ID,
                                   ErrorIds.DOWNLOAD_POINTER_MOVED, "")

        if self._raise_command_finished:
            raise CommandFinished

        if self._send_error:
            self._raise_command_finished = True
            return generate_packet(CommandIds.DOWNLOAD_COMMAND_ID,
                                   ErrorIds.ERROR, "File not found")

        # print("{}/{}".format(self._sended_bytes, self._file_size))

        if self._generate_first_packet:
            print("Generate download data")
            self._generate_first_packet = False
            header = generate_header(CommandIds.DOWNLOAD_COMMAND_ID,
                                     ErrorIds.SUCCESSFUL, self._file_size)

            if self._file_size + len(header) <= _config.package_size:
                package = header + self._file_descriptor.read()

                package = package + bytes(_config.package_size - len(package))
                self._wait_for_approve = True

                return package
            else:
                self._sended_bytes += _config.package_size - len(header)
                package = header + self._file_descriptor.read(
                    _config.package_size - len(header))
                return package
        else:
            read_data = self._file_descriptor.read(_config.package_size)

            self._sended_bytes += len(read_data)
            if len(read_data) < _config.package_size:
                self._wait_for_approve = True
                return read_data + bytes(_config.package_size - len(read_data))
            else:
                return read_data
    def _initialize(self, args_line):
        super()._initialize(args_line)
        self._send_request = True
        self._finish = False

        session = SessionManager().get_all_not_inactive_sessions()[0]
        client_uuid = session.client_uuid
        self._request = generate_packet(self.get_command_id(),
                                        ErrorIds.SUCCESSFUL, client_uuid)
        session.status = SessionStatus.wait_for_close
Beispiel #6
0
 def generate_data(self):
     if self._generate_next:
         self._generate_next = False
         client_data = load_client_data()
         if client_data:
             LOG.info(
                 'Last session was ended inappropriately. Trying to restore session'
             )
             self._client_uuid = client_data['uuid']
             self._need_reactivation = True
         else:
             self._client_uuid = str(uuid.uuid4())
         return generate_packet(CommandIds.CONNECT_COMMAND_ID, 0,
                                self._client_uuid)
     else:
         return None
 def generate_data(self):
     if self._generate_next:
         self._generate_next = False
         return generate_packet(CommandIds.TIME_COMMAND_ID, 0, "")
     else:
         return None