libamxd  6.4.1
Data Model Manager
amxd_object_mib.c File Reference
#include <stdlib.h>
#include <string.h>
#include <amxc/amxc.h>
#include <amxp/amxp_signal.h>
#include <amxp/amxp_slot.h>
#include <amxd/amxd_types.h>
#include <amxd/amxd_object.h>
#include <amxd/amxd_dm.h>
#include <amxd/amxd_dm_functions.h>
#include <amxd/amxd_mib.h>
#include <amxd/amxd_object_event.h>
#include "amxd_priv.h"
#include "amxd_dm_priv.h"
#include "amxd_object_priv.h"
#include "amxd_assert.h"

Go to the source code of this file.

Macros

#define _GNU_SOURCE
 

Functions

static void amxd_object_remove_mib_params (amxd_object_t *const object, amxd_object_t *const mib)
 
static void amxd_object_remove_mib_functions (amxd_object_t *const object, amxd_object_t *const mib)
 
static void amxd_object_remove_mib_objects (amxd_object_t *const object, amxd_object_t *const mib)
 
static void amxd_object_remove_mib_events (amxd_object_t *const object, amxd_object_t *const mib)
 
static void amxd_object_clear_mib (amxd_object_t *const object, const char *mib_name)
 
static bool amxd_object_can_add_mib (amxd_object_t *const object, amxd_object_t *const mib)
 
static void amxd_object_send_add_objects (amxd_object_t *object, amxd_object_t *mib)
 
static void amxd_object_send_del_objects (amxd_object_t *object, amxd_object_t *mib)
 
static void amxd_object_send_mib (amxd_object_t *object, const char *mib_name, bool added)
 
char * amxd_object_get_mibs (amxd_object_t *object)
 Get the names of all mibs attached to this object. More...
 
bool amxd_object_has_mib (amxd_object_t *object, const char *mib_name)
 Checks if a mib has been added to a data model object. More...
 
amxd_status_t amxd_object_add_mib (amxd_object_t *const object, const char *mib_name)
 Adds a mib to an object. More...
 
amxd_status_t amxd_object_remove_mib (amxd_object_t *const object, const char *mib_name)
 Removes a mib from an object. More...
 
void amxd_mib_delete (amxd_object_t **mib)
 

Macro Definition Documentation

◆ _GNU_SOURCE

#define _GNU_SOURCE

Definition at line 56 of file amxd_object_mib.c.

Function Documentation

◆ amxd_mib_delete()

void amxd_mib_delete ( amxd_object_t **  mib)

Definition at line 314 of file amxd_object_mib.c.

314  {
315  when_null(mib, exit);
316  when_null(*mib, exit);
317 
318  when_true(amxd_object_get_type(*mib) != amxd_object_mib, exit);
319 
320  amxd_object_free(mib);
321 
322 exit:
323  return;
324 }
@ amxd_object_mib
Definition: amxd_types.h:188
static amxd_object_type_t amxd_object_get_type(const amxd_object_t *const object)
Returns the object type.
Definition: amxd_object.h:586
void amxd_object_free(amxd_object_t **object)
Data model object destructor function.
Definition: amxd_object.c:153

◆ amxd_object_can_add_mib()

static bool amxd_object_can_add_mib ( amxd_object_t *const  object,
amxd_object_t *const  mib 
)
static

Definition at line 141 of file amxd_object_mib.c.

142  {
143  bool retval = false;
144  amxc_llist_for_each(it, (&mib->objects)) {
145  amxd_object_t* mib_obj = amxc_llist_it_get_data(it, amxd_object_t, it);
146  const char* obj_name = amxd_object_get_name(mib_obj, AMXD_OBJECT_NAMED);
147  amxd_object_t* obj_child = amxd_object_get_child(object, obj_name);
148  when_true(obj_child != NULL, exit);
149  }
150 
151  amxc_llist_for_each(it, (&mib->parameters)) {
152  amxd_param_t* mib_param = amxc_llist_it_get_data(it, amxd_param_t, it);
153  const char* param_name = amxd_param_get_name(mib_param);
154  amxd_param_t* obj_param = amxd_object_get_param_def(object, param_name);
155  when_true(obj_param != NULL, exit);
156  }
157 
158  amxc_llist_for_each(it, (&mib->functions)) {
159  amxd_function_t* mib_func = amxc_llist_it_get_data(it, amxd_function_t, it);
160  const char* func_name = amxd_function_get_name(mib_func);
161  amxd_function_t* obj_func = amxd_object_get_self_func(object, func_name);
162  when_true(obj_func != NULL, exit);
163  }
164 
165  retval = true;
166 exit:
167  return retval;
168 }
PRIVATE amxd_function_t * amxd_object_get_self_func(const amxd_object_t *const object, const char *name)
const char * amxd_param_get_name(const amxd_param_t *const param)
#define AMXD_OBJECT_NAMED
Name and path format flag - default behavior, use name for instance objects.
Definition: amxd_object.h:164
amxd_object_t * amxd_object_get_child(const amxd_object_t *object, const char *name)
Get a child of the object.
amxd_param_t * amxd_object_get_param_def(const amxd_object_t *const object, const char *name)
Gets a parameter definition from an object.
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
const char * amxd_function_get_name(const amxd_function_t *const func)
Get the name of a method.
RPC method structure.
Definition: amxd_types.h:341
amxc_llist_t functions
Definition: amxd_types.h:245
amxc_llist_t objects
Definition: amxd_types.h:243
amxc_llist_t parameters
Definition: amxd_types.h:246

◆ amxd_object_clear_mib()

static void amxd_object_clear_mib ( amxd_object_t *const  object,
const char *  mib_name 
)
static

Definition at line 126 of file amxd_object_mib.c.

