libamxd  6.4.1
Data Model Manager
amxd_dm.c File Reference
#include <stdlib.h>
#include <string.h>
#include "amxd_priv.h"
#include <amxd/amxd_dm.h>
#include <amxd/amxd_action.h>
#include <amxd/amxd_object.h>
#include <amxd/amxd_path.h>
#include "amxd_dm_priv.h"
#include "amxd_object_priv.h"
#include "amxd_assert.h"

Go to the source code of this file.

Functions

static void amxd_dm_free_mib_object_it (amxc_llist_it_t *it)
 
static amxd_status_t amxd_dm_invoke_action_impl (amxc_llist_t *fns, amxd_object_t *object, amxd_param_t *param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval)
 
static amxd_status_t amxd_dm_invoke_action_base (amxd_object_t *const object, amxd_param_t *const param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval)
 
static bool amxd_dm_can_invoke_action (int counter, amxd_action_t reason, amxd_object_t *current, amxd_object_t *object)
 
static amxd_status_t amxd_dm_invoke_default (amxd_object_t *const object, amxd_param_t *const param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval)
 
static amxd_status_t amxd_dm_check_add_inst_retval (amxc_var_t *retval)
 
static void amxd_dm_cleanup_add_inst (amxd_object_t *object, amxc_var_t *retval)
 
static void amxd_dm_invoke_action_start (UNUSED amxd_object_t *object, UNUSED amxd_param_t *param, amxd_action_t reason)
 
static amxd_status_t amxd_dm_invoke_action_end (amxd_object_t *object, amxd_param_t *param, amxd_status_t status, amxd_action_t reason, amxc_var_t *retval)
 
amxd_status_t amxd_dm_new (amxd_dm_t **dm)
 Instantiate a new data model. More...
 
void amxd_dm_delete (amxd_dm_t **dm)
 Deletes a data model structure. More...
 
amxd_status_t amxd_dm_init (amxd_dm_t *dm)
 Initializes a data model structure. More...
 
void amxd_dm_clean (amxd_dm_t *dm)
 Cleans a data model structure. More...
 
amxd_status_t amxd_dm_store_mib (amxd_dm_t *const dm, amxd_object_t *const object)
 
amxd_object_tamxd_dm_get_mib (amxd_dm_t *const dm, const char *name)
 
amxd_status_t amxd_dm_add_root_object (amxd_dm_t *dm, amxd_object_t *object)
 Adds an object to the root of the data model. More...
 
amxd_status_t amxd_dm_remove_root_object (amxd_dm_t *dm, const char *name)
 Removes an object from the root of the data model. More...
 
amxd_object_tamxd_dm_get_root (amxd_dm_t *const dm)
 Fetches the root object of the data model. More...
 
amxd_object_tamxd_dm_get_object (amxd_dm_t *const dm, const char *name)
 
amxd_object_tamxd_dm_findf (amxd_dm_t *const dm, const char *abs_path,...)
 
amxd_status_t amxd_dm_resolve_pathf (amxd_dm_t *const dm, amxc_llist_t *paths, const char *abs_path,...)
 
amxd_status_t amxd_dm_resolve_pathf_ext (amxd_dm_t *const dm, bool *key_path, amxc_llist_t *paths, const char *abs_path,...)
 
const char * amxd_dm_signal_get_path (amxd_dm_t *const dm, const amxc_var_t *const signal_data)
 Get the object path from a data model signal. More...
 
amxd_object_tamxd_dm_signal_get_object (amxd_dm_t *const dm, const amxc_var_t *const signal_data)
 Get the object from a data model using the path in the recieved signal. More...
 
amxd_status_t amxd_dm_invoke_action (amxd_object_t *object, amxd_param_t *param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval)
 

Variables

static amxd_action_fn_t default_actions []
 

Function Documentation

◆ amxd_dm_can_invoke_action()

static bool amxd_dm_can_invoke_action ( int  counter,
amxd_action_t  reason,
amxd_object_t current,
amxd_object_t object 
)
static

Definition at line 174 of file amxd_dm.c.

