code: def _send_rpc_response(self, *packets):
          
  
          if len(packets) == 0:
              return
  
          handle, payload = packets[0]
  
          try:
              self._send_notification(handle, payload)
          except bable_interface.BaBLEException as err:
              if err.packet.status == 'Rejected':  # If we are streaming too fast, back off and try again
                  time.sleep(0.05)
                  self._defer(self._send_rpc_response, list(packets))
              else:
                  self._audit('ErrorSendingRPCResponse')
                  self._logger.exception("Error while sending RPC response, handle=%s, payload=%s", handle, payload)
  
              return
  
          if len(packets) > 1:
              self._defer(self._send_rpc_response, list(packets[1:]))
docs: Send an RPC response.
          It is executed in the baBLE working thread: should not be blocking.
  
          The RPC response is notified in one or two packets depending on whether or not
          response data is included. If there is a temporary error sending one of the packets
          it is retried automatically. If there is a permanent error, it is logged and the response
          is abandoned.