91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina/*
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina Authors:
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina Pavel Březina <pbrezina@redhat.com>
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina Copyright (C) 2014 Red Hat
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina This program is free software; you can redistribute it and/or modify
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina it under the terms of the GNU General Public License as published by
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina the Free Software Foundation; either version 3 of the License, or
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina (at your option) any later version.
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina This program is distributed in the hope that it will be useful,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina but WITHOUT ANY WARRANTY; without even the implied warranty of
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina GNU General Public License for more details.
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina You should have received a copy of the GNU General Public License
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina along with this program. If not, see <http://www.gnu.org/licenses/>.
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina*/
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina#include <dbus/dbus.h>
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina#include <stdlib.h>
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina#include <string.h>
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina#include "lib/sifp/sss_sifp.h"
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina#include "lib/sifp/sss_sifp_dbus.h"
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina#include "lib/sifp/sss_sifp_private.h"
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinastatic sss_sifp_error sss_sifp_ifp_call(sss_sifp_ctx *ctx,
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina const char *object_path,
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina const char *interface,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina const char *method,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina int first_arg_type,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina va_list ap,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina DBusMessage **_reply)
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina{
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina DBusMessage *msg = NULL;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina sss_sifp_error ret;
de5160e354c02020f0593c7cabdb811107d5d8e2Pavel Březina dbus_bool_t bret;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina if (object_path == NULL || interface == NULL || method == NULL) {
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina return SSS_SIFP_INVALID_ARGUMENT;
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina }
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina msg = sss_sifp_create_message(object_path, interface, method);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina if (msg == NULL) {
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina ret = SSS_SIFP_OUT_OF_MEMORY;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina goto done;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina }
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina if (first_arg_type != DBUS_TYPE_INVALID) {
de5160e354c02020f0593c7cabdb811107d5d8e2Pavel Březina bret = dbus_message_append_args_valist(msg, first_arg_type, ap);
de5160e354c02020f0593c7cabdb811107d5d8e2Pavel Březina if (!bret) {
de5160e354c02020f0593c7cabdb811107d5d8e2Pavel Březina ret = SSS_SIFP_IO_ERROR;
de5160e354c02020f0593c7cabdb811107d5d8e2Pavel Březina goto done;
de5160e354c02020f0593c7cabdb811107d5d8e2Pavel Březina }
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina }
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina ret = sss_sifp_send_message(ctx, msg, _reply);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinadone:
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina if (msg != NULL) {
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina dbus_message_unref(msg);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina }
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina return ret;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina}
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel BřezinaDBusMessage *
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_create_message(const char *object_path,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina const char *interface,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina const char *method)
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina{
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina return dbus_message_new_method_call(SSS_SIFP_ADDRESS, object_path,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina interface, method);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina}
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_error
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_send_message(sss_sifp_ctx *ctx,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina DBusMessage *msg,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina DBusMessage **_reply)
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina{
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina return sss_sifp_send_message_ex(ctx, msg, 5000, _reply);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina}
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_error
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_send_message_ex(sss_sifp_ctx *ctx,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina DBusMessage *msg,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina int timeout,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina DBusMessage **_reply)
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina{
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina DBusMessage *reply = NULL;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina DBusError dbus_error;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina sss_sifp_error ret;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina if (ctx == NULL || msg == NULL) {
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina return SSS_SIFP_INVALID_ARGUMENT;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina }
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina dbus_error_init(&dbus_error);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina reply = dbus_connection_send_with_reply_and_block(ctx->conn, msg,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina timeout, &dbus_error);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina if (dbus_error_is_set(&dbus_error)) {
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina sss_sifp_set_io_error(ctx, &dbus_error);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina ret = SSS_SIFP_IO_ERROR;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina goto done;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina }
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina if (_reply == NULL) {
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina dbus_message_unref(reply);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina } else {
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina *_reply = reply;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina }
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina ret = SSS_SIFP_OK;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinadone:
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina dbus_error_free(&dbus_error);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina return ret;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina}
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březinastatic sss_sifp_error
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březinasss_sifp_invoke_list_va(sss_sifp_ctx *ctx,
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina const char *object_path,
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina const char *interface,
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina const char *method,
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina char ***_object_paths,
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina int first_arg_type,
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina va_list ap)
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina{
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina DBusMessage *reply = NULL;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina char *dbus_method = NULL;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina sss_sifp_error ret;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina if (ctx == NULL || method == NULL || _object_paths == NULL) {
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina return SSS_SIFP_INVALID_ARGUMENT;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina }
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina dbus_method = sss_sifp_strcat(ctx, "List", method);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina if (dbus_method == NULL) {
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina ret = SSS_SIFP_OUT_OF_MEMORY;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina goto done;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina }
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina ret = sss_sifp_ifp_call(ctx, object_path, interface, dbus_method,
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina first_arg_type, ap, &reply);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina if (ret != SSS_SIFP_OK) {
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina goto done;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina }
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina ret = sss_sifp_parse_object_path_list(ctx, reply, _object_paths);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinadone:
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina sss_sifp_free_string(ctx, &dbus_method);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina if (reply != NULL) {
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina dbus_message_unref(reply);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina }
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina return ret;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina}
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_error
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březinasss_sifp_invoke_list_ex(sss_sifp_ctx *ctx,
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina const char *object_path,
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina const char *interface,
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina const char *method,
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina char ***_object_paths,
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina int first_arg_type,
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina ...)
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina{
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina va_list ap;
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina sss_sifp_error ret;
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina va_start(ap, first_arg_type);
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina ret = sss_sifp_invoke_list_va(ctx, object_path, interface, method,
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina _object_paths, first_arg_type, ap);
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina va_end(ap);
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina return ret;
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina}
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březinasss_sifp_error
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březinasss_sifp_invoke_list(sss_sifp_ctx *ctx,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina const char *method,
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina char ***_object_paths,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina int first_arg_type,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina ...)
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina{
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina va_list ap;
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina sss_sifp_error ret;
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina va_start(ap, first_arg_type);
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina ret = sss_sifp_invoke_list_ex(ctx, SSS_SIFP_PATH, SSS_SIFP_IFACE, method,
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina _object_paths, first_arg_type, ap);
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina va_end(ap);
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina return ret;
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina}
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březinastatic sss_sifp_error
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březinasss_sifp_invoke_find_va(sss_sifp_ctx *ctx,
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina const char *object_path,
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina const char *interface,
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina const char *method,
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina char **_object_path,
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina int first_arg_type,
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina va_list ap)
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina{
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina DBusMessage *reply = NULL;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina char *dbus_method = NULL;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina sss_sifp_error ret;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina if (ctx == NULL || method == NULL || _object_path == NULL) {
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina return SSS_SIFP_INVALID_ARGUMENT;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina }
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina dbus_method = sss_sifp_strcat(ctx, "Find", method);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina if (dbus_method == NULL) {
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina ret = SSS_SIFP_OUT_OF_MEMORY;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina goto done;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina }
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina ret = sss_sifp_ifp_call(ctx, object_path, interface, dbus_method,
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina first_arg_type, ap, &reply);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina if (ret != SSS_SIFP_OK) {
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina goto done;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina }
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina ret = sss_sifp_parse_object_path(ctx, reply, _object_path);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinadone:
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina sss_sifp_free_string(ctx, &dbus_method);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina if (reply != NULL) {
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina dbus_message_unref(reply);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina }
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina return ret;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina}
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březinasss_sifp_error
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březinasss_sifp_invoke_find_ex(sss_sifp_ctx *ctx,
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina const char *object_path,
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina const char *interface,
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina const char *method,
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina char **_object_path,
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina int first_arg_type,
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina ...)
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina{
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina va_list ap;
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina sss_sifp_error ret;
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina va_start(ap, first_arg_type);
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina ret = sss_sifp_invoke_find_va(ctx, object_path, interface, method,
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina _object_path, first_arg_type, ap);
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina va_end(ap);
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina return ret;
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina}
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březinasss_sifp_error
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březinasss_sifp_invoke_find(sss_sifp_ctx *ctx,
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina const char *method,
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina char **_object_path,
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina int first_arg_type,
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina ...)
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina{
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina va_list ap;
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina sss_sifp_error ret;
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina va_start(ap, first_arg_type);
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina ret = sss_sifp_invoke_find_va(ctx, SSS_SIFP_PATH, SSS_SIFP_IFACE, method,
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina _object_path, first_arg_type, ap);
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina va_end(ap);
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina return ret;
2a45f13e3139063d3a5842119e7377c8c98aea1dPavel Březina}