177  {
178  bool retval = false;
179  if(counter == 0) {
180  retval = true;
181  } else if(counter < INT32_MAX) {
182  switch(reason) {
183  case action_object_read:
184  case action_object_list:
187  case action_param_read:
190  retval = true;
191  break;
193  retval = (amxd_object_get_parent(object) == NULL ||
194  amxd_object_is_child_of(object, current));
195  if(retval) {
196  retval = !amxd_object_is_child_of(current, object);
197  }
198  break;
200  retval = amxd_object_is_child_of(object, current);
201  break;
202  default:
203  break;
204  }
205  }
206  return retval;
207 }
@ action_object_del_inst
Definition: amxd_types.h:124
@ action_object_describe
Definition: amxd_types.h:121
@ action_object_read
Definition: amxd_types.h:117
@ action_object_list
Definition: amxd_types.h:120
@ action_object_validate
Definition: amxd_types.h:119
@ action_object_destroy
Definition: amxd_types.h:125
@ action_param_read
Definition: amxd_types.h:112
@ action_param_validate
Definition: amxd_types.h:114
@ action_param_describe
Definition: amxd_types.h:115
bool amxd_object_is_child_of(const amxd_object_t *const child, const amxd_object_t *const parent)
Checks if the child object is in the hierarchical tree of the parent object.
amxd_object_t * amxd_object_get_parent(const amxd_object_t *const object)
Get the parent object.
static int counter

◆ amxd_dm_check_add_inst_retval()

static amxd_status_t amxd_dm_check_add_inst_retval ( amxc_var_t *  retval)
static

Definition at line 229 of file amxd_dm.c.

