#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <amxrt/amxrt.h>
#include <amxp/amxp_dir.h>
#include <amxp/amxp_connection.h>
#include <amxb/amxb_register.h>
#include "amxrt_priv.h"
Go to the source code of this file.
|
static void | amxrt_connection_read (UNUSED int fd, UNUSED void *priv) |
|
static int | amxrt_connection_listen_bus_uri (const char *uri, amxb_bus_ctx_t **bus_ctx) |
|
static int | amxrt_connection_connect_all_type (const amxc_llist_t *uris, uint32_t type) |
|
static bool | amxrt_list_contains (amxc_var_t *list, const char *value) |
|
static int | amxrt_connection_add_usp_socket (const char *name, void *priv) |
|
static void | amxrt_connection_filter_uris (const amxc_llist_t *uris, const amxc_llist_t *exclude_uris) |
|
static void | amxrt_add_known_uris (amxc_var_t *uris) |
|
static void | amxrt_set_backend_setting (amxc_var_t *config, const char *backend, const char *setting, const char *value) |
|
static void | amxrt_move_backend_uris (amxc_var_t *config, amxc_var_t *backend_settings) |
|
void | amxrt_connection_detect_sockets (amxc_var_t *config) |
|
int | amxrt_connection_load_backends (amxc_var_t *config) |
|
int | amxrt_connection_connect_all (amxo_parser_t *parser) |
|
int | amxrt_connection_listen_all (amxo_parser_t *parser) |
|
int | amxrt_connection_register_dm (UNUSED amxo_parser_t *parser, amxd_dm_t *dm) |
|
◆ _GNU_SOURCE
◆ amxrt_add_known_uris()
static void amxrt_add_known_uris |
( |
amxc_var_t * |
uris | ) |
|
|
static |
Definition at line 183 of file amxrt_connections.c.
187 if(amxb_be_get_info(
"pcb") != NULL) {
188 if(stat(
"/var/run/pcb_sys", &sb) == 0) {
190 amxc_var_add(cstring_t, uris,
"pcb:/var/run/pcb_sys");
194 if(amxb_be_get_info(
"ubus") != NULL) {
195 if((stat(
"/var/run/ubus.sock", &sb) == 0) || (stat(
"/var/run/ubus/ubus.sock", &sb) == 0)) {
196 if(stat(
"/var/run/ubus.sock", &sb) == 0) {
198 amxc_var_add(cstring_t, uris,
"ubus:/var/run/ubus.sock");
202 amxc_var_add(cstring_t, uris,
"ubus:/var/run/ubus/ubus.sock");
208 if(amxb_be_get_info(
"usp") != NULL) {
static int amxrt_connection_add_usp_socket(const char *name, void *priv)
static bool amxrt_list_contains(amxc_var_t *list, const char *value)
◆ amxrt_connection_add_usp_socket()
static int amxrt_connection_add_usp_socket |
( |
const char * |
name, |
|
|
void * |
priv |
|
) |
| |
|
static |
Definition at line 152 of file amxrt_connections.c.
153 amxc_var_t* sockets = (amxc_var_t*) priv;
154 amxc_string_t filename;
155 amxc_string_init(&filename, 0);
156 amxc_string_setf(&filename,
"usp:%s", name);
158 amxc_var_add(cstring_t, sockets, amxc_string_get(&filename, 0));
160 amxc_string_clean(&filename);
◆ amxrt_connection_connect_all()
int amxrt_connection_connect_all |
( |
amxo_parser_t * |
parser | ) |
|
Definition at line 342 of file amxrt_connections.c.
344 const amxc_llist_t* uris = amxc_var_constcast(amxc_llist_t, GET_ARG(&parser->config,
AMXRT_COPT_URIS));
345 const amxc_llist_t* data_uris = amxc_var_constcast(amxc_llist_t, GET_ARG(&parser->config,
AMXRT_COPT_DATA_URIS));
353 when_failed(retval, leave);
#define AMXRT_COPT_DATA_URIS
#define AMXRT_COPT_AUTO_CONNECT
static void amxrt_connection_filter_uris(const amxc_llist_t *uris, const amxc_llist_t *exclude_uris)
static int amxrt_connection_connect_all_type(const amxc_llist_t *uris, uint32_t type)
◆ amxrt_connection_connect_all_type()
static int amxrt_connection_connect_all_type |
( |
const amxc_llist_t * |
uris, |
|
|
uint32_t |
type |
|
) |
| |
|
static |
Definition at line 117 of file amxrt_connections.c.
121 amxc_llist_for_each(it, uris) {
122 amxb_bus_ctx_t* bus_ctx = NULL;
124 const char* uri = amxc_var_constcast(cstring_t,
125 amxc_var_from_llist_it(it));
127 retval = amxb_connect(&bus_ctx, uri);
131 fd = amxb_get_fd(bus_ctx);
static void amxrt_connection_read(UNUSED int fd, UNUSED void *priv)
PRIVATE void amxrt_print_error(const char *fmt,...)
◆ amxrt_connection_detect_sockets()
void amxrt_connection_detect_sockets |
( |
amxc_var_t * |
config | ) |
|
Definition at line 256 of file amxrt_connections.c.
259 amxc_array_t* backends = amxb_be_list();
260 size_t size = amxc_array_size(backends);
272 for(
size_t i = 0; i < size; i++) {
273 const char* be_name = (
const char*) amxc_array_get_data_at(backends, i);
274 amxc_var_t* backend_settings = GET_ARG(
config, be_name);
280 for(
size_t i = 0; i < size; i++) {
281 const char* be_name = (
const char*) amxc_array_get_data_at(backends, i);
282 amxc_var_t* backend_settings = GET_ARG(
config, be_name);
285 amxc_var_delete(&be_uris);
286 amxc_var_delete(&be_data_uris);
290 amxc_array_delete(&backends, NULL);
#define AMXRT_COPT_AUTO_DETECT
static void amxrt_move_backend_uris(amxc_var_t *config, amxc_var_t *backend_settings)
static void amxrt_add_known_uris(amxc_var_t *uris)
◆ amxrt_connection_filter_uris()
static void amxrt_connection_filter_uris |
( |
const amxc_llist_t * |
uris, |
|
|
const amxc_llist_t * |
exclude_uris |
|
) |
| |
|
static |
Definition at line 165 of file amxrt_connections.c.
168 amxc_var_t* euri_var = NULL;
169 amxc_var_t* uri_var = NULL;
171 amxc_llist_for_each(eit, exclude_uris) {
172 euri_var = amxc_var_from_llist_it(eit);
173 amxc_llist_for_each(it, uris) {
174 uri_var = amxc_var_from_llist_it(it);
175 if((amxc_var_compare(uri_var, euri_var, &cresult) == 0) && (cresult == 0)) {
176 amxc_llist_it_take(it);
177 variant_list_it_free(it);
◆ amxrt_connection_listen_all()
int amxrt_connection_listen_all |
( |
amxo_parser_t * |
parser | ) |
|
Definition at line 360 of file amxrt_connections.c.
362 const amxc_llist_t* listen = amxc_var_constcast(amxc_llist_t, GET_ARG(&parser->config,
AMXRT_COPT_LISTEN));
364 amxc_llist_for_each(it, listen) {
365 amxb_bus_ctx_t* bus_ctx = NULL;
367 const char* uri = amxc_var_constcast(cstring_t,
368 amxc_var_from_llist_it(it));
374 fd = amxb_get_fd(bus_ctx);
#define AMXRT_COPT_LISTEN
static int amxrt_connection_listen_bus_uri(const char *uri, amxb_bus_ctx_t **bus_ctx)
◆ amxrt_connection_listen_bus_uri()
static int amxrt_connection_listen_bus_uri |
( |
const char * |
uri, |
|
|
amxb_bus_ctx_t ** |
bus_ctx |
|
) |
| |
|
static |
◆ amxrt_connection_load_backends()
int amxrt_connection_load_backends |
( |
amxc_var_t * |
config | ) |
|
Definition at line 293 of file amxrt_connections.c.
296 amxc_array_t* backend_names = NULL;
300 if(amxc_var_type_of(backends) == AMXC_VAR_ID_LIST) {
301 const amxc_llist_t* bel = amxc_var_constcast(amxc_llist_t, backends);
302 if(amxc_llist_is_empty(bel)) {
307 char* str = amxc_var_dyncast(cstring_t, backends);
308 if((str == NULL) || (str[0] == 0)) {
316 retval = amxb_be_load_multiple(backends);
328 backend_names = amxb_be_list();
329 size = amxc_array_size(backend_names);
330 for(
size_t i = 0; i < size; i++) {
331 const char* be_name = (
const char*) amxc_array_get_data_at(backend_names, i);
334 amxc_array_delete(&backend_names, NULL);
338 amxc_var_delete(&backends);
#define AMXRT_COPT_BACKENDS
static void amxrt_set_backend_setting(amxc_var_t *config, const char *backend, const char *setting, const char *value)
◆ amxrt_connection_read()
static void amxrt_connection_read |
( |
UNUSED int |
fd, |
|
|
UNUSED void * |
priv |
|
) |
| |
|
static |
Definition at line 70 of file amxrt_connections.c.
71 amxb_bus_ctx_t* bus_ctx = (amxb_bus_ctx_t*) priv;
74 if(amxb_is_data_socket(bus_ctx)) {
75 rv = amxb_read(bus_ctx);
77 amxb_bus_ctx_t* new_ctx = NULL;
78 rv = amxb_accept(bus_ctx, &new_ctx);
80 fd = amxb_get_fd(new_ctx);
85 amxc_llist_t* connections = amxp_connection_get_connections();
89 con->uri == NULL ?
"accepted" : con->uri, fd);
91 con->uri == NULL ?
"accepted" : con->uri, fd);
92 amxp_connection_remove(fd);
95 if(amxc_llist_is_empty(amxp_connection_get_connections()) &&
96 amxc_llist_is_empty(amxp_connection_get_listeners())) {
PRIVATE void amxrt_print_message(const char *fmt,...)
PRIVATE amxp_connection_t * amxrt_el_get_connection(amxc_llist_t *cons, int fd)
int amxrt_el_stop(void)
Stops the event loop.
◆ amxrt_connection_register_dm()
int amxrt_connection_register_dm |
( |
UNUSED amxo_parser_t * |
parser, |
|
|
amxd_dm_t * |
dm |
|
) |
| |
Definition at line 382 of file amxrt_connections.c.
384 amxc_llist_t* connections = amxp_connection_get_connections();
385 amxc_llist_for_each(it, connections) {
386 amxp_connection_t* con = amxc_llist_it_get_data(it, amxp_connection_t, it);
387 amxb_bus_ctx_t* bus_ctx = (amxb_bus_ctx_t*) con->priv;
388 if(con->type != AMXP_CONNECTION_BUS) {
391 retval = amxb_register(bus_ctx, dm);
398 amxc_llist_for_each(it, amxp_connection_get_listeners()) {
399 amxp_connection_t* con = amxc_llist_it_get_data(it, amxp_connection_t, it);
400 amxb_bus_ctx_t* bus_ctx = (amxb_bus_ctx_t*) con->priv;
401 retval = amxb_register(bus_ctx, dm);
402 when_failed(retval, leave);
◆ amxrt_list_contains()
static bool amxrt_list_contains |
( |
amxc_var_t * |
list, |
|
|
const char * |
value |
|
) |
| |
|
static |
Definition at line 139 of file amxrt_connections.c.
141 amxc_var_for_each(v, list) {
142 const char* stored = GET_CHAR(v, NULL);
143 if(strcmp(stored, value) == 0) {
◆ amxrt_move_backend_uris()
static void amxrt_move_backend_uris |
( |
amxc_var_t * |
config, |
|
|
amxc_var_t * |
backend_settings |
|
) |
| |
|
static |
Definition at line 230 of file amxrt_connections.c.
236 amxc_var_for_each(uri, be_uris) {
237 const char* u = GET_CHAR(uri, NULL);
240 amxc_var_set_index(uris, 0, uri, AMXC_VAR_FLAG_DEFAULT);
244 amxc_var_for_each(uri, be_data_uris) {
245 const char* u = GET_CHAR(uri, NULL);
248 amxc_var_set_index(data_uris, 0, uri, AMXC_VAR_FLAG_DEFAULT);
252 amxc_var_delete(&be_uris);
253 amxc_var_delete(&be_data_uris);
◆ amxrt_set_backend_setting()
static void amxrt_set_backend_setting |
( |
amxc_var_t * |
config, |
|
|
const char * |
backend, |
|
|
const char * |
setting, |
|
|
const char * |
value |
|
) |
| |
|
static |
Definition at line 213 of file amxrt_connections.c.
217 amxc_var_t* backend_settings = GET_ARG(
config, backend);
218 amxc_var_t* backend_config_opt = NULL;
219 if(backend_settings == NULL) {
220 backend_settings = amxc_var_add_key(amxc_htable_t,
config, backend, NULL);
222 backend_config_opt = GET_ARG(backend_settings, setting);
223 if(backend_config_opt == NULL) {
224 amxc_var_add_key(cstring_t, backend_settings, setting, value);
226 amxc_var_set(cstring_t, backend_config_opt, value);