Changeset 7a29b47 in rtems-tools


Ignore:
Timestamp:
Sep 7, 2020, 12:07:11 AM (3 weeks ago)
Author:
Chris Johns <chrisj@…>
Branches:
master
Children:
b1c6a98
Parents:
eb36081
Message:

tester: Fix TFTP server Python2 issues.

  • Add a --show-backtrace option to make it easier for users to get an exception backtrace if something goes wrong.
  • Fix the --packet-trace option so it actually decodes the packets
File:
1 edited

Legend:

Unmodified
Added
Removed
  • tester/rt/tftpserver.py

    reb36081 r7a29b47  
    8383        # These are here to shut pylint up
    8484        self.block = 0
     85        self.last_data = None
    8586        self.block_size = 512
    8687        self.timeout = 0
     
    9697            self.filein = None
    9798        self.block = 0
     99        self.last_data = None
    98100        self.block_size = 512
    99101        self.timeout = 0
     
    167169        bdata = self._pack_bytes([code, data])
    168170        #print(''.join(format(x, '02x') for x in bdata))
    169         return bytes(bdata)
     171        return bdata
    170172
    171173    def _error_response(self, code, message):
     
    194196            self.block += 1
    195197            err, data = self.data_reader('read', blksize=self.block_size)
     198            data = bytearray(data)
    196199            if err != self.E_NO_ERROR:
    197200                return self._error_response(err, data)
     
    199202            if len(data) < self.block_size:
    200203                self.data_reader('close')
     204            self.last_data = data
    201205        else:
    202206            self.resends += 1
     
    204208                return self._error_response(self.E_NOT_DEFINED,
    205209                                            'resend limit reached')
     210            data = self.last_data
    206211        return self._data_response(self.block, data)
    207212
     
    388393        # pylint: disable=broad-except
    389394        # pylint: disable=too-many-branches
     395        # pylint: disable=too-many-statements
    390396        client_ip = self.client_address[0]
    391397        client_port = self.client_address[1]
     
    397403                                   self.server.tftp.forced_file,
    398404                                   self.server.tftp.reader)
    399             response = session.process(client_ip, client_port, self.request[0])
     405            data = bytearray(self.request[0])
     406            response = session.process(client_ip, client_port, data)
    400407            if response is not None:
    401408                if log.tracing and self.server.tftp.packet_trace:
    402                     log.trace(' > ' + session.decode(client_ip, client_port,
    403                                                      self.request[0]))
     409                    log.trace(' > ' +
     410                              session.decode(client_ip, client_port, data))
    404411                timeout = session.get_timeout(self.server.tftp.timeout, 1)
    405412                sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
     
    417424                        data, address = sock.recvfrom(2 + 2 +
    418425                                                      session.get_block_size())
     426                        data = bytearray(data)
    419427                        if log.tracing and self.server.tftp.packet_trace:
    420428                            log.trace(
     
    441449            pass
    442450        except Exception as exp:
     451            if self.server.tftp.exception_is_raise:
     452                raise
    443453            self._notice('] tftp: %d: error: %s: %s' % (index, type(exp), exp))
    444454        self._notice('] tftp: %d: end: %s' % (index, client))
     
    473483        self.notices = False
    474484        self.packet_trace = False
     485        self.exception_is_raise = False
    475486        self.timeout = timeout
    476487        self.host = host
     
    581592        self._unlock()
    582593
     594    def except_is_raise(self):
     595        '''If True a standard exception will generate a backtrace.'''
     596        self.exception_is_raise = True
     597
    583598
    584599def load_log(logfile):
     
    594609    # pylint: disable=dangerous-default-value
    595610    # pylint: disable=unused-argument
     611    # pylint: disable=too-many-branches
    596612    # pylint: disable=too-many-statements
    597613    ecode = 0
     
    620636        argsp.add_argument('--trace-packets',
    621637                           help='enable trace logging of packets.',
     638                           action='store_true',
     639                           default=False)
     640        argsp.add_argument('--show-backtrace',
     641                           help='show the exception backtrace.',
    622642                           action='store_true',
    623643                           default=False)
     
    666686                             argopts.sessions)
    667687        server.enable_notices()
     688        if argopts.trace_packets:
     689            server.trace_packets()
     690        if argopts.show_backtrace:
     691            server.except_is_raise()
    668692
    669693        try:
Note: See TracChangeset for help on using the changeset viewer.