libamxb  4.8.2
Bus Agnostic C API
amxb_ba_op_get_instances.c File Reference
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <fcntl.h>
#include <string.h>
#include <amxc/amxc.h>
#include <amxp/amxp.h>
#include <amxd/amxd_common.h>
#include <amxd/amxd_dm.h>
#include <amxd/amxd_path.h>
#include <amxd/amxd_object.h>
#include <amxb/amxb_be_intf.h>
#include <amxb/amxb.h>
#include "amxb_priv.h"

Go to the source code of this file.

Macros

#define _GNU_SOURCE
 

Functions

static int amxb_invoke_get_instances (amxb_bus_ctx_t *const bus_ctx, bool islocal, const char *object, const char *search_path, int32_t depth, amxc_var_t *ret, int timeout)
 
int amxb_get_instances (amxb_bus_ctx_t *const bus_ctx, const char *search_path, int32_t depth, amxc_var_t *ret, int timeout)
 Fetches the instances and the unique keys of a multi-instance object. More...
 

Macro Definition Documentation

◆ _GNU_SOURCE

#define _GNU_SOURCE

Definition at line 56 of file amxb_ba_op_get_instances.c.

Function Documentation

◆ amxb_invoke_get_instances()

static int amxb_invoke_get_instances ( amxb_bus_ctx_t *const  bus_ctx,
bool  islocal,
const char *  object,
const char *  search_path,
int32_t  depth,
amxc_var_t *  ret,
int  timeout 
)
static

Definition at line 78 of file amxb_ba_op_get_instances.c.

84  {
85  amxb_invoke_t* invoke_ctx = NULL;
86  int retval = amxd_status_unknown_error;
87  amxc_var_t* args = NULL;
88  amxc_string_t full_path;
89  amxd_object_t* root = amxd_dm_get_root(bus_ctx->dm);
90 
91  amxc_string_init(&full_path, 0);
92  amxc_var_new(&args);
93  amxc_var_set_type(args, AMXC_VAR_ID_HTABLE);
94 
95  if(search_path != NULL) {
96  amxc_var_add_key(cstring_t, args, "rel_path", search_path);
97  }
98  amxc_var_add_key(int32_t, args, "depth", depth);
99  amxc_var_add_key(uint32_t, args, "access", bus_ctx->access);
100 
101  retval = amxb_new_invoke(&invoke_ctx, bus_ctx, object, NULL, "_get_instances");
102  when_failed(retval, exit);
103  retval = amxb_invoke(invoke_ctx, args, ret, NULL, NULL, timeout);
104  when_true(!islocal, exit);
105  when_true(retval == 0, exit);
106 
107  amxc_string_setf(&full_path, "%s%s", object, search_path);
108  if(amxd_object_is_supported(root, amxc_string_get(&full_path, 0))) {
109  amxc_var_set_type(ret, AMXC_VAR_ID_LIST);
110  amxc_var_add(amxc_htable_t, ret, NULL);
111  retval = amxd_status_ok;
112  }
113 
114 exit:
115  amxc_string_clean(&full_path);
116  amxc_var_delete(&args);
117  amxb_free_invoke(&invoke_ctx);
118  return retval;
119 }
int amxb_new_invoke(amxb_invoke_t **invoke_ctx, amxb_bus_ctx_t *const ctx, const char *object, const char *interface, const char *method)
Prepares a remote function invocation.
void amxb_free_invoke(amxb_invoke_t **invoke_ctx)
Deletes a function invoke context, and frees allocated memory.
int amxb_invoke(amxb_invoke_t *invoke_ctx, amxc_var_t *args, amxc_var_t *ret, amxb_be_cb_fn_t fn, void *priv, int timeout)
Invokes a remote function, as defined by the function invoke context.
uint32_t access
Definition: amxb_types.h:125
amxd_dm_t * dm
Definition: amxb_types.h:123
static amxb_bus_ctx_t * bus_ctx
Definition: test_amxb_e2e.c:84