229  {
231  amxc_var_t* tmp = NULL;
232 
233  tmp = amxc_var_get_path(retval, "index", AMXC_VAR_FLAG_DEFAULT);
234  when_true_status(amxc_var_is_null(tmp),
235  exit,
237 
238  tmp = amxc_var_get_path(retval, "name", AMXC_VAR_FLAG_DEFAULT);
239  when_true_status(amxc_var_is_null(tmp),
240  exit,
242 
243 exit:
244  return status;
245 }
enum _amxd_status amxd_status_t
@ amxd_status_invalid_name
Definition: amxd_types.h:86
@ amxd_status_ok
Definition: amxd_types.h:78
static amxd_status_t status

◆ amxd_dm_cleanup_add_inst()

static void amxd_dm_cleanup_add_inst ( amxd_object_t object,
amxc_var_t *  retval 
)
static

Definition at line 247 of file amxd_dm.c.

248  {
249  uint32_t index = 0;
250  amxd_object_t* inst = NULL;
251  amxc_var_t* var_index = NULL;
252  when_true(amxc_var_is_null(retval), exit);
253 
254  var_index = amxc_var_get_path(retval, "index", AMXC_VAR_FLAG_DEFAULT);
255  index = amxc_var_dyncast(uint32_t, var_index);
256  when_true(index == 0, exit);
257 
258  inst = amxd_object_get_instance(object, NULL, index);
259  amxd_object_free(&inst);
260 
261 exit:
262  return;
263 }
amxd_object_t * amxd_object_get_instance(const amxd_object_t *object, const char *name, uint32_t index)
Get an instance of the template object.
void amxd_object_free(amxd_object_t **object)
Data model object destructor function.
Definition: amxd_object.c:153

◆ amxd_dm_findf()

amxd_object_t* amxd_dm_findf ( amxd_dm_t *const  dm,
const char *  abs_path,
  ... 
)

Definition at line 470 of file amxd_dm.c.

472  {
473  amxd_object_t* object = NULL;
474  amxd_object_t* root_obj = NULL;
476  amxd_path_t path;
477  va_list args;
478  bool key_path = false;
479 
480  amxd_path_init(&path, NULL);
481 
482  when_null(dm, exit);
483  root_obj = amxd_dm_get_root(dm);
484 
485  when_str_empty_status(abs_path, exit, object = root_obj);
486 
487  va_start(args, abs_path);
488  status = amxd_path_vsetf(&path, true, abs_path, args);
489  va_end(args);
490  dm->status = status;
491  when_failed(status, exit);
492 
493  object = amxd_object_find_internal(root_obj, &key_path, &path, &dm->status);
494 
495 exit:
496  amxd_path_clean(&path);
497  return object;
498 }
PRIVATE amxd_object_t * amxd_object_find_internal(amxd_object_t *const object, bool *key_path, amxd_path_t *path, amxd_status_t *status)
amxd_object_t * amxd_dm_get_root(amxd_dm_t *const dm)
Fetches the root object of the data model.
Definition: amxd_dm.c:456
amxd_status_t amxd_path_init(amxd_path_t *path, const char *object_path)
Initializes an amxd_path_t structure.
Definition: amxd_path.c:328
void amxd_path_clean(amxd_path_t *path)
Cleans an amxd_path_t structure.
Definition: amxd_path.c:351
amxd_status_t amxd_path_vsetf(amxd_path_t *path, bool add_dot, const char *obj_path, va_list args)
Sets or replaces the path contained in the amxd_path_t structure.
Definition: amxd_path.c:403
amxd_status_t status
Definition: amxd_types.h:263
static amxd_dm_t dm

◆ amxd_dm_free_mib_object_it()

static void amxd_dm_free_mib_object_it ( amxc_llist_it_t *  it)
static

Definition at line 87 of file amxd_dm.c.

87  {
88  amxd_object_t* object = amxc_llist_it_get_data(it, amxd_object_t, it);
89  amxd_object_free(&object);
90 }

◆ amxd_dm_get_mib()

amxd_object_t* amxd_dm_get_mib ( amxd_dm_t *const  dm,
const char *  name 
)

Definition at line 397 of file amxd_dm.c.

398  {
399  amxd_object_t* mib = NULL;
400 
401  when_null(dm, exit);
402  when_str_empty(name, exit);
403 
404  amxc_llist_for_each(it, (&dm->mibs)) {
405  const char* mib_name = NULL;
406  mib = amxc_llist_it_get_data(it, amxd_object_t, it);
407  mib_name = amxd_object_get_name(mib, AMXD_OBJECT_NAMED);
408  if((mib_name != NULL) && (strcmp(mib_name, name) == 0)) {
409  break;
410  }
411  mib = NULL;
412  }
413 
414 exit:
415  return mib;
416 }
#define AMXD_OBJECT_NAMED
Name and path format flag - default behavior, use name for instance objects.
Definition: amxd_object.h:164
const char * amxd_object_get_name(const amxd_object_t *const object, const uint32_t flags)
Get the name of the object (or index as a string for instance objects)
Definition: amxd_object.c:239
amxc_llist_t mibs
Definition: amxd_types.h:262

◆ amxd_dm_get_object()

amxd_object_t* amxd_dm_get_object ( amxd_dm_t *const  dm,
const char *  name 
)

Definition at line 466 of file amxd_dm.c.

466  {
467  return amxd_object_get_child(&dm->object, name);
468 }
amxd_object_t * amxd_object_get_child(const amxd_object_t *object, const char *name)
Get a child of the object.
amxd_object_t object
Definition: amxd_types.h:260

◆ amxd_dm_invoke_action()

amxd_status_t amxd_dm_invoke_action ( amxd_object_t object,
amxd_param_t param,
amxd_action_t  reason,
const amxc_var_t *const  args,
amxc_var_t *const  retval 
)

Definition at line 591 of file amxd_dm.c.

595  {
596  static int in_object_action = 0;
597  static int in_param_action = 0;
598  static amxd_object_t* current = NULL;
599 
600  amxd_object_t* temp = NULL;
601  amxc_llist_t* cb_fns = NULL;
602  int* counter = NULL;
604  when_true(object == NULL && param == NULL, exit);
605  when_true_status(reason == action_any, exit, status = amxd_status_invalid_action);
606 
607  temp = current;
608  if(param != NULL) {
609  when_true_status(!amxd_dm_can_invoke_action(in_param_action, reason, current, object),
610  exit,
612  counter = &in_param_action;
613  cb_fns = &param->cb_fns;
614  } else {
615  when_true_status(!amxd_dm_can_invoke_action(in_object_action + in_param_action,
616  reason, current, object),
617  exit,
619  counter = &in_object_action;
620  cb_fns = &object->cb_fns;
621  }
622 
623  (*counter)++;
624  current = object;
625  amxd_dm_invoke_action_start(object, param, reason);
626  status = amxd_dm_invoke_action_impl(cb_fns, object, param, reason, args, retval);
628  status = amxd_dm_invoke_default(object, param, reason, args, retval);
629  }
630  (*counter)--;
631  status = amxd_dm_invoke_action_end(object, param, status, reason, retval);
632 
633  current = temp;
634 
635 exit:
636  return status;
637 }
static amxd_status_t amxd_dm_invoke_action_end(amxd_object_t *object, amxd_param_t *param, amxd_status_t status, amxd_action_t reason, amxc_var_t *retval)
Definition: amxd_dm.c:277
static void amxd_dm_invoke_action_start(UNUSED amxd_object_t *object, UNUSED amxd_param_t *param, amxd_action_t reason)
Definition: amxd_dm.c:265
static amxd_status_t amxd_dm_invoke_action_impl(amxc_llist_t *fns, amxd_object_t *object, amxd_param_t *param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval)
Definition: amxd_dm.c:92
static bool amxd_dm_can_invoke_action(int counter, amxd_action_t reason, amxd_object_t *current, amxd_object_t *object)
Definition: amxd_dm.c:174
static amxd_status_t amxd_dm_invoke_default(amxd_object_t *const object, amxd_param_t *const param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval)
Definition: amxd_dm.c:209
@ action_any
Definition: amxd_types.h:111
@ amxd_status_function_not_implemented
Definition: amxd_types.h:83
@ amxd_status_invalid_action
Definition: amxd_types.h:89
amxc_llist_t cb_fns
Definition: amxd_types.h:391

◆ amxd_dm_invoke_action_base()

static amxd_status_t amxd_dm_invoke_action_base ( amxd_object_t *const  object,
amxd_param_t *const  param,
amxd_action_t  reason,
const amxc_var_t *const  args,
amxc_var_t *const  retval 
)
static

Definition at line 128 of file amxd_dm.c.

132  {
134  amxd_object_t* super = object;
135  amxc_llist_t* cb_fns = NULL;
136 
137  while(super != NULL) {
139  super = amxd_object_get_parent(super);
140  } else {
141  super = (super->derived_from.llist == NULL) ?
142  NULL :
143  amxc_container_of(super->derived_from.llist,
145  derived_objects);
146  }
147 
148  if(param != NULL) {
149  amxd_param_t* base_param =
151  amxd_param_get_name(param));
152  cb_fns = (base_param == NULL) ? NULL : &base_param->cb_fns;
153  } else {
154  cb_fns = (super == NULL) ? NULL : &super->cb_fns;
155  }
156 
157  if(cb_fns != NULL) {
159  object,
160  param,
161  reason,
162  args,
163  retval);
165  continue;
166  }
167  break;
168  }
169  }
170 
171  return status;
172 }
const char * amxd_param_get_name(const amxd_param_t *const param)
@ amxd_object_instance
Definition: amxd_types.h:186
amxd_param_t * amxd_object_get_param_def(const amxd_object_t *const object, const char *name)
Gets a parameter definition from an object.
static amxd_object_type_t amxd_object_get_type(const amxd_object_t *const object)
Returns the object type.
Definition: amxd_object.h:586
amxc_llist_it_t derived_from
Definition: amxd_types.h:249
amxc_llist_t cb_fns
Definition: amxd_types.h:253

