63 #include <amxc/amxc.h>
65 #include <amxp/amxp_signal.h>
66 #include <amxp/amxp_slot.h>
82 amxc_llist_it_take(it);
83 amxc_llist_it_take(&data->
dm_it);
91 if(call->
cb != NULL) {
112 amxc_var_init(&sig_data);
113 amxc_var_set_type(&sig_data, AMXC_VAR_ID_HTABLE);
114 amxc_var_add_new_key(&sig_data,
"retval");
123 amxc_var_clean(&sig_data);
128 amxc_var_t*
const ret,
134 when_null(func, exit);
135 when_null(ret, exit);
139 when_null(call, exit);
145 amxc_var_set(uint64_t, ret, call->
call_id);
158 amxc_var_init(&sig_data);
159 when_null(call, exit);
161 amxc_var_set_type(&sig_data, AMXC_VAR_ID_HTABLE);
162 amxc_var_add_new_key(&sig_data,
"retval");
169 amxc_var_clean(&sig_data);
177 when_null(call, exit);
185 amxp_deferred_fn_t cb,
190 when_null(call, exit);
203 amxc_var_t* out_args,
210 amxc_var_init(&sig_data);
212 when_null(call, exit);
215 amxc_var_set_type(&sig_data, AMXC_VAR_ID_HTABLE);
217 amxc_var_set_key(&sig_data,
"retval", ret, AMXC_VAR_FLAG_COPY);
219 amxc_var_add_new_key(&sig_data,
"retval");
221 if(out_args != NULL) {
222 amxc_var_set_key(&sig_data,
"args", out_args, AMXC_VAR_FLAG_COPY);
224 amxc_var_add_key(uint32_t, &sig_data,
"status",
status);
229 amxp_sigmngr_deferred_call(NULL, call->
cb, &sig_data, call->
caller_priv);
238 amxc_var_clean(&sig_data);
244 amxc_var_t* out_args,
251 amxc_var_t* out_args,
Ambiorix Data Model RPC methods API header file.
void(* amxd_deferred_cancel_t)(uint64_t call_id, void *const priv)
static CONSTRUCTOR void amxd_function_deferred_init(void)
static amxc_llist_t deferred
static void amxd_delete_deferred(amxc_llist_it_t *it)
static uint64_t g_call_id
static amxd_status_t amxd_function_deferred_done_impl(uint64_t call_id, amxd_status_t status, amxc_var_t *out_args, amxc_var_t *ret, bool now)
void amxd_dm_cancel_deferred(amxd_dm_t *dm)
static void amxd_cancel_deferred(amxd_deferred_ctx_t *call, amxc_var_t *sig_data)
amxd_deferred_ctx_t * amxd_find_deferred(uint64_t call_id)
Ambiorix Data Model API header file.
enum _amxd_status amxd_status_t
@ amxd_status_invalid_function
@ amxd_status_unknown_error
amxd_status_t amxd_function_deferred_call_done(uint64_t call_id, amxd_status_t status, amxc_var_t *out_args, amxc_var_t *ret)
Finishes a deferred method and removes the deferred function context.
void amxd_function_deferred_remove(uint64_t call_id)
Removes a deferred RPC context.
amxd_status_t amxd_function_defer(const amxd_function_t *const func, uint64_t *call_id, amxc_var_t *const ret, amxd_deferred_cancel_t cancel_fn, void *priv)
Creates a deferred RPC context.
amxd_status_t amxd_function_deferred_done(uint64_t call_id, amxd_status_t status, amxc_var_t *out_args, amxc_var_t *ret)
Finishes a deferred method and removes the deferred function context.
amxd_status_t amxd_function_set_deferred_cb(uint64_t call_id, amxp_deferred_fn_t cb, void *priv)
Sets a callback function to get the result of the deferred call.
void * amxd_function_deferred_get_priv(uint64_t call_id)
Gets the callee private data of an deferred function.
amxd_deferred_cancel_t cancel
static amxd_status_t status