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#ifndef SSS_SIFP_PRIVATE_H_
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina#define SSS_SIFP_PRIVATE_H_
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina#include <dbus/dbus.h>
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina#include "lib/sifp/sss_sifp.h"
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinavoid *sss_sifp_alloc_zero(sss_sifp_ctx *ctx, size_t size, size_t num);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina#define _alloc_zero(ctx, type, num) sss_sifp_alloc_zero(ctx, sizeof(type), num)
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina#define _free(ctx, var) \
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina do { \
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina ctx->free_fn((var), ctx->alloc_pvt); \
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina (var) = NULL; \
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina } while (0)
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinastruct sss_sifp_ctx {
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina DBusConnection *conn;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina sss_sifp_alloc_func *alloc_fn;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina sss_sifp_free_func *free_fn;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina void *alloc_pvt;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina DBusError *io_error;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina};
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinaenum sss_sifp_attr_type {
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina SSS_SIFP_ATTR_TYPE_BOOL,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina SSS_SIFP_ATTR_TYPE_INT16,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina SSS_SIFP_ATTR_TYPE_UINT16,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina SSS_SIFP_ATTR_TYPE_INT32,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina SSS_SIFP_ATTR_TYPE_UINT32,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina SSS_SIFP_ATTR_TYPE_INT64,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina SSS_SIFP_ATTR_TYPE_UINT64,
efa6c1f75c4c18bcc148d6e7efd429c2d56499adPavel Březina SSS_SIFP_ATTR_TYPE_STRING,
efa6c1f75c4c18bcc148d6e7efd429c2d56499adPavel Březina SSS_SIFP_ATTR_TYPE_STRING_DICT
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina};
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina/**
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina * D-Bus object attribute
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina */
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinastruct sss_sifp_attr {
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina char *name;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina enum sss_sifp_attr_type type;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina unsigned int num_values;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina union {
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina bool *boolean;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina int16_t *int16;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina uint16_t *uint16;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina int32_t *int32;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina uint32_t *uint32;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina int64_t *int64;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina uint64_t *uint64;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina char **str;
efa6c1f75c4c18bcc148d6e7efd429c2d56499adPavel Březina hash_table_t *str_dict;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina } data;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina};
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinavoid
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_set_io_error(sss_sifp_ctx *ctx,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina DBusError *error);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinachar *
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_strdup(sss_sifp_ctx *ctx,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina const char *str);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinachar *
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_strcat(sss_sifp_ctx *ctx,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina const char *str1,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina const char *str2);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_error
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_parse_attr(sss_sifp_ctx *ctx,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina const char *name,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina DBusMessage *msg,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina sss_sifp_attr ***_attrs);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_error
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_parse_attr_list(sss_sifp_ctx *ctx,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina DBusMessage *msg,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina sss_sifp_attr ***_attrs);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_error
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_parse_object_path(sss_sifp_ctx *ctx,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina DBusMessage *msg,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina char **_object_path);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_error
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinasss_sifp_parse_object_path_list(sss_sifp_ctx *ctx,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina DBusMessage *msg,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina char ***_object_paths);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina#endif /* SSS_SIFP_PRIVATE_H_ */