65 #include <amxc/amxc.h>
66 #include <amxp/amxp.h>
68 #include <amxd/amxd_common.h>
69 #include <amxd/amxd_dm.h>
70 #include <amxd/amxd_path.h>
71 #include <amxd/amxd_object.h>
79 amxc_var_t* parameters,
80 amxc_var_t* oparameters) {
81 const amxc_htable_t* htparams = amxc_var_constcast(amxc_htable_t, parameters);
82 const amxc_htable_t* htoparams = amxc_var_constcast(amxc_htable_t, oparameters);
84 amxc_var_for_each(
object, current) {
85 amxc_var_for_each(param,
object) {
86 const char* pname = amxc_var_key(param);
87 if(amxc_htable_contains(htparams, pname) ||
88 amxc_htable_contains(htoparams, pname)) {
91 amxc_var_delete(¶m);
97 amxc_var_t* rollback) {
99 amxc_var_for_each(
object, current) {
100 const char* path = amxc_var_key(
object);
101 amxc_var_t* data = amxc_var_get_pathf(rollback, AMXC_VAR_FLAG_DEFAULT,
"'%s'", path);
103 amxc_var_delete(&
object);
106 amxc_var_take_it(
object);
107 amxc_var_set_key(rollback, path,
object, AMXC_VAR_FLAG_DEFAULT);
115 amxc_var_for_each(result, sub_ret) {
116 amxc_var_t* rp = amxc_var_add(amxc_htable_t, ret, NULL);
117 amxc_var_add_key(cstring_t, rp,
"path", req_path);
118 amxc_var_add_key(uint32_t, rp,
"status", rv);
119 if(!amxc_htable_is_empty(amxc_var_constcast(amxc_htable_t, result))) {
120 amxc_var_take_it(result);
121 amxc_var_set_key(rp,
"result", result, AMXC_VAR_FLAG_DEFAULT);
127 amxc_var_t* rollback) {
131 amxc_var_for_each(params, rollback) {
132 const char* path = amxc_var_key(params);
133 amxc_var_clean(&ret);
135 amxc_var_delete(¶ms);
138 amxc_var_clean(&ret);
143 amxc_var_t* req_paths,
146 int retval = amxd_status_unknown_error;
152 amxc_var_init(&sub_ret);
153 amxc_var_init(&rollback);
154 amxc_var_init(¤t);
155 amxc_var_set_type(ret, AMXC_VAR_ID_LIST);
156 amxc_var_set_type(&rollback, AMXC_VAR_ID_HTABLE);
158 when_false(amxc_var_type_of(req_paths) == AMXC_VAR_ID_LIST, exit);
160 count = amxc_llist_size(amxc_var_constcast(amxc_llist_t, req_paths));
162 retval = amxd_status_ok;
164 amxc_var_for_each(req_path, req_paths) {
166 const char*
object = GET_CHAR(req_path,
"path");
167 amxc_var_t* params = GET_ARG(req_path,
"parameters");
168 amxc_var_t* oparams = GET_ARG(req_path,
"oparameters");
169 if(!allow_partial && (count > 1)) {
170 amxc_var_clean(¤t);
176 if((rv != 0) && !allow_partial) {
178 amxc_var_set_type(ret, AMXC_VAR_ID_LIST);
194 if(!allow_partial && (count > 1)) {
199 amxc_var_clean(&sub_ret);
203 amxc_var_clean(¤t);
204 amxc_var_clean(&rollback);
205 amxc_var_clean(&sub_ret);
Ambiorix bus agnostic API header file.
static void amxb_filter_params(amxc_var_t *current, amxc_var_t *parameters, amxc_var_t *oparameters)
static void amxb_set_rollback(amxb_bus_ctx_t *const bus_ctx, amxc_var_t *rollback)
static void amxb_add_rollback(amxc_var_t *current, amxc_var_t *rollback)
static void amxb_set_result(const char *req_path, amxc_var_t *ret, amxc_var_t *sub_ret, int rv)
Ambiorix Bus Backend Interface.
#define AMXB_FLAG_PARTIAL
int PRIVATE amxb_set_impl(amxb_bus_ctx_t *const bus_ctx, const char *object, uint32_t flags, amxc_var_t *values, amxc_var_t *ovalues, amxc_var_t *ret, int timeout)
int amxb_set(amxb_bus_ctx_t *const bus_ctx, const char *object, amxc_var_t *values, amxc_var_t *ret, int timeout)
Sets parameter values of one single object or of multiple instance objects.
int amxb_get(amxb_bus_ctx_t *const bus_ctx, const char *object, int32_t depth, amxc_var_t *ret, int timeout)
Fetches one or more objects or a single parameter.
int amxb_set_multiple(amxb_bus_ctx_t *const bus_ctx, uint32_t flags, amxc_var_t *req_paths, amxc_var_t *ret, int timeout)
Sets parameter values for multiple objects (request paths)
static amxb_bus_ctx_t * bus_ctx