libamxs  0.6.0
Data Model Synchronization C API
dummy_be.c File Reference
#include <stdlib.h>
#include <string.h>
#include <amxc/amxc.h>
#include <amxp/amxp.h>
#include <amxd/amxd_dm.h>
#include <amxd/amxd_object.h>
#include <amxd/amxd_object_function.h>
#include <amxb/amxb_be.h>
#include <amxo/amxo.h>
#include "dummy_be.h"
#include <amxc/amxc_macros.h>

Go to the source code of this file.

Functions

static void amxb_dummy_send_notification (const char *const sig_name, const amxc_var_t *const data, void *const priv)
 
static void amxb_dummy_free_subscription (UNUSED const char *key, amxc_htable_it_t *it)
 
static void * amxb_dummy_connect (UNUSED const char *host, UNUSED const char *port, UNUSED const char *path, UNUSED amxp_signal_mngr_t *sigmngr)
 
static int amxb_dummy_disconnect (UNUSED void *ctx)
 
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 (UNUSED void *ctx)
 
static int amxb_dummy_register (UNUSED void *const ctx, UNUSED amxd_dm_t *const dm)
 
static bool amxb_dummy_has (UNUSED void *const ctx, const char *object)
 
static uint32_t amxb_dummy_capabilities (UNUSED void *const ctx)
 
static int amxb_dummy_subscribe (UNUSED void *const ctx, const char *object)
 
static int amxb_dummy_unsubscribe (UNUSED void *const ctx, const char *object)
 
int test_register_dummy_be (void)
 
int test_unregister_dummy_be (void)
 
int test_load_dummy_remote (const char *odl)
 
void test_set_dummy_caps (uint32_t dummy_caps)
 
amxd_dm_t * test_get_dm (void)
 
amxo_parser_t * test_get_parser (void)
 

Variables

static amxd_dm_t remote_dm
 
static amxo_parser_t parser
 
static uint32_t caps = AMXB_BE_DISCOVER_DESCRIBE | AMXB_BE_DISCOVER_LIST | AMXB_BE_DISCOVER
 
static amxp_signal_mngr_t * dummy_sigmngr = NULL
 
static amxc_htable_t subscriptions
 
static amxb_be_funcs_t amxb_dummy_impl
 
static amxb_version_t sup_min_lib_version
 
static amxb_version_t sup_max_lib_version
 
static amxb_version_t dummy_be_version
 
amxb_be_info_t amxb_dummy_be_info
 

Function Documentation

◆ amxb_dummy_capabilities()

static uint32_t amxb_dummy_capabilities ( UNUSED void *const  ctx)
static

Definition at line 158 of file dummy_be.c.

158  {
159  return caps;
160 }
static uint32_t caps
Definition: dummy_be.c:70

◆ amxb_dummy_connect()

static void* amxb_dummy_connect ( UNUSED const char *  host,
UNUSED const char *  port,
UNUSED const char *  path,
UNUSED amxp_signal_mngr_t *  sigmngr 
)
static

Definition at line 94 of file dummy_be.c.

97  {
98 
99  amxd_dm_init(&remote_dm);
100  amxo_parser_init(&parser);
101  dummy_sigmngr = sigmngr;
102  return &remote_dm;
103 }
static amxd_dm_t remote_dm
Definition: dummy_be.c:68
static amxp_signal_mngr_t * dummy_sigmngr
Definition: dummy_be.c:71
static amxo_parser_t parser
Definition: dummy_be.c:69

◆ amxb_dummy_disconnect()

static int amxb_dummy_disconnect ( UNUSED void *  ctx)
static

Definition at line 105 of file dummy_be.c.

105  {
106  amxd_dm_clean(&remote_dm);
107  dummy_sigmngr = NULL;
108  return 0;
109 }

◆ amxb_dummy_free()

static void amxb_dummy_free ( UNUSED void *  ctx)
static

Definition at line 141 of file dummy_be.c.

141  {
142  amxo_parser_clean(&parser);
143  amxd_dm_clean(&remote_dm);
144 }

◆ amxb_dummy_free_subscription()

static void amxb_dummy_free_subscription ( UNUSED const char *  key,
amxc_htable_it_t *  it 
)
static

Definition at line 90 of file dummy_be.c.

90  {
91  free(it);
92 }

◆ amxb_dummy_has()

static bool amxb_dummy_has ( UNUSED void *const  ctx,
const char *  object 
)
static

Definition at line 151 of file dummy_be.c.

