Updated dbus_bus_request_name
authorRadoslaw Pajak <r.pajak@samsung.com>
Thu, 27 Jun 2013 09:23:29 +0000 (11:23 +0200)
committerRadoslaw Pajak <r.pajak@samsung.com>
Thu, 27 Jun 2013 09:23:29 +0000 (11:23 +0200)
Added dbus_bus_add_match - because of differences and lack of documentation of kdus match adding it adds match to everything

dbus/dbus-bus.c
dbus/dbus-transport-kdbus.c
dbus/dbus-transport-kdbus.h

index 019298d..af005dc 100644 (file)
@@ -1249,7 +1249,7 @@ dbus_bus_request_name (DBusConnection *connection,
        }
        else
        {
-               if(!bus_register_kdbus_policy(name, connection, error))  //todo should it be here?
+               if(!bus_register_kdbus_policy(name, connection, error))  //todo check what to do with policy if program doesn't use dbus_bus_request_name
                        return -1;
 
                result = bus_request_name_kdbus(connection, name, flags, error);
@@ -1612,32 +1612,37 @@ dbus_bus_add_match (DBusConnection *connection,
                     const char     *rule,
                     DBusError      *error)
 {
-  DBusMessage *msg;
+       _dbus_return_if_fail (rule != NULL);
 
-  _dbus_return_if_fail (rule != NULL);
+       if(!dbus_transport_is_kdbus(connection))
+       {
+               DBusMessage *msg;
 
-  msg = dbus_message_new_method_call (DBUS_SERVICE_DBUS,
+               msg = dbus_message_new_method_call (DBUS_SERVICE_DBUS,
                                       DBUS_PATH_DBUS,
                                       DBUS_INTERFACE_DBUS,
                                       "AddMatch");
 
-  if (msg == NULL)
-    {
-      _DBUS_SET_OOM (error);
-      return;
-    }
+         if (msg == NULL)
+               {
+                 _DBUS_SET_OOM (error);
+                 return;
+               }
 
-  if (!dbus_message_append_args (msg, DBUS_TYPE_STRING, &rule,
-                                 DBUS_TYPE_INVALID))
-    {
-      dbus_message_unref (msg);
-      _DBUS_SET_OOM (error);
-      return;
-    }
+         if (!dbus_message_append_args (msg, DBUS_TYPE_STRING, &rule,
+                                                                        DBUS_TYPE_INVALID))
+               {
+                 dbus_message_unref (msg);
+                 _DBUS_SET_OOM (error);
+                 return;
+               }
 
-  send_no_return_values (connection, msg, error);
+         send_no_return_values (connection, msg, error);
 
-  dbus_message_unref (msg);
+         dbus_message_unref (msg);
+       }
+       else
+               dbus_bus_add_match_kdbus(connection, rule, error);
 }
 
 /**
index 204a50e..72dac3c 100644 (file)
@@ -1603,9 +1603,12 @@ uint64_t bus_request_name_kdbus(DBusConnection *connection, const char *name, co
 
        _dbus_verbose("Request name - flags sent: 0x%llx       !!!!!!!!!\n", cmd_name->conn_flags);
 
+       _DBUS_ASSERT_ERROR_IS_CLEAR (error);
        if (ioctl(fd, KDBUS_CMD_NAME_ACQUIRE, cmd_name))
        {
                dbus_set_error(error,_dbus_error_from_errno (errno), "error acquiring name: %s", _dbus_strerror (errno));
+               if(errno == EEXIST)
+                       return DBUS_REQUEST_NAME_REPLY_EXISTS;
                return FALSE;
        }
 
@@ -1615,7 +1618,7 @@ uint64_t bus_request_name_kdbus(DBusConnection *connection, const char *name, co
                return DBUS_REQUEST_NAME_REPLY_IN_QUEUE;
        else
                return DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER;
-       //todo now 2 codes are never returned - DBUS_REQUEST_NAME_REPLY_EXISTS and DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER
+       //todo now 1 codes are never returned -  DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER
 }
 
 /**
@@ -1633,3 +1636,29 @@ dbus_bool_t dbus_transport_is_kdbus(DBusConnection *connection)
        else
                return FALSE;
 }
+
+void dbus_bus_add_match_kdbus (DBusConnection *connection, const char *rule, DBusError *error)
+{
+       struct kdbus_cmd_match cmd_match;
+       int fd;
+
+       memset(&cmd_match, 0, sizeof(cmd_match));
+
+       if(!dbus_connection_get_socket(connection, &fd))
+       {
+               dbus_set_error (error, "failed to get fd for add match", NULL);
+               return;
+       }
+
+       cmd_match.size = sizeof(cmd_match);
+
+       //todo add matching rules from *rule when it will be docuemnted in kdbus
+
+
+       cmd_match.src_id = KDBUS_MATCH_SRC_ID_ANY;
+
+       if (ioctl(fd, KDBUS_CMD_MATCH_ADD, &cmd_match))
+               dbus_set_error(error,_dbus_error_from_errno (errno), "error adding match: %s", _dbus_strerror (errno));
+
+       _dbus_verbose("Finished adding match bus rule %s             !!!!!!!!!\n", rule);
+}
index 40ee6f5..8440554 100644 (file)
@@ -10,3 +10,4 @@ DBusTransportOpenResult _dbus_transport_open_kdbus(DBusAddressEntry *entry, DBus
 dbus_bool_t bus_register_kdbus(char** uniqe_name, DBusConnection *connection, DBusError *error);
 dbus_bool_t bus_register_kdbus_policy(const char* name, DBusConnection *connection, DBusError *error);
 uint64_t bus_request_name_kdbus(DBusConnection *connection, const char *name, const uint64_t flags, DBusError *error);
+void dbus_bus_add_match_kdbus (DBusConnection *connection, const char *rule, DBusError *error);