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>
80 const char* search_path,
86 int retval = amxd_status_unknown_error;
87 amxc_var_t* args = NULL;
88 amxc_string_t full_path;
90 amxc_string_init(&full_path, 0);
92 amxc_var_set_type(args, AMXC_VAR_ID_HTABLE);
94 if(search_path != NULL) {
95 amxc_var_add_key(cstring_t, args,
"rel_path", search_path);
97 if((filter != NULL) && (*filter != 0)) {
98 amxc_var_add_key(cstring_t, args,
"filter", filter);
100 amxc_var_add_key(int32_t, args,
"depth", depth);
104 when_failed(retval, exit);
105 retval =
amxb_invoke(invoke_ctx, args, ret, NULL, NULL, timeout);
108 amxc_string_clean(&full_path);
109 amxc_var_delete(&args);
115 const char* search_path,
123 const char* search_path,
128 int retval = amxd_status_unknown_error;
131 bool islocal =
false;
133 const char* param = NULL;
136 amxc_string_init(&temp, 0);
137 amxd_path_init(&path, search_path);
141 while(amxd_path_get_type(&path) == amxd_path_reference) {
143 when_failed(retval, exit);
146 object = amxd_path_get_fixed_part(&path,
true);
147 if((
object == NULL) || (strcmp(
object,
".") == 0)) {
148 retval = amxd_status_object_not_found;
151 search_path = amxd_path_get(&path, AMXD_OBJECT_TERMINATE);
152 search_path = search_path == NULL ?
"" : search_path;
153 param = amxd_path_get_param(&path);
158 amxc_string_setf(&temp,
"%s%s", search_path, param);
159 search_path = amxc_string_get(&temp, 0);
166 depth, ret, timeout);
178 if(retval == amxd_status_invalid_path) {
179 retval = amxd_status_object_not_found;
183 amxc_string_clean(&temp);
185 amxd_path_clean(&path);
Ambiorix bus agnostic API header file.
static int amxb_invoke_get(amxb_bus_ctx_t *const bus_ctx, const char *object, const char *search_path, const char *filter, int32_t depth, amxc_var_t *ret, int timeout)
Ambiorix Bus Backend Interface.
#define amxb_is_valid_be_func(ft, member, ptr)
int PRIVATE amxb_follow_reference(amxb_bus_ctx_t *const bus_ctx, amxd_path_t *reference, int timeout)
bool PRIVATE amxb_is_local_object(amxb_bus_ctx_t *ctx, const char *obj_path)
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.
int amxb_get(amxb_bus_ctx_t *const bus_ctx, const char *search_path, int32_t depth, amxc_var_t *ret, int timeout)
Fetches one or more objects or a single parameter.
int amxb_get_filtered(amxb_bus_ctx_t *const bus_ctx, const char *search_path, const char *filter, int32_t depth, amxc_var_t *ret, int timeout)
Fetches one or more objects and their parameters that are matching a filter.
The back-end interface structure.
amxb_be_get_filtered_t get_filtered
const amxb_be_funcs_t * bus_fn
static amxb_bus_ctx_t * bus_ctx