diff options
Diffstat (limited to 'python/dbus_bindings.pyx.in')
| -rw-r--r-- | python/dbus_bindings.pyx.in | 40 | 
1 files changed, 28 insertions, 12 deletions
diff --git a/python/dbus_bindings.pyx.in b/python/dbus_bindings.pyx.in index 2e575edc..085a73fa 100644 --- a/python/dbus_bindings.pyx.in +++ b/python/dbus_bindings.pyx.in @@ -53,6 +53,8 @@ ctypedef struct DBusObjectPathVTable:    void (* dbus_internal_pad4) (void *) +_user_data_references = [ ] +  class DBusException(Exception):      pass @@ -72,6 +74,7 @@ cdef DBusHandlerResult cmessage_function_handler (DBusConnection *connection,                                                    void *user_data):      print ("cmessage_function_handler() called")      tup = <object>user_data +    print (type(tup))      print (tup)      function = tup[1]      message = Message(_create=0) @@ -102,7 +105,7 @@ cdef class Connection:      # FIXME: this is a major major hack. We use this because casting values to      # python objects and returning seemed to be corrupting them. This is a "global variable" :-(      cdef char **_parsed_path -     +      def __init__(self, address=None, _conn=None):          cdef DBusError error          dbus_error_init(&error) @@ -301,7 +304,8 @@ cdef class Connection:          cvtable.message_function    = cmessage_function_handler          user_data = [unregister_cb, message_cb] -        #Py_XINCREF(user_data) +        global _user_data_references +        _user_data_references.append(user_data)          path_element_list = path[1:].split('/')          self._build_parsed_path(path_element_list) @@ -316,9 +320,8 @@ cdef class Connection:          cvtable.message_function    = cmessage_function_handler          user_data = [unregister_cb, message_cb] -        Py_XINCREF(user_data) - -        print ("Ref inced") +        global _user_data_references +        _user_data_references.append(user_data)                  path_element_list = path[1:].split('/')          self._build_parsed_path(path_element_list) @@ -586,8 +589,11 @@ cdef class MessageIter:  cdef class Message:      cdef DBusMessage *msg -    def __init__(self, message_type=MESSAGE_TYPE_INVALID, service=None, path=None, interface=None, -                 method=None, name=None, reply_to=None, error_name=None, error_message=None, +    def __init__(self, message_type=MESSAGE_TYPE_INVALID, +                 service=None, path=None, interface=None, method=None, +                 method_call=None, +                 name=None, +                 reply_to=None, error_name=None, error_message=None,                   _create=1):          cdef char *cservice          if (service == None): @@ -596,18 +602,20 @@ cdef class Message:              cservice = service          if not _create: -            return 0 +            return          if message_type == MESSAGE_TYPE_METHOD_CALL:              self.msg = dbus_message_new_method_call(cservice, path, interface, method)          elif message_type == MESSAGE_TYPE_METHOD_RETURN: -            msg = method_call._get_msg() -            self.msg = dbus_message_new_method_return(<DBusMessage*>msg) +            print ("Doing this") +            cmsg = method_call._get_msg() +            self.msg = dbus_message_new_method_return(<DBusMessage*>cmsg) +            print ("Done")          elif message_type == MESSAGE_TYPE_SIGNAL:              self.msg = dbus_message_new_signal(path, interface, name)          elif message_type == MESSAGE_TYPE_ERROR: -            msg = reply_to._get_msg() -            self.msg = dbus_message_new_error(<DBusMessage*>msg, error_name, error_message) +            cmsg = reply_to._get_msg() +            self.msg = dbus_message_new_error(<DBusMessage*>cmsg, error_name, error_message)      def type_to_name(self, type):          if type == MESSAGE_TYPE_SIGNAL: @@ -797,6 +805,14 @@ class MethodCall(Message):      def __init__(self, mpath, minterface, mmethod):          Message.__init__(self, MESSAGE_TYPE_METHOD_CALL, path=mpath, interface=minterface, method=mmethod) +class MethodReturn(Message): +    def __init__(self, method_call): +        Message.__init__(self, MESSAGE_TYPE_METHOD_RETURN, method_call=method_call) + +class Error(Message): +    def __init__(self, reply_to, error_name, error_message): +        Message.__init__(self, MESSAGE_TYPE_ERROR, reply_to=reply_to, error_name=error_name, error_message=error_message) +          cdef class Server:      cdef DBusServer *server      def __init__(self, address):  | 
