libamxd  6.4.1
Data Model Manager
amxd_dm_priv.h File Reference

Go to the source code of this file.

Data Structures

struct  _amxd_deferred_call
 

Typedefs

typedef struct _amxd_deferred_call amxd_deferred_ctx_t
 

Functions

void PRIVATE amxd_object_init_base (amxd_object_t *const object, const amxd_object_type_t type)
 
void PRIVATE amxd_init_base (void)
 
void PRIVATE amxd_dm_event (const char *signal, const amxd_object_t *const object, amxc_var_t *const data, bool trigger)
 
bool PRIVATE amxd_object_is_base (const amxd_object_t *const object)
 
amxd_status_t PRIVATE amxd_dm_base_add_funcs (amxd_object_t *object)
 
void PRIVATE amxd_dm_set_derived_from (amxd_object_t *const object)
 
void PRIVATE amxd_def_funcs_remove_args (amxc_var_t *args)
 
void PRIVATE amxd_common_set_flag (amxc_var_t **flags, const char *flag)
 
void PRIVATE amxd_common_unset_flag (amxc_var_t **flags, const char *flag)
 
bool PRIVATE amxd_common_has_flag (const amxc_var_t *const flags, const char *flag)
 
amxd_deferred_ctx_t *PRIVATE amxd_find_deferred (uint64_t call_id)
 
void PRIVATE amxd_dm_cancel_deferred (amxd_dm_t *dm)
 

Typedef Documentation

◆ amxd_deferred_ctx_t

Function Documentation

◆ amxd_common_has_flag()

bool PRIVATE amxd_common_has_flag ( const amxc_var_t *const  flags,
const char *  flag 
)

Definition at line 652 of file amxd_dm_priv.c.

652  {
653  bool retval = false;
654  const amxc_htable_t* ht_flags = NULL;
655 
656  when_null(flags, exit);
657 
658  ht_flags = amxc_var_constcast(amxc_htable_t, flags);
659  retval = amxc_htable_contains(ht_flags, flag);
660 
661 exit:
662  return retval;
663 }

◆ amxd_common_set_flag()

void PRIVATE amxd_common_set_flag ( amxc_var_t **  flags,
const char *  flag 
)

Definition at line 617 of file amxd_dm_priv.c.

617  {
618  amxc_var_t* f = NULL;
619 
620  if((*flags) == NULL) {
621  amxc_var_new(flags);
622  amxc_var_set_type((*flags), AMXC_VAR_ID_HTABLE);
623  }
624  f = GET_ARG((*flags), flag);
625  if(f == NULL) {
626  amxc_var_add_key(bool, (*flags), flag, true);
627  } else {
628  amxc_var_set(bool, f, true);
629  }
630 
631  return;
632 }

◆ amxd_common_unset_flag()

void PRIVATE amxd_common_unset_flag ( amxc_var_t **  flags,
const char *  flag 
)

Definition at line 634 of file amxd_dm_priv.c.

634  {
635  amxc_var_t* f = NULL;
636  const amxc_htable_t* ht_flags = NULL;
637 
638  when_null((*flags), exit);
639 
640  ht_flags = amxc_var_constcast(amxc_htable_t, *flags);
641  f = GET_ARG((*flags), flag);
642  amxc_var_delete(&f);
643 
644  if(amxc_htable_is_empty(ht_flags)) {
645  amxc_var_delete(flags);
646  }
647 
648 exit:
649  return;
650 }

◆ amxd_def_funcs_remove_args()

void PRIVATE amxd_def_funcs_remove_args ( amxc_var_t *  args)

Definition at line 71 of file amxd_dm_functions.c.

71  {
72  amxc_var_t* access = GET_ARG(args, "access");
73  uint32_t iaccess = amxc_var_dyncast(uint32_t, access);
74  const char* invalid_args[] = {
75  "set_read_only",
76  NULL
77  };
78 
79  for(int i = 0; invalid_args[i] != NULL; i++) {
80  amxc_var_t* arg = GET_ARG(args, invalid_args[i]);
81  amxc_var_delete(&arg);
82  }
83 
84  if(iaccess > amxd_dm_access_protected) {
85  amxc_var_set(uint32_t, access, amxd_dm_access_protected);
86  }
87 }
@ amxd_dm_access_protected
Definition: amxd_types.h:139

◆ amxd_dm_base_add_funcs()

amxd_status_t PRIVATE amxd_dm_base_add_funcs ( amxd_object_t object)

Definition at line 508 of file amxd_dm_priv.c.