127  {
128  amxc_array_it_t* ait = amxc_array_get_first(&object->mib_names);
129  while(ait != NULL) {
130  const char* name = (const char*) amxc_array_it_get_data(ait);
131  if(name != NULL) {
132  if(strcmp(name, mib_name) == 0) {
133  amxc_array_it_take_data(ait);
134  break;
135  }
136  }
137  ait = amxc_array_it_get_next(ait);
138  }
139 }
amxc_array_t mib_names
Definition: amxd_types.h:254

◆ amxd_object_remove_mib_events()

static void amxd_object_remove_mib_events ( amxd_object_t *const  object,
amxd_object_t *const  mib 
)
static

Definition at line 117 of file amxd_object_mib.c.

118  {
119  amxc_var_for_each(data, (&mib->events)) {
120  const char* name = amxc_var_key(data);
121  amxc_var_t* event = amxc_var_get_key(&object->events, name, AMXC_VAR_FLAG_DEFAULT);
122  amxc_var_delete(&event);
123  }
124 }
amxc_var_t events
Definition: amxd_types.h:256

◆ amxd_object_remove_mib_functions()

static void amxd_object_remove_mib_functions ( amxd_object_t *const  object,
amxd_object_t *const  mib 
)
static

Definition at line 91 of file amxd_object_mib.c.

92  {
93  amxc_llist_for_each(it, (&mib->functions)) {
94  amxd_function_t* mib_func = amxc_llist_it_get_data(it, amxd_function_t, it);
95  const char* func_name = amxd_function_get_name(mib_func);
96  amxd_function_t* obj_func = amxd_object_get_function(object, func_name);
97  if(obj_func == NULL) {
98  continue;
99  }
100  amxd_function_delete(&obj_func);
101  }
102 }
amxd_function_t * amxd_object_get_function(const amxd_object_t *const object, const char *name)
Get the definition of a RPC method from an object.
void amxd_function_delete(amxd_function_t **func)
Data model RPC method destructor function.

◆ amxd_object_remove_mib_objects()

static void amxd_object_remove_mib_objects ( amxd_object_t *const  object,
amxd_object_t *const  mib 
)
static

Definition at line 104 of file amxd_object_mib.c.

105  {
106  amxc_llist_for_each(it, (&mib->objects)) {
107  amxd_object_t* mib_obj = amxc_llist_it_get_data(it, amxd_object_t, it);
108  const char* obj_name = amxd_object_get_name(mib_obj, AMXD_OBJECT_NAMED);
109  amxd_object_t* obj_child = amxd_object_get_child(object, obj_name);
110  if(obj_child == NULL) {
111  continue;
112  }
113  amxd_object_free(&obj_child);
114  }
115 }

◆ amxd_object_remove_mib_params()

static void amxd_object_remove_mib_params ( amxd_object_t *const  object,
amxd_object_t *const  mib 
)
static

Definition at line 78 of file amxd_object_mib.c.

79  {
80  amxc_llist_for_each(it, (&mib->parameters)) {
81  amxd_param_t* mib_param = amxc_llist_it_get_data(it, amxd_param_t, it);
82  const char* param_name = amxd_param_get_name(mib_param);
83  amxd_param_t* obj_param = amxd_object_get_param_def(object, param_name);
84  if(obj_param == NULL) {
85  continue;
86  }
87  amxd_param_free(&obj_param);
88  }
89 }
void PRIVATE amxd_param_free(amxd_param_t **param)

◆ amxd_object_send_add_objects()

static void amxd_object_send_add_objects ( amxd_object_t object,
amxd_object_t mib 
)
static

Definition at line 170 of file amxd_object_mib.c.

171  {
172  amxc_llist_for_each(it, (&mib->objects)) {
173  amxd_object_t* base = amxc_llist_it_get_data(it, amxd_object_t, it);
174  const char* name = amxd_object_get_name(base, AMXD_OBJECT_NAMED);
175  amxd_object_t* child = amxd_object_get(object, name);
176  amxd_dm_event("dm:object-added", child, NULL, false);
177  amxd_object_send_add_objects(child, base);
178  }
179 }
void PRIVATE amxd_dm_event(const char *signal, const amxd_object_t *const object, amxc_var_t *const data, bool trigger)
Definition: amxd_dm_priv.c:550
static void amxd_object_send_add_objects(amxd_object_t *object, amxd_object_t *mib)
amxd_object_t * amxd_object_get(const amxd_object_t *object, const char *name)
Get an instance or child of an object.

◆ amxd_object_send_del_objects()

static void amxd_object_send_del_objects ( amxd_object_t object,
amxd_object_t mib 
)
static

Definition at line 181 of file amxd_object_mib.c.

182  {
183  amxc_llist_for_each(it, (&mib->objects)) {
184  amxd_object_t* base = amxc_llist_it_get_data(it, amxd_object_t, it);
185  const char* name = amxd_object_get_name(base, AMXD_OBJECT_NAMED);
186  amxd_object_t* child = amxd_object_get(object, name);
187  amxd_object_send_del_object(child, false);
188  }
189 }
void amxd_object_send_del_object(amxd_object_t *object, bool trigger)

◆ amxd_object_send_mib()

static void amxd_object_send_mib ( amxd_object_t object,
const char *  mib_name,
bool  added 
)
static

Definition at line 191 of file amxd_object_mib.c.

193  {
194  amxc_var_t data;
195 
196  amxc_var_init(&data);
197  amxc_var_set_type(&data, AMXC_VAR_ID_HTABLE);
198  amxc_var_add_key(cstring_t, &data, "mib", mib_name);
199 
200  amxd_dm_event(added ? "dm:mib-added" : "dm:mib-removed", object, &data, false);
201 
202  amxc_var_clean(&data);
203 }