152  {
153  amxd_object_t* obj = amxd_dm_findf(&remote_dm, "%s", object);
154 
155  return obj != NULL;
156 }

◆ amxb_dummy_invoke()

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

Definition at line 111 of file dummy_be.c.

115  {
116 
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);
122 
123  int rv = 0;
124 
125  if(args == NULL) {
126  args = &empty_args;
127  }
128 
129  return_value = amxc_var_add_new(request->result);
130  amxd_object_t* obj = amxd_dm_findf(&remote_dm, invoke_ctx->object);
131  if(obj == NULL) {
132  rv = amxd_status_invalid_path;
133  } else {
134  rv = amxd_object_invoke_function(obj, invoke_ctx->method, args, return_value);
135  }
136 
137  amxc_var_clean(&empty_args);
138  return rv;
139 }

◆ amxb_dummy_register()

static int amxb_dummy_register ( UNUSED void *const  ctx,
UNUSED amxd_dm_t *const  dm 
)
static

Definition at line 146 of file dummy_be.c.

147  {
148  return 0;
149 }

◆ amxb_dummy_send_notification()

static void amxb_dummy_send_notification ( const char *const  sig_name,
const amxc_var_t *const  data,
void *const  priv 
)
static

Definition at line 74 of file dummy_be.c.

76  {
77  amxc_var_t notification;
78  amxc_htable_it_t* it = (amxc_htable_it_t*) priv;
79  amxc_var_init(&notification);
80  amxc_var_set_type(&notification, AMXC_VAR_ID_HTABLE);
81 
82  amxc_var_copy(&notification, data);
83  amxc_var_add_key(cstring_t, &notification, "notification", sig_name);
84 
85  amxp_sigmngr_emit_signal(dummy_sigmngr, amxc_htable_it_get_key(it), &notification);
86 
87  amxc_var_clean(&notification);
88 }

◆ amxb_dummy_subscribe()

static int amxb_dummy_subscribe ( UNUSED void *const  ctx,
const char *  object 
)
static

Definition at line 162 of file dummy_be.c.

163  {
164 
165  int retval = 0;
166  amxc_string_t expression;
167  amxc_htable_it_t* it = NULL;
168 
169  amxc_string_init(&expression, 0);
170 
171  when_failed(retval, exit);
172 
173  it = (amxc_htable_it_t*) calloc(1, sizeof(amxc_htable_it_t));
174  amxc_htable_insert(&subscriptions, object, it);
175  amxc_string_appendf(&expression, "path starts with \"%s.\"", object);
176  amxp_slot_connect_filtered(&remote_dm.sigmngr,
177  ".*",
178  amxc_string_get(&expression, 0),
180  it);
181 
182 exit:
183  amxc_string_clean(&expression);
184  return retval;
185 }
static amxc_htable_t subscriptions
Definition: dummy_be.c:72
static void amxb_dummy_send_notification(const char *const sig_name, const amxc_var_t *const data, void *const priv)
Definition: dummy_be.c:74

◆ amxb_dummy_unsubscribe()

static int amxb_dummy_unsubscribe ( UNUSED void *const  ctx,
const char *  object 
)
static

Definition at line 187 of file dummy_be.c.

188  {
189  amxc_htable_it_t* it = amxc_htable_get(&subscriptions, object);
190  if(it != NULL) {
191  amxp_slot_disconnect_with_priv(&remote_dm.sigmngr, amxb_dummy_send_notification, it);
192  }
193  amxc_htable_it_clean(it, amxb_dummy_free_subscription);
194 
195  return 0;
196 }
static void amxb_dummy_free_subscription(UNUSED const char *key, amxc_htable_it_t *it)
Definition: dummy_be.c:90

◆ test_get_dm()

amxd_dm_t* test_get_dm ( void  )

Definition at line 264 of file dummy_be.c.

264  {
265  return &remote_dm;
266 }

◆ test_get_parser()

amxo_parser_t* test_get_parser ( void  )

Definition at line 268 of file dummy_be.c.

268  {
269  return &parser;
270 }

◆ test_load_dummy_remote()

int test_load_dummy_remote ( const char *  odl)

Definition at line 254 of file dummy_be.c.

254  {
255  amxd_object_t* root_obj = amxd_dm_get_root(&remote_dm);
256 
257  return amxo_parser_parse_file(&parser, odl, root_obj);
258 }

◆ test_register_dummy_be()

int test_register_dummy_be ( void  )

Definition at line 244 of file dummy_be.c.

