Added dbus_bus_add_match - because of differences and lack of documentation of kdus match adding it adds match to everything
}
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);
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);
}
/**
_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;
}
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
}
/**
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);
+}
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);