508  {
510 
511  // list function
512  retval = amxd_object_add_list_func(object);
513  when_failed(retval, exit);
514 
515  // describe function
516  retval = amxd_object_add_describe_func(object);
517  when_failed(retval, exit);
518 
519  // get function
520  retval = amxd_object_add_get_func(object);
521  when_failed(retval, exit);
522 
523  // get instances function
524  retval = amxd_object_add_get_instances_func(object);
525  when_failed(retval, exit);
526 
527  // get_supported dm function
528  retval = amxd_object_add_get_supported_func(object);
529  when_failed(retval, exit);
530 
531  // set function
532  retval = amxd_object_add_set_func(object);
533  when_failed(retval, exit);
534 
535  // add (inst) function
536  retval = amxd_object_add_add_func(object);
537  when_failed(retval, exit);
538 
539  // del (inst) function
540  retval = amxd_object_add_del_func(object);
541  when_failed(retval, exit);
542 
543  // del (inst) function
544  retval = amxd_object_add_exec_func(object);
545 
546 exit:
547  return retval;
548 }
static amxd_status_t amxd_object_add_list_func(amxd_object_t *object)
Definition: amxd_dm_priv.c:73
static amxd_status_t amxd_object_add_exec_func(amxd_object_t *object)
Definition: amxd_dm_priv.c:432
static amxd_status_t amxd_object_add_describe_func(amxd_object_t *object)
Definition: amxd_dm_priv.c:380
static amxd_status_t amxd_object_add_add_func(amxd_object_t *object)
Definition: amxd_dm_priv.c:300
static amxd_status_t amxd_object_add_get_func(amxd_object_t *object)
Definition: amxd_dm_priv.c:125
static amxd_status_t amxd_object_add_get_supported_func(amxd_object_t *object)
Definition: amxd_dm_priv.c:206
static amxd_status_t amxd_object_add_get_instances_func(amxd_object_t *object)
Definition: amxd_dm_priv.c:170
static amxd_status_t amxd_object_add_set_func(amxd_object_t *object)
Definition: amxd_dm_priv.c:255
static amxd_status_t amxd_object_add_del_func(amxd_object_t *object)
Definition: amxd_dm_priv.c:342
enum _amxd_status amxd_status_t
@ amxd_status_unknown_error
Definition: amxd_types.h:79

◆ amxd_dm_cancel_deferred()

void PRIVATE amxd_dm_cancel_deferred ( amxd_dm_t dm)

Definition at line 109 of file amxd_function_deferred.c.

109  {
110  amxc_var_t sig_data;
111 
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");
115  amxc_var_add_key(uint32_t, &sig_data, "status", amxd_status_unknown_error);
116 
117  amxc_llist_for_each(it, &dm->deferred) {
118  amxd_deferred_ctx_t* call = amxc_container_of(it, amxd_deferred_ctx_t, dm_it);
119  amxd_cancel_deferred(call, &sig_data);
120  amxd_delete_deferred(&call->it);
121  }
122 
123  amxc_var_clean(&sig_data);
124 }
static void amxd_delete_deferred(amxc_llist_it_t *it)
static void amxd_cancel_deferred(amxd_deferred_ctx_t *call, amxc_var_t *sig_data)
amxc_llist_it_t it
Definition: amxd_dm_priv.h:63
amxc_llist_t deferred
Definition: amxd_types.h:264
static amxd_dm_t dm

◆ amxd_dm_event()

void PRIVATE amxd_dm_event ( const char *  signal,
const amxd_object_t *const  object,
amxc_var_t *const  data,
bool  trigger 
)

Definition at line 550 of file amxd_dm_priv.c.

553  {
554  amxd_dm_t* dm = amxd_object_get_dm(object);
555  char* path = NULL;
556  char* epath = NULL;
557  char* index_path = NULL;
558  amxc_var_t signal_data;
559 
560  when_null(dm, exit);
561 
565  amxc_var_init(&signal_data);
566 
567  amxc_var_set_type(&signal_data, AMXC_VAR_ID_HTABLE);
568  amxc_var_add_key(cstring_t, &signal_data, "object", path);
569  amxc_var_add_key(cstring_t, &signal_data, "path", index_path);
570  amxc_var_add_key(cstring_t, &signal_data, "eobject", epath);
571  if(amxc_var_type_of(data) == AMXC_VAR_ID_HTABLE) {
572  const amxc_htable_t* table_data = amxc_var_constcast(amxc_htable_t, data);
573  amxc_htable_it_t* hit = amxc_htable_get_first(table_data);
574  while(hit) {
575  amxc_var_t* part = amxc_var_from_htable_it(hit);
576  const char* key = amxc_htable_it_get_key(hit);
577  if(GET_ARG(&signal_data, key) == NULL) {
578  amxc_var_set_key(&signal_data, key, part, AMXC_VAR_FLAG_DEFAULT);
579  } else {
580  amxc_var_delete(&part);
581  }
582  hit = amxc_htable_get_first(table_data);
583  }
584  } else {
585  amxc_var_set_key(&signal_data, "data", data, AMXC_VAR_FLAG_COPY);
586  }
587  if(trigger) {
588  amxp_sigmngr_trigger_signal(&dm->sigmngr, signal, &signal_data);
589  } else {
590  amxp_sigmngr_emit_signal(&dm->sigmngr, signal, &signal_data);
591  }
592 
593  amxc_var_clean(&signal_data);
594  free(path);
595  free(epath);
596  free(index_path);
597 
598 exit:
599  return;
600 }
#define AMXD_OBJECT_INDEXED
Name and path format flag - use index for instance objects.
Definition: amxd_object.h:176
#define AMXD_OBJECT_NAMED
Name and path format flag - default behavior, use name for instance objects.
Definition: amxd_object.h:164
#define AMXD_OBJECT_EXTENDED
Path format flag - set name or index of instrance objects between '[' and ']'.
Definition: amxd_object.h:188
#define AMXD_OBJECT_TERMINATE
Path format flag - when set the object path is terminated with a dot.
Definition: amxd_object.h:214
amxd_object_t amxd_status_t amxd_status_t char * amxd_object_get_path(const amxd_object_t *object, const uint32_t flags)
Get the full path of the object.
amxd_dm_t * amxd_object_get_dm(const amxd_object_t *const object)
Get the data model.
amxp_signal_mngr_t sigmngr
Definition: amxd_types.h:261