244  {
245  amxc_htable_init(&subscriptions, 5);
246  return amxb_be_register(&amxb_dummy_impl);
247 }
static amxb_be_funcs_t amxb_dummy_impl
Definition: dummy_be.c:198

◆ test_set_dummy_caps()

void test_set_dummy_caps ( uint32_t  dummy_caps)

Definition at line 260 of file dummy_be.c.

260  {
261  caps = dummy_caps;
262 }

◆ test_unregister_dummy_be()

int test_unregister_dummy_be ( void  )

Definition at line 249 of file dummy_be.c.

249  {
250  amxc_htable_clean(&subscriptions, amxb_dummy_free_subscription);
251  return amxb_be_unregister(&amxb_dummy_impl);
252 }

Variable Documentation

◆ amxb_dummy_be_info

amxb_be_info_t amxb_dummy_be_info
Initial value:
= {
.min_supported = &sup_min_lib_version,
.max_supported = &sup_max_lib_version,
.be_version = &dummy_be_version,
.name = "dummy",
.description = "AMXB Dummy Backend for testing",
.funcs = &amxb_dummy_impl,
}
static amxb_version_t dummy_be_version
Definition: dummy_be.c:229
static amxb_version_t sup_max_lib_version
Definition: dummy_be.c:223
static amxb_version_t sup_min_lib_version
Definition: dummy_be.c:217

Definition at line 235 of file dummy_be.c.

◆ amxb_dummy_impl

amxb_be_funcs_t amxb_dummy_impl
static
Initial value:
= {
.connect = amxb_dummy_connect,
.disconnect = amxb_dummy_disconnect,
.get_fd = NULL,
.read = NULL,
.invoke = amxb_dummy_invoke,
.async_invoke = NULL,
.wait_request = NULL,
.close_request = NULL,
.subscribe = amxb_dummy_subscribe,
.unsubscribe = amxb_dummy_unsubscribe,
.free = amxb_dummy_free,
.register_dm = amxb_dummy_register,
.capabilities = amxb_dummy_capabilities,
.name = "dummy",
.size = sizeof(amxb_be_funcs_t),
}
static void amxb_dummy_free(UNUSED void *ctx)
Definition: dummy_be.c:141
static int amxb_dummy_subscribe(UNUSED void *const ctx, const char *object)
Definition: dummy_be.c:162
static int amxb_dummy_disconnect(UNUSED void *ctx)
Definition: dummy_be.c:105
static uint32_t amxb_dummy_capabilities(UNUSED void *const ctx)
Definition: dummy_be.c:158
static int amxb_dummy_register(UNUSED void *const ctx, UNUSED amxd_dm_t *const dm)
Definition: dummy_be.c:146
static int amxb_dummy_unsubscribe(UNUSED void *const ctx, const char *object)
Definition: dummy_be.c:187
static bool amxb_dummy_has(UNUSED void *const ctx, const char *object)
Definition: dummy_be.c:151
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)
Definition: dummy_be.c:111
static void * amxb_dummy_connect(UNUSED const char *host, UNUSED const char *port, UNUSED const char *path, UNUSED amxp_signal_mngr_t *sigmngr)
Definition: dummy_be.c:94

Definition at line 198 of file dummy_be.c.

◆ caps

uint32_t caps = AMXB_BE_DISCOVER_DESCRIBE | AMXB_BE_DISCOVER_LIST | AMXB_BE_DISCOVER
static

Definition at line 70 of file dummy_be.c.

◆ dummy_be_version

amxb_version_t dummy_be_version
static
Initial value:
= {
.major = 0,
.minor = 0,
.build = 0,
}

Definition at line 229 of file dummy_be.c.

◆ dummy_sigmngr

amxp_signal_mngr_t* dummy_sigmngr = NULL
static

Definition at line 71 of file dummy_be.c.

◆ parser

amxo_parser_t parser
static

Definition at line 69 of file dummy_be.c.

◆ remote_dm

amxd_dm_t remote_dm
static

Definition at line 68 of file dummy_be.c.

◆ subscriptions

amxc_htable_t subscriptions
static

Definition at line 72 of file dummy_be.c.

◆ sup_max_lib_version

amxb_version_t sup_max_lib_version
static
Initial value:
= {
.major = 2,
.minor = -1,
.build = -1
}

Definition at line 223 of file dummy_be.c.

◆ sup_min_lib_version

amxb_version_t sup_min_lib_version
static
Initial value:
= {
.major = 2,
.minor = 0,
.build = -1
}

Definition at line 217 of file dummy_be.c.