d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina/*
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina Authors:
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina Pavel Březina <pbrezina@redhat.com>
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina Copyright (C) 2016 Red Hat
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina This program is free software; you can redistribute it and/or modify
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina it under the terms of the GNU General Public License as published by
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina the Free Software Foundation; either version 3 of the License, or
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina (at your option) any later version.
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina This program is distributed in the hope that it will be useful,
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina but WITHOUT ANY WARRANTY; without even the implied warranty of
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina GNU General Public License for more details.
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina You should have received a copy of the GNU General Public License
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina along with this program. If not, see <http://www.gnu.org/licenses/>.
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina*/
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina#ifndef _DP_REQUEST_H_
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina#define _DP_REQUEST_H_
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina#include <talloc.h>
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina#include "providers/data_provider/dp.h"
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březinastruct data_provider;
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březinastruct dp_client;
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březinaenum dp_targets;
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březinaenum dp_methods;
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březinastruct tevent_req *dp_req_send(TALLOC_CTX *mem_ctx,
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina struct data_provider *provider,
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina struct dp_client *dp_cli,
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina const char *domain,
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina const char *name,
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina enum dp_targets target,
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina enum dp_methods method,
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina uint32_t dp_flags,
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina void *request_data,
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina const char **_request_name);
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březinaerrno_t _dp_req_recv(TALLOC_CTX *mem_ctx,
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina struct tevent_req *req,
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina const char *data_type,
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina void **_data);
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina/**
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina * Returns value of output data.
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina *
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina * @example
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina * struct dp_reply_std reply;
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina * ret = dp_req_recv(mem_ctx, req, struct dp_reply_std, &reply);
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina */
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina#define dp_req_recv(mem_ctx, req, data_type, _data) \
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina({ \
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina data_type *__value = NULL; \
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina errno_t __ret; \
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina __ret = _dp_req_recv(mem_ctx, req, #data_type, (void**)&__value); \
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina if (__ret == EOK) { \
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina *(_data) = *__value; \
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina } \
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina __ret; \
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina})
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina/**
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina * Returns pointer to output data type.
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina *
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina * @example
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina * struct dp_reply_std *reply;
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina * ret = dp_req_recv_ptr(mem_ctx, req, struct dp_reply_std, &reply);
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina */
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina#define dp_req_recv_ptr(mem_ctx, req, data_type, _data) \
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina _dp_req_recv(mem_ctx, req, #data_type, (void**)_data)
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina#endif /* _DP_REQUEST_H_ */