57 #include <amxc/amxc.h>
58 #include <amxp/amxp.h>
59 #include <amxd/amxd_dm.h>
60 #include <amxd/amxd_object.h>
61 #include <amxd/amxd_object_function.h>
62 #include <amxb/amxb_be.h>
63 #include <amxo/amxo.h>
67 #include <amxc/amxc_macros.h>
70 static uint32_t
caps = AMXB_BE_DISCOVER_DESCRIBE | AMXB_BE_DISCOVER_LIST | AMXB_BE_DISCOVER;
75 const amxc_var_t*
const data,
77 amxc_var_t notification;
78 amxc_htable_it_t* it = (amxc_htable_it_t*) priv;
79 amxc_var_init(¬ification);
80 amxc_var_set_type(¬ification, AMXC_VAR_ID_HTABLE);
82 amxc_var_copy(¬ification, data);
83 amxc_var_add_key(cstring_t, ¬ification,
"notification", sig_name);
85 amxp_sigmngr_emit_signal(
dummy_sigmngr, amxc_htable_it_get_key(it), ¬ification);
87 amxc_var_clean(¬ification);
95 UNUSED
const char* port,
96 UNUSED
const char* path,
97 UNUSED amxp_signal_mngr_t* sigmngr) {
100 amxo_parser_init(&
parser);
112 amxb_invoke_t* invoke_ctx,
114 amxb_request_t* request,
115 UNUSED
int timeout) {
117 amxc_var_t empty_args;
118 amxc_var_t* return_value = NULL;
119 amxc_var_init(&empty_args);
120 amxc_var_set_type(&empty_args, AMXC_VAR_ID_HTABLE);
121 amxc_var_set_type(request->result, AMXC_VAR_ID_LIST);
129 return_value = amxc_var_add_new(request->result);
130 amxd_object_t* obj = amxd_dm_findf(&
remote_dm, invoke_ctx->object);
132 rv = amxd_status_invalid_path;
134 rv = amxd_object_invoke_function(obj, invoke_ctx->method, args, return_value);
137 amxc_var_clean(&empty_args);
142 amxo_parser_clean(&
parser);
147 UNUSED amxd_dm_t*
const dm) {
152 const char*
object) {
153 amxd_object_t* obj = amxd_dm_findf(&
remote_dm,
"%s",
object);
163 const char*
object) {
166 amxc_string_t expression;
167 amxc_htable_it_t* it = NULL;
169 amxc_string_init(&expression, 0);
171 when_failed(retval, exit);
173 it = (amxc_htable_it_t*) calloc(1,
sizeof(amxc_htable_it_t));
175 amxc_string_appendf(&expression,
"path starts with \"%s.\"",
object);
176 amxp_slot_connect_filtered(&
remote_dm.sigmngr,
178 amxc_string_get(&expression, 0),
183 amxc_string_clean(&expression);
188 const char*
object) {
189 amxc_htable_it_t* it = amxc_htable_get(&
subscriptions,
object);
204 .async_invoke = NULL,
205 .wait_request = NULL,
206 .close_request = NULL,
214 .size =
sizeof(amxb_be_funcs_t),
240 .description =
"AMXB Dummy Backend for testing",
255 amxd_object_t* root_obj = amxd_dm_get_root(&
remote_dm);
257 return amxo_parser_parse_file(&
parser, odl, root_obj);
static amxd_dm_t remote_dm
static amxc_htable_t subscriptions
void test_set_dummy_caps(uint32_t dummy_caps)
static void amxb_dummy_send_notification(const char *const sig_name, const amxc_var_t *const data, void *const priv)
static amxp_signal_mngr_t * dummy_sigmngr
static void amxb_dummy_free(UNUSED void *ctx)
amxo_parser_t * test_get_parser(void)
static int amxb_dummy_subscribe(UNUSED void *const ctx, const char *object)
amxb_be_info_t amxb_dummy_be_info
static amxo_parser_t parser
static int amxb_dummy_disconnect(UNUSED void *ctx)
amxd_dm_t * test_get_dm(void)
static uint32_t amxb_dummy_capabilities(UNUSED void *const ctx)
static amxb_be_funcs_t amxb_dummy_impl
static int amxb_dummy_register(UNUSED void *const ctx, UNUSED amxd_dm_t *const dm)
static int amxb_dummy_unsubscribe(UNUSED void *const ctx, const char *object)
int test_unregister_dummy_be(void)
static bool amxb_dummy_has(UNUSED void *const ctx, const char *object)
static amxb_version_t dummy_be_version
static int amxb_dummy_invoke(UNUSED void *const ctx, amxb_invoke_t *invoke_ctx, amxc_var_t *args, amxb_request_t *request, UNUSED int timeout)
static void amxb_dummy_free_subscription(UNUSED const char *key, amxc_htable_it_t *it)
int test_load_dummy_remote(const char *odl)
int test_register_dummy_be(void)
static amxb_version_t sup_max_lib_version
static void * amxb_dummy_connect(UNUSED const char *host, UNUSED const char *port, UNUSED const char *path, UNUSED amxp_signal_mngr_t *sigmngr)
static amxb_version_t sup_min_lib_version