diff --git a/build_ext.py b/build_ext.py index 9be33690..5eaf0a37 100644 --- a/build_ext.py +++ b/build_ext.py @@ -25,6 +25,7 @@ def build(setup_kwargs): "src/dbus_fast/aio/message_reader.py", "src/dbus_fast/message.py", "src/dbus_fast/message_bus.py", + "src/dbus_fast/service.py", "src/dbus_fast/signature.py", "src/dbus_fast/unpack.py", "src/dbus_fast/_private/marshaller.py", diff --git a/src/dbus_fast/message_bus.pxd b/src/dbus_fast/message_bus.pxd index 01a182fb..d3ea2046 100644 --- a/src/dbus_fast/message_bus.pxd +++ b/src/dbus_fast/message_bus.pxd @@ -1,15 +1,17 @@ import cython from .message cimport Message +from .service cimport ServiceInterface, _Method cdef object MessageType cdef object DBusError cdef object MessageFlag -cdef object ServiceInterface cdef object MESSAGE_TYPE_CALL cdef object MESSAGE_TYPE_SIGNAL +cdef object assert_object_path_valid +cdef object assert_bus_name_valid cdef class SendReply: @@ -39,4 +41,8 @@ cdef class BaseMessageBus: cpdef _process_message(self, Message msg) + @cython.locals( + method=_Method, + interface=ServiceInterface + ) cdef _find_message_handler(self, Message msg) diff --git a/src/dbus_fast/message_bus.py b/src/dbus_fast/message_bus.py index 9327bc22..3dc9e3ab 100644 --- a/src/dbus_fast/message_bus.py +++ b/src/dbus_fast/message_bus.py @@ -886,7 +886,16 @@ def handler(msg: Message, send_reply: Callable[[Message], None]) -> None: signature_tree=method.out_signature_tree, replace_fds=self._negotiate_unix_fd, ) - send_reply(Message.new_method_return(msg, method.out_signature, body, fds)) + send_reply( + Message( + message_type=MessageType.METHOD_RETURN, + reply_serial=msg.serial, + destination=msg.sender, + signature=method.out_signature, + body=body, + unix_fds=fds, + ) + ) return handler diff --git a/src/dbus_fast/service.pxd b/src/dbus_fast/service.pxd new file mode 100644 index 00000000..b15c7bd7 --- /dev/null +++ b/src/dbus_fast/service.pxd @@ -0,0 +1,24 @@ +"""cdefs for service.py""" + +import cython + + +cdef class _Method: + + cdef public object name + cdef public object fn + cdef public object disabled + cdef public object introspection + cdef public object in_signature + cdef public object out_signature + cdef public object in_signature_tree + cdef public object out_signature_tree + +cdef class ServiceInterface: + + cdef public object name + cdef list __methods + cdef list __properties + cdef list __signals + cdef set __buses + cdef dict __handlers