◆ amxd_dm_invoke_action_end()

static amxd_status_t amxd_dm_invoke_action_end ( amxd_object_t object,
amxd_param_t param,
amxd_status_t  status,
amxd_action_t  reason,
amxc_var_t *  retval 
)
static

Definition at line 277 of file amxd_dm.c.

281  {
282  amxd_status_t new_status = status;
283  switch(reason) {
285  amxd_object_free(&object);
286  new_status = amxd_status_ok;
287  break;
289  amxd_param_free(&param);
290  new_status = amxd_status_ok;
291  break;
293  if(status == amxd_status_ok) {
294  new_status = amxd_dm_check_add_inst_retval(retval);
295  } else {
296  amxd_dm_cleanup_add_inst(object, retval);
297  }
298  break;
299  default:
300  break;
301  }
302 
303  return new_status;
304 }
static amxd_status_t amxd_dm_check_add_inst_retval(amxc_var_t *retval)
Definition: amxd_dm.c:229
static void amxd_dm_cleanup_add_inst(amxd_object_t *object, amxc_var_t *retval)
Definition: amxd_dm.c:247
void PRIVATE amxd_param_free(amxd_param_t **param)
@ action_object_add_inst
Definition: amxd_types.h:123
@ action_param_destroy
Definition: amxd_types.h:116

◆ amxd_dm_invoke_action_impl()

static amxd_status_t amxd_dm_invoke_action_impl ( amxc_llist_t *  fns,
amxd_object_t object,
amxd_param_t param,
amxd_action_t  reason,
const amxc_var_t *const  args,
amxc_var_t *const  retval 
)
static

Definition at line 92 of file amxd_dm.c.

97  {
99  amxc_var_clean(retval);
100  amxc_llist_for_each(it, fns) {
101  amxd_dm_cb_t* cb_fn = amxc_llist_it_get_data(it, amxd_dm_cb_t, it);
102  if((cb_fn->reason != action_any) &&
103  ((cb_fn->reason != reason) ||
104  ( cb_fn->fn == NULL) ||
105  ( !cb_fn->enable))) {
106  continue;
107  }
108  status = cb_fn->fn(object, param, reason, args, retval, cb_fn->priv);
109  if((reason == action_object_destroy) ||
110  ( reason == action_param_destroy)) {
111  if(((object != NULL) && amxd_object_has_action_cb(object, reason, cb_fn->fn)) ||
112  (( param != NULL) && amxd_param_has_action_cb(param, reason, cb_fn->fn))) {
113  amxc_llist_it_take(&cb_fn->it);
114  free(it);
115  }
117  continue;
118  }
119  if((status != amxd_status_ok) &&
121  break;
122  }
123  }
124 
125  return status;
126 }
bool amxd_object_has_action_cb(amxd_object_t *const object, const amxd_action_t reason, amxd_action_fn_t fn)
bool amxd_param_has_action_cb(amxd_param_t *const param, const amxd_action_t reason, amxd_action_fn_t fn)
static int cb_fn(amxd_object_t *start_object, amxd_object_t *matching_object, UNUSED void *priv)

◆ amxd_dm_invoke_action_start()

static void amxd_dm_invoke_action_start ( UNUSED amxd_object_t object,
UNUSED amxd_param_t param,
amxd_action_t  reason 
)
static

Definition at line 265 of file amxd_dm.c.

267  {
268  switch(reason) {
271  break;
272  default:
273  break;
274  }
275 }
PRIVATE void amxd_object_destroy_handlers(amxd_object_t *const object)

◆ amxd_dm_invoke_default()

static amxd_status_t amxd_dm_invoke_default ( amxd_object_t *const  object,
amxd_param_t *const  param,
amxd_action_t  reason,
const amxc_var_t *const  args,
amxc_var_t *const  retval 
)
static

Definition at line 209 of file amxd_dm.c.

213  {
215  amxd_dm_invoke_action_base(object, param, reason, args, retval);
217  ( default_actions[reason] != NULL)) {
218  status = default_actions[reason](object,
219  param,
220  reason,
221  args,
222  retval,
223  NULL);
224  }
225 
226  return status;
227 }
static amxd_action_fn_t default_actions[]
Definition: amxd_dm.c:69
static amxd_status_t amxd_dm_invoke_action_base(amxd_object_t *const object, amxd_param_t *const param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval)
Definition: amxd_dm.c:128

◆ amxd_dm_resolve_pathf()

amxd_status_t amxd_dm_resolve_pathf ( amxd_dm_t *const  dm,
amxc_llist_t *  paths,
const char *  abs_path,
  ... 
)

Definition at line 500 of file amxd_dm.c.

503  {
505  amxd_object_t* root_obj = NULL;
506  amxd_path_t path;
507  va_list args;
508  bool key_path = false;
509 
510  amxd_path_init(&path, NULL);
511 
512  when_null(dm, exit);
513  root_obj = amxd_dm_get_root(dm);
514 
515  when_str_empty(abs_path, exit);
516 
517  va_start(args, abs_path);
518  status = amxd_path_vsetf(&path, true, abs_path, args);
519  va_end(args);
520  when_failed(status, exit);
521 
522  status = amxd_object_resolve_internal(root_obj, &key_path, paths, &path);
523 
524 exit:
525  amxd_path_clean(&path);
526  return status;
527 }
PRIVATE amxd_status_t amxd_object_resolve_internal(amxd_object_t *const object, bool *key_path, amxc_llist_t *paths, amxd_path_t *path)
@ amxd_status_unknown_error
Definition: amxd_types.h:79

