From 6c6c0f63f5cb24023b91d1f8dff36d3ecae42022 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Lowas-Rzechonek?= Date: Wed, 18 Dec 2019 11:41:16 +0100 Subject: [PATCH] Don't send method returns replies when caller doesn't want them --- dbus_next/message_bus.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/dbus_next/message_bus.py b/dbus_next/message_bus.py index d20e371..6f92ca0 100644 --- a/dbus_next/message_bus.py +++ b/dbus_next/message_bus.py @@ -540,22 +540,28 @@ def _process_message(self, msg): elif msg.message_type == MessageType.METHOD_CALL: if not handled: handler = self._find_message_handler(msg) + + send_reply = self.send + + if msg.flags & MessageFlag.NO_REPLY_EXPECTED: + send_reply = lambda msg: None + if handler: try: result = handler(msg) if type(result) is Message: - self.send(result) + send_reply(result) except DBusError as e: - self.send(e._as_message(msg)) + send_reply(e._as_message(msg)) except Exception as e: - self.send( + send_reply( Message.new_error( msg, ErrorType.SERVICE_ERROR, f'The service interface raised an error: {e}.\n{traceback.format_exc()}' )) else: - self.send( + send_reply( Message.new_error( msg, ErrorType.UNKNOWN_METHOD, f'{msg.interface}.{msg.member} with signature "{msg.signature}" could not be found'