◆ amxd_dm_set_derived_from()

void PRIVATE amxd_dm_set_derived_from ( amxd_object_t *const  object)

Definition at line 602 of file amxd_dm_priv.c.

602  {
604  switch(type) {
606  case amxd_object_root:
607  amxc_llist_append(&base_singleton.derived_objects, &object->derived_from);
608  break;
610  amxc_llist_append(&base_template.derived_objects, &object->derived_from);
611  break;
612  default:
613  break;
614  }
615 }
static amxd_object_t base_template
Definition: amxd_dm_priv.c:71
static amxd_object_t base_singleton
Definition: amxd_dm_priv.c:70
enum _amxd_object_type amxd_object_type_t
The different object types.
@ amxd_object_root
Definition: amxd_types.h:178
@ amxd_object_template
Definition: amxd_types.h:183
@ amxd_object_singleton
Definition: amxd_types.h:181
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_t derived_objects
Definition: amxd_types.h:248
amxc_llist_it_t derived_from
Definition: amxd_types.h:249

◆ amxd_find_deferred()

amxd_deferred_ctx_t* PRIVATE amxd_find_deferred ( uint64_t  call_id)

Definition at line 96 of file amxd_function_deferred.c.

96  {
97  amxd_deferred_ctx_t* data = NULL;
98  amxc_llist_for_each(it, &deferred) {
99  data = amxc_container_of(it, amxd_deferred_ctx_t, it);
100  if(data->call_id == call_id) {
101  break;
102  }
103  data = NULL;
104  }
105 
106  return data;
107 }
static amxc_llist_t deferred
static uint64_t call_id

◆ amxd_init_base()

void PRIVATE amxd_init_base ( void  )

Definition at line 665 of file amxd_dm_priv.c.

665  {
666  if(amxc_llist_is_empty(&base_singleton.functions)) {
667  amxc_llist_init(&base_objects);
668 
671  amxc_llist_append(&base_objects, &base_singleton.it);
672 
674  amxc_llist_append(&base_objects, &base_template.it);
676  }
677 }
static amxc_llist_t base_objects
Definition: amxd_dm_priv.c:69
void PRIVATE amxd_object_init_base(amxd_object_t *const object, const amxd_object_type_t type)
Definition: amxd_dm_priv.c:472
amxd_status_t PRIVATE amxd_dm_base_add_funcs(amxd_object_t *object)
Definition: amxd_dm_priv.c:508
amxc_llist_t functions
Definition: amxd_types.h:245
amxc_llist_it_t it
Definition: amxd_types.h:230

◆ amxd_object_init_base()

void PRIVATE amxd_object_init_base ( amxd_object_t *const  object,
const amxd_object_type_t  type 
)

Definition at line 472 of file amxd_dm_priv.c.

473  {
474  amxc_llist_it_init(&object->it);
475 
476  object->type = type;
477  object->attr.read_only = 0;
478  object->attr.priv = 0;
479  object->attr.prot = 0;
480  object->attr.persistent = 0;
481  object->attr.locked = 0;
482 
483  object->index = 0;
484  object->last_index = 0;
485 
486  object->name = NULL;
487  object->index_name = NULL;
488 
489  amxc_llist_init(&object->objects);
490  amxc_llist_init(&object->instances);
491  amxc_llist_init(&object->functions);
492  amxc_llist_init(&object->parameters);
493  amxc_var_init(&object->events);
494  amxc_var_set_type(&object->events, AMXC_VAR_ID_HTABLE);
495 
496  amxc_llist_init(&object->cb_fns);
497 
498  amxc_llist_init(&object->derived_objects);
499  amxc_llist_it_init(&object->derived_from);
500 
501  amxc_array_init(&object->mib_names, 0);
502 }
amxc_llist_t cb_fns
Definition: amxd_types.h:253
amxc_llist_t objects
Definition: amxd_types.h:243
amxc_array_t mib_names
Definition: amxd_types.h:254
amxc_llist_t instances
Definition: amxd_types.h:244
amxc_var_t events
Definition: amxd_types.h:256
amxc_llist_t parameters
Definition: amxd_types.h:246

◆ amxd_object_is_base()

bool PRIVATE amxd_object_is_base ( const amxd_object_t *const  object)

Definition at line 504 of file amxd_dm_priv.c.

504  {
505  return ((object == &base_singleton) || (object == &base_template));
506 }