◆ amxd_dm_resolve_pathf_ext()

amxd_status_t amxd_dm_resolve_pathf_ext ( amxd_dm_t *const  dm,
bool *  key_path,
amxc_llist_t *  paths,
const char *  abs_path,
  ... 
)

Definition at line 529 of file amxd_dm.c.

533  {
535  amxd_object_t* root_obj = NULL;
536  amxd_path_t path;
537  va_list args;
538 
539  amxd_path_init(&path, NULL);
540 
541  when_null(key_path, exit);
542  when_null(dm, exit);
543  root_obj = amxd_dm_get_root(dm);
544  *key_path = false;
545 
546  when_str_empty(abs_path, exit);
547 
548  va_start(args, abs_path);
549  status = amxd_path_vsetf(&path, true, abs_path, args);
550  va_end(args);
551  when_failed(status, exit);
552 
553  status = amxd_object_resolve_internal(root_obj, key_path, paths, &path);
554 
555 exit:
556  amxd_path_clean(&path);
557  return status;
558 }

◆ amxd_dm_store_mib()

amxd_status_t amxd_dm_store_mib ( amxd_dm_t *const  dm,
amxd_object_t *const  object 
)

Definition at line 378 of file amxd_dm.c.

379  {
381  const char* mib_name = NULL;
382  when_null(dm, exit);
383  when_null(object, exit);
384  when_true(amxd_object_get_type(object) != amxd_object_mib, exit);
385  mib_name = amxd_object_get_name(object, AMXD_OBJECT_NAMED);
386  when_true_status(amxd_dm_get_mib(dm, mib_name) != NULL,
387  exit,
388  retval = amxd_status_duplicate);
389 
390  amxc_llist_append(&dm->mibs, &object->it);
391 
392  retval = amxd_status_ok;
393 exit:
394  return retval;
395 }
amxd_object_t * amxd_dm_get_mib(amxd_dm_t *const dm, const char *name)
Definition: amxd_dm.c:397
@ amxd_status_duplicate
Definition: amxd_types.h:91
@ amxd_object_mib
Definition: amxd_types.h:188
amxc_llist_it_t it
Definition: amxd_types.h:230

Variable Documentation

◆ default_actions

amxd_action_fn_t default_actions[]
static
Initial value:
= {
NULL,
NULL,
}
amxd_status_t amxd_action_object_read(amxd_object_t *const object, amxd_param_t *const param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval, void *priv)
amxd_status_t amxd_action_object_del_inst(amxd_object_t *const object, amxd_param_t *const param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval, void *priv)
amxd_status_t amxd_action_object_write(amxd_object_t *const object, amxd_param_t *const param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval, void *priv)
amxd_status_t amxd_action_object_add_inst(amxd_object_t *const object, amxd_param_t *const param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval, void *priv)
amxd_status_t amxd_action_object_validate(amxd_object_t *const object, amxd_param_t *const param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval, void *priv)
Default object validate action implementation.
amxd_status_t amxd_action_object_list(amxd_object_t *const object, amxd_param_t *const param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval, void *priv)
Default object list action implementation.
amxd_status_t amxd_action_object_describe(amxd_object_t *object, amxd_param_t *param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval, void *priv)
Default object describe action implementation.
amxd_status_t amxd_action_object_destroy(amxd_object_t *object, amxd_param_t *const param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval, void *priv)
Default object destroy action implementation.
amxd_status_t amxd_action_param_write(amxd_object_t *object, amxd_param_t *param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval, void *priv)
Default parameter write action implementation.
amxd_status_t amxd_action_param_describe(amxd_object_t *object, amxd_param_t *param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval, void *priv)
Default parameter describe action implementation.
amxd_status_t amxd_action_param_validate(amxd_object_t *object, amxd_param_t *param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval, void *priv)
Default parameter validate action implementation.
amxd_status_t amxd_action_param_read(amxd_object_t *object, amxd_param_t *param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval, void *priv)
Default parameter read action implementation.
amxd_status_t amxd_action_param_destroy(amxd_object_t *object, amxd_param_t *param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval, void *priv)
Default parameter destroy action implementation.

Definition at line 69 of file amxd_dm.c.