libamxrt  0.4.2
Ambiorix Run Time Library
amxrt_priv.h File Reference

Go to the source code of this file.

Data Structures

struct  _runtime
 
struct  _runtime_options
 

Macros

#define AMXRT_CVAL_PLUGIN_DIR   "/usr/lib/amx"
 
#define AMXRT_CVAL_CFG_DIR   "/etc/amx"
 
#define AMXRT_CVAL_BACKEND_DIR   "/usr/bin/mods/amxb"
 
#define AMXRT_CVAL_STORAGE_TYPE   "odl"
 
#define COLOR_BLACK   "\033[30m"
 
#define COLOR_RED   "\033[31m"
 
#define COLOR_GREEN   "\033[32m"
 
#define COLOR_YELLOW   "\033[33m"
 
#define COLOR_BLUE   "\033[34m"
 
#define COLOR_MAGENTA   "\033[35m"
 
#define COLOR_CYAN   "\033[36m"
 
#define COLOR_WHITE   "\033[37m"
 
#define COLOR_BRIGHT_BLACK   "\033[30;1m"
 
#define COLOR_BRIGHT_RED   "\033[31;1m"
 
#define COLOR_BRIGHT_GREEN   "\033[32;1m"
 
#define COLOR_BRIGHT_YELLOW   "\033[33;1m"
 
#define COLOR_BRIGHT_BLUE   "\033[34;1m"
 
#define COLOR_BRIGHT_MAGENTA   "\033[35;1m"
 
#define COLOR_BRIGHT_CYAN   "\033[36;1m"
 
#define COLOR_BRIGHT_WHITE   "\033[37;1m"
 
#define COLOR_RESET   "\033[0m"
 
#define BLUE   0
 
#define GREEN   1
 
#define RED   2
 
#define WHITE   3
 
#define CYAN   4
 
#define YELLOW   5
 
#define RESET   6
 
#define c(x)   get_color(x)
 

Typedefs

typedef struct _runtime amxrt_t
 
typedef struct _runtime_options amxrt_arg_t
 

Functions

PRIVATE const char * get_color (uint32_t cc)
 
PRIVATE amxrt_tamxrt_get (void)
 
PRIVATE void amxrt_cmd_line_add_default_options (void)
 
PRIVATE void amxrt_print_help (void)
 
PRIVATE void amxrt_print_configuration (void)
 
PRIVATE void amxrt_print_error (const char *fmt,...)
 
PRIVATE void amxrt_print_message (const char *fmt,...)
 
PRIVATE void amxrt_print_failure (amxo_parser_t *parser, const char *string)
 
PRIVATE void amxrt_config_add_options (amxo_parser_t *parser)
 
PRIVATE void amxrt_connection_detect_sockets (amxc_var_t *config)
 
PRIVATE int amxrt_connection_load_backends (amxc_var_t *config)
 
PRIVATE int amxrt_connection_connect_all (amxo_parser_t *parser)
 
PRIVATE int amxrt_connection_listen_all (amxo_parser_t *parser)
 
PRIVATE int amxrt_connection_register_dm (amxo_parser_t *parser, amxd_dm_t *dm)
 
PRIVATE amxp_connection_t * amxrt_el_get_connection (amxc_llist_t *cons, int fd)
 
PRIVATE int amxrt_dm_create_dir (amxo_parser_t *parser, uid_t uid, gid_t gid)
 

Macro Definition Documentation

◆ AMXRT_CVAL_BACKEND_DIR

#define AMXRT_CVAL_BACKEND_DIR   "/usr/bin/mods/amxb"

Definition at line 66 of file amxrt_priv.h.

◆ AMXRT_CVAL_CFG_DIR

#define AMXRT_CVAL_CFG_DIR   "/etc/amx"

Definition at line 65 of file amxrt_priv.h.

◆ AMXRT_CVAL_PLUGIN_DIR

#define AMXRT_CVAL_PLUGIN_DIR   "/usr/lib/amx"

Definition at line 64 of file amxrt_priv.h.

◆ AMXRT_CVAL_STORAGE_TYPE

#define AMXRT_CVAL_STORAGE_TYPE   "odl"

Definition at line 67 of file amxrt_priv.h.

◆ BLUE

#define BLUE   0

Definition at line 89 of file amxrt_priv.h.

◆ c

#define c (   x)    get_color(x)

Definition at line 97 of file amxrt_priv.h.

◆ COLOR_BLACK

#define COLOR_BLACK   "\033[30m"

Definition at line 69 of file amxrt_priv.h.

◆ COLOR_BLUE

#define COLOR_BLUE   "\033[34m"

Definition at line 73 of file amxrt_priv.h.

◆ COLOR_BRIGHT_BLACK

#define COLOR_BRIGHT_BLACK   "\033[30;1m"

Definition at line 78 of file amxrt_priv.h.

◆ COLOR_BRIGHT_BLUE

#define COLOR_BRIGHT_BLUE   "\033[34;1m"

Definition at line 82 of file amxrt_priv.h.

◆ COLOR_BRIGHT_CYAN

#define COLOR_BRIGHT_CYAN   "\033[36;1m"

Definition at line 84 of file amxrt_priv.h.

◆ COLOR_BRIGHT_GREEN

#define COLOR_BRIGHT_GREEN   "\033[32;1m"

Definition at line 80 of file amxrt_priv.h.

◆ COLOR_BRIGHT_MAGENTA

#define COLOR_BRIGHT_MAGENTA   "\033[35;1m"

Definition at line 83 of file amxrt_priv.h.

◆ COLOR_BRIGHT_RED

#define COLOR_BRIGHT_RED   "\033[31;1m"

Definition at line 79 of file amxrt_priv.h.

◆ COLOR_BRIGHT_WHITE

#define COLOR_BRIGHT_WHITE   "\033[37;1m"

Definition at line 85 of file amxrt_priv.h.

◆ COLOR_BRIGHT_YELLOW

#define COLOR_BRIGHT_YELLOW   "\033[33;1m"

Definition at line 81 of file amxrt_priv.h.

◆ COLOR_CYAN

#define COLOR_CYAN   "\033[36m"

Definition at line 75 of file amxrt_priv.h.

◆ COLOR_GREEN

#define COLOR_GREEN   "\033[32m"

Definition at line 71 of file amxrt_priv.h.

◆ COLOR_MAGENTA

#define COLOR_MAGENTA   "\033[35m"

Definition at line 74 of file amxrt_priv.h.

◆ COLOR_RED

#define COLOR_RED   "\033[31m"

Definition at line 70 of file amxrt_priv.h.

◆ COLOR_RESET

#define COLOR_RESET   "\033[0m"

Definition at line 87 of file amxrt_priv.h.

◆ COLOR_WHITE

#define COLOR_WHITE   "\033[37m"

Definition at line 76 of file amxrt_priv.h.

◆ COLOR_YELLOW

#define COLOR_YELLOW   "\033[33m"

Definition at line 72 of file amxrt_priv.h.

◆ CYAN

#define CYAN   4

Definition at line 93 of file amxrt_priv.h.

◆ GREEN

#define GREEN   1

Definition at line 90 of file amxrt_priv.h.

◆ RED

#define RED   2

Definition at line 91 of file amxrt_priv.h.

◆ RESET

#define RESET   6

Definition at line 95 of file amxrt_priv.h.

◆ WHITE

#define WHITE   3

Definition at line 92 of file amxrt_priv.h.

◆ YELLOW

#define YELLOW   5

Definition at line 94 of file amxrt_priv.h.

Typedef Documentation

◆ amxrt_arg_t

typedef struct _runtime_options amxrt_arg_t

◆ amxrt_t

typedef struct _runtime amxrt_t

Function Documentation

◆ amxrt_cmd_line_add_default_options()

PRIVATE void amxrt_cmd_line_add_default_options ( void  )

Definition at line 178 of file amxrt_args.c.

178  {
179  amxrt_cmd_line_add_option(0, 'h', "help", no_argument, "Print usage help and exit", NULL);
180  amxrt_cmd_line_add_option(0, 'H', "HELP", no_argument, "Print extended help and exit", NULL);
181  amxrt_cmd_line_add_option(0, 'B', "backend", required_argument, "Loads the shared object as bus backend", "so file");
182  amxrt_cmd_line_add_option(0, 'u', "uri", required_argument, "Adds an uri to the list of uris", "uri");
183  amxrt_cmd_line_add_option(0, 'A', "no-auto-detect", no_argument, "Do not auto detect unix domain sockets and back-ends", NULL);
184  amxrt_cmd_line_add_option(0, 'C', "no-connect", no_argument, "Do not auto connect the provided or detected uris", NULL);
185  amxrt_cmd_line_add_option(0, 'I', "include-dir", required_argument, "Adds include directory for odl parser, multiple allowed", "dir");
186  amxrt_cmd_line_add_option(0, 'L', "import-dir", required_argument, "Adds import directory for odl parser, multiple allowed", "dir");
187  amxrt_cmd_line_add_option(0, 'o', "option", required_argument, "Adds a configuration option", "name=value");
188  amxrt_cmd_line_add_option(0, 'F', "forced-option", required_argument, "Adds a configuration option, which can not be overwritten by odl files", "name=value");
189  amxrt_cmd_line_add_option(0, 'O', "ODL", required_argument, "An ODL in string format, only one ODL string allowed", "odl-string");
190  amxrt_cmd_line_add_option(0, 'D', "daemon", no_argument, "Daemonize the process", NULL);
191  amxrt_cmd_line_add_option(0, 'p', "priority", required_argument, "Sets the process nice level", "nice level");
192  amxrt_cmd_line_add_option(0, 'N', "no-pid-file", no_argument, "Disables the creation of a pid-file in /var/run", NULL);
193  amxrt_cmd_line_add_option(0, 'E', "eventing", no_argument, "Enables eventing during loading of ODL files", NULL);
194  amxrt_cmd_line_add_option(0, 'd', "dump", optional_argument, "Dumps configuration options or capabilities at start-up", "[caps|config]");
195  amxrt_cmd_line_add_option(0, 'l', "log", no_argument, "Write to syslog instead of stdout and stderr", NULL);
196  amxrt_cmd_line_add_option(0, 'R', "requires", required_argument, "Checks if datamodel objects are available or waits until they are available", "root object");
197 }
int amxrt_cmd_line_add_option(int id, char short_option, const char *long_option, int has_args, const char *doc, const char *arg_doc)
Adds a command line option definition.
Definition: amxrt_args.c:206

◆ amxrt_config_add_options()

PRIVATE void amxrt_config_add_options ( amxo_parser_t *  parser)

Definition at line 183 of file amxrt_config.c.

183  {
184  amxc_var_t* config = &parser->config;
185 
186  amxc_var_add_key(amxc_llist_t, config, AMXRT_COPT_BACKENDS, NULL);
187  amxc_var_add_key(amxc_llist_t, config, AMXRT_COPT_URIS, NULL);
188  amxc_var_add_key(amxc_llist_t, config, AMXRT_COPT_DATA_URIS, NULL);
189  amxc_var_add_key(bool, config, AMXRT_COPT_AUTO_DETECT, true);
190  amxc_var_add_key(bool, config, AMXRT_COPT_AUTO_CONNECT, true);
191  amxc_var_add_key(bool, config, AMXRT_COPT_DAEMON, false);
192  amxc_var_add_key(uint32_t, config, AMXRT_COPT_PRIORITY, 0);
193  amxc_var_add_key(bool, config, AMXRT_COPT_PID_FILE, true);
194  amxc_var_add_key(cstring_t, config, AMXRT_COPT_PREFIX_PATH, "");
195  amxc_var_add_key(cstring_t, config, AMXRT_COPT_PLUGIN_DIR, AMXRT_CVAL_PLUGIN_DIR);
196  amxc_var_add_key(cstring_t, config, AMXRT_COPT_CFG_DIR, AMXRT_CVAL_CFG_DIR);
197  amxc_var_add_key(amxc_llist_t, config, AMXRT_COPT_LIBDIRS, NULL);
198  amxc_var_add_key(amxc_llist_t, config, AMXRT_COPT_INCDIRS, NULL);
199  amxc_var_add_key(amxc_llist_t, config, AMXRT_COPT_MIBDIRS, NULL);
200  amxc_var_add_key(amxc_llist_t, config, AMXRT_COPT_LISTEN, NULL);
201  amxc_var_add_key(bool, config, AMXRT_COPT_EVENT, false);
202  amxc_var_add_key(bool, config, AMXRT_COPT_DUMP_CONFIG, false);
203  amxc_var_add_key(bool, config, AMXRT_COPT_DUMP_CAPS, false);
204  amxc_var_add_key(cstring_t, config, AMXRT_COPT_BACKENDS_DIR, AMXRT_CVAL_BACKEND_DIR);
205  amxc_var_add_key(cstring_t, config, AMXRT_COPT_STORAGE_TYPE, AMXRT_CVAL_STORAGE_TYPE);
206  amxc_var_add_key(bool, config, AMXRT_COPT_LOG, false);
207  amxc_var_add_key(cstring_t, config, AMXRT_COPT_RW_DATA_PATH, "${prefix}" RWDATAPATH);
208  amxc_var_add_key(cstring_t, config, AMXRT_COPT_STORAGE_DIR, "${rw_data_path}/${name}/");
209  amxc_var_add_key(amxc_llist_t, config, AMXRT_COPT_REQUIRES, NULL);
210  amxc_var_add_key(cstring_t, config, AMXRT_COPT_EXT_DIR, "extensions/");
211 
212  // set hooks to monitor config option changes
213  amxo_parser_set_hooks(parser, &amxrt_config_hooks);
214 }
#define AMXRT_COPT_BACKENDS
Definition: amxrt.h:75
#define AMXRT_COPT_LISTEN
Definition: amxrt.h:89
#define AMXRT_COPT_RW_DATA_PATH
Definition: amxrt.h:94
#define AMXRT_COPT_PLUGIN_DIR
Definition: amxrt.h:87
#define AMXRT_COPT_URIS
Definition: amxrt.h:73
#define AMXRT_COPT_PID_FILE
Definition: amxrt.h:84
#define AMXRT_COPT_EXT_DIR
Definition: amxrt.h:102
#define AMXRT_COPT_LIBDIRS
Definition: amxrt.h:79
#define AMXRT_COPT_CFG_DIR
Definition: amxrt.h:88
#define AMXRT_COPT_MIBDIRS
Definition: amxrt.h:80
#define AMXRT_COPT_DATA_URIS
Definition: amxrt.h:74
#define AMXRT_COPT_DUMP_CONFIG
Definition: amxrt.h:91
#define AMXRT_COPT_PRIORITY
Definition: amxrt.h:83
#define AMXRT_COPT_PREFIX_PATH
Definition: amxrt.h:86
#define AMXRT_COPT_STORAGE_DIR
Definition: amxrt.h:95
#define AMXRT_COPT_STORAGE_TYPE
Definition: amxrt.h:96
#define AMXRT_COPT_DUMP_CAPS
Definition: amxrt.h:92
#define AMXRT_COPT_REQUIRES
Definition: amxrt.h:99
#define AMXRT_COPT_EVENT
Definition: amxrt.h:90
#define AMXRT_COPT_AUTO_DETECT
Definition: amxrt.h:76
#define AMXRT_COPT_LOG
Definition: amxrt.h:98
#define AMXRT_COPT_AUTO_CONNECT
Definition: amxrt.h:77
#define AMXRT_COPT_BACKENDS_DIR
Definition: amxrt.h:93
#define AMXRT_COPT_DAEMON
Definition: amxrt.h:82
#define AMXRT_COPT_INCDIRS
Definition: amxrt.h:78
static amxo_hooks_t amxrt_config_hooks
Definition: amxrt_config.c:158
#define AMXRT_CVAL_CFG_DIR
Definition: amxrt_priv.h:65
#define AMXRT_CVAL_BACKEND_DIR
Definition: amxrt_priv.h:66
#define AMXRT_CVAL_STORAGE_TYPE
Definition: amxrt_priv.h:67
#define AMXRT_CVAL_PLUGIN_DIR
Definition: amxrt_priv.h:64
config
Definition: test.odl:54

◆ amxrt_connection_connect_all()

PRIVATE int amxrt_connection_connect_all ( amxo_parser_t *  parser)

Definition at line 342 of file amxrt_connections.c.

342  {
343  int retval = 0;
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));
346  bool connect = amxc_var_constcast(bool, GET_ARG(&parser->config, AMXRT_COPT_AUTO_CONNECT));
347  if(!connect) {
348  goto leave;
349  }
350 
351  amxrt_connection_filter_uris(uris, data_uris);
352  retval = amxrt_connection_connect_all_type(uris, AMXP_CONNECTION_BUS);
353  when_failed(retval, leave);
354  amxrt_connection_connect_all_type(data_uris, AMXP_CONNECTION_CUSTOM);
355 
356 leave:
357  return retval;
358 }
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_detect_sockets()

PRIVATE void amxrt_connection_detect_sockets ( amxc_var_t *  config)

Definition at line 256 of file amxrt_connections.c.

256  {
257  amxc_var_t* uris = GET_ARG(config, AMXRT_COPT_URIS);
258  bool auto_detect = GET_BOOL(config, AMXRT_COPT_AUTO_DETECT);
259  amxc_array_t* backends = amxb_be_list();
260  size_t size = amxc_array_size(backends);
261 
262  // when auto-detect is on use the socket uris that:
263  // 1. are provided by the back-ends (these are the back-end default uris)
264  // 2. are known to libamxrt
265  // never add uris that are already defined in the config, make sure
266  // no double entries are added.
267 
268  if(auto_detect) {
269  // loop over all loaded backends and fetch uris and data-uris
270  // check if they are not already added to top-level uris or data-uris
271  // if not found in top level move them to top level otherwise delete them
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);
275  amxrt_move_backend_uris(config, backend_settings);
276  }
277  // last step - check known unix domain sockets - this for backwards compatibility
278  amxrt_add_known_uris(uris);
279  } else {
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);
283  amxc_var_t* be_uris = GET_ARG(backend_settings, AMXRT_COPT_URIS);
284  amxc_var_t* be_data_uris = GET_ARG(backend_settings, AMXRT_COPT_DATA_URIS);
285  amxc_var_delete(&be_uris);
286  amxc_var_delete(&be_data_uris);
287  }
288  }
289 
290  amxc_array_delete(&backends, NULL);
291 }
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_listen_all()

PRIVATE int amxrt_connection_listen_all ( amxo_parser_t *  parser)

Definition at line 360 of file amxrt_connections.c.

360  {
361  int retval = 0;
362  const amxc_llist_t* listen = amxc_var_constcast(amxc_llist_t, GET_ARG(&parser->config, AMXRT_COPT_LISTEN));
363 
364  amxc_llist_for_each(it, listen) {
365  amxb_bus_ctx_t* bus_ctx = NULL;
366  int fd = -1;
367  const char* uri = amxc_var_constcast(cstring_t,
368  amxc_var_from_llist_it(it));
369 
370  retval = amxrt_connection_listen_bus_uri(uri, &bus_ctx);
371  if(retval != 0) {
372  amxrt_print_error("Failed to listen on %s", uri);
373  } else {
374  fd = amxb_get_fd(bus_ctx);
375  amxp_connection_add(fd, amxrt_connection_read, uri, AMXP_CONNECTION_LISTEN, bus_ctx);
376  }
377  }
378 
379  return retval;
380 }
static int amxrt_connection_listen_bus_uri(const char *uri, amxb_bus_ctx_t **bus_ctx)
static void amxrt_connection_read(UNUSED int fd, UNUSED void *priv)
PRIVATE void amxrt_print_error(const char *fmt,...)

◆ amxrt_connection_load_backends()

PRIVATE int amxrt_connection_load_backends ( amxc_var_t *  config)

Definition at line 293 of file amxrt_connections.c.

293  {
294  int retval = 0;
295  const char* name = GET_CHAR(config, AMXRT_COPT_NAME);
296  amxc_array_t* backend_names = NULL;
297  size_t size = 0;
298  amxc_var_t* backends = amxc_var_get_key(config, AMXRT_COPT_BACKENDS, AMXC_VAR_FLAG_COPY);
299 
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)) {
303  amxrt_print_error("No backends specified\n");
304  retval = 2;
305  }
306  } else {
307  char* str = amxc_var_dyncast(cstring_t, backends);
308  if((str == NULL) || (str[0] == 0)) {
309  amxrt_print_error("No backends specified\n");
310  retval = 2;
311  }
312  free(str);
313  }
314 
315  if(retval == 0) {
316  retval = amxb_be_load_multiple(backends);
317  if(retval != 0) {
318  amxrt_print_error("Failed to load backends\n");
319  retval = 2;
320  }
321  }
322 
323  /*
324  Create backend config section if not existing
325  For backwards compatibility set `register-name` if not existing
326  Needed for pcb backend if loaded
327  */
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);
332  amxrt_set_backend_setting(config, be_name, "register-name", name);
333  }
334  amxc_array_delete(&backend_names, NULL);
335 
336  amxb_set_config(config);
337 
338  amxc_var_delete(&backends);
339  return retval;
340 }
#define AMXRT_COPT_NAME
Definition: amxrt.h:85
static void amxrt_set_backend_setting(amxc_var_t *config, const char *backend, const char *setting, const char *value)

◆ amxrt_connection_register_dm()

PRIVATE int amxrt_connection_register_dm ( amxo_parser_t *  parser,
amxd_dm_t *  dm 
)

◆ amxrt_dm_create_dir()

PRIVATE int amxrt_dm_create_dir ( amxo_parser_t *  parser,
uid_t  uid,
gid_t  gid 
)

Definition at line 436 of file amxrt_save_load.c.

436  {
437  int rv = -1;
438  char* directory = NULL;
439 
440  when_null(parser, exit);
441 
442  if(!amxrt_is_odl_storage_enabled(parser)) {
443  goto exit;
444  }
445 
446  directory = amxrt_get_directory(parser);
447  rv = amxp_dir_owned_make(directory, 0777, uid, gid);
448  if(rv != 0) {
449  amxrt_print_error("Failed to create directory %s", directory);
450  }
451  free(directory);
452 
453 exit:
454  return rv;
455 }
static char * amxrt_get_directory(amxo_parser_t *parser)
static bool amxrt_is_odl_storage_enabled(amxo_parser_t *parser)

◆ amxrt_el_get_connection()

PRIVATE amxp_connection_t* amxrt_el_get_connection ( amxc_llist_t *  cons,
int  fd 
)

Definition at line 240 of file amxrt_el_libevent.c.

240  {
241  amxp_connection_t* con = NULL;
242  amxc_llist_for_each(it, cons) {
243  con = amxc_llist_it_get_data(it, amxp_connection_t, it);
244  if(con->fd == fd) {
245  break;
246  }
247  con = NULL;
248  }
249 
250  return con;
251 }

◆ amxrt_get()

PRIVATE amxrt_t* amxrt_get ( void  )

Definition at line 297 of file amxrt.c.

297  {
298  return &rt;
299 }
static amxrt_t rt
Definition: amxrt.c:74

◆ amxrt_print_configuration()

PRIVATE void amxrt_print_configuration ( void  )

Definition at line 166 of file amxrt_user_output.c.

166  {
167  amxrt_t* rt = amxrt_get();
168 
169  fprintf(stderr, "\n%sConfiguration:%s\n", c(GREEN), c(RESET));
170  fflush(stderr);
171  amxc_var_dump(&rt->parser.config, STDERR_FILENO);
172 }
PRIVATE amxrt_t * amxrt_get(void)
Definition: amxrt.c:297
#define RESET
Definition: amxrt_priv.h:95
#define GREEN
Definition: amxrt_priv.h:90
#define c(x)
Definition: amxrt_priv.h:97
amxo_parser_t parser
Definition: amxrt_priv.h:101

◆ amxrt_print_error()

PRIVATE void amxrt_print_error ( const char *  fmt,
  ... 
)

Definition at line 174 of file amxrt_user_output.c.

174  {
175  amxc_var_t* config = amxrt_get_config();
176  va_list args;
177 
178  if(GET_BOOL(config, AMXRT_COPT_LOG)) {
179  va_start(args, fmt);
180  vsyslog(LOG_USER | LOG_ERR, fmt, args);
181  va_end(args);
182  } else {
183  fprintf(stderr, "%sERROR%s -- %s", c(RED), c(RESET), c(WHITE));
184 
185  va_start(args, fmt);
186  vfprintf(stderr, fmt, args);
187  va_end(args);
188 
189  fprintf(stderr, "%s\n", c(RESET));
190  }
191 }
#define WHITE
Definition: amxrt_priv.h:92
#define RED
Definition: amxrt_priv.h:91
amxc_var_t * amxrt_get_config(void)
Gets the htable variant containing the configuration options.
Definition: amxrt.c:301

◆ amxrt_print_failure()

PRIVATE void amxrt_print_failure ( amxo_parser_t *  parser,
const char *  string 
)

Definition at line 213 of file amxrt_user_output.c.

213  {
214  amxc_var_t* config = amxrt_get_config();
215  const char* msg = amxo_parser_get_message(parser);
216 
217  if(GET_BOOL(config, AMXRT_COPT_LOG)) {
218  syslog(LOG_USER | LOG_CRIT, "Failed parsing - %s", string == NULL ? "###" : string);
219  syslog(LOG_USER | LOG_CRIT, "Reason - %s", msg == NULL ? "###" : msg);
220  } else {
221  fprintf(stderr, "%sERROR%s -- Failed parsing %s%s%s\n",
222  c(RED), c(RESET),
223  c(CYAN), string == NULL ? "###" : string, c(RESET));
224 
225  fprintf(stderr, "%sREASON%s -- %s%s%s\n",
226  c(BLUE), c(RESET),
227  c(CYAN), msg == NULL ? "###" : msg, c(RESET));
228  }
229 }
#define BLUE
Definition: amxrt_priv.h:89
#define CYAN
Definition: amxrt_priv.h:93

◆ amxrt_print_help()

PRIVATE void amxrt_print_help ( void  )

Definition at line 160 of file amxrt_user_output.c.

160  {
164 }
static void amxrt_print_config_example(void)
static void amxrt_print_notes(void)
void amxrt_print_usage(void)
Prints the usage information and all available options to stdout.

◆ amxrt_print_message()

PRIVATE void amxrt_print_message ( const char *  fmt,
  ... 
)

Definition at line 193 of file amxrt_user_output.c.

193  {
194  amxc_var_t* config = amxrt_get_config();
195  va_list args;
196 
197  if(GET_BOOL(config, AMXRT_COPT_LOG)) {
198  va_start(args, fmt);
199  vsyslog(LOG_USER | LOG_NOTICE, "%s", args);
200  va_end(args);
201  } else {
202  fprintf(stderr, "%sINFO%s -- %s", c(YELLOW), c(RESET), c(WHITE));
203 
204  va_start(args, fmt);
205  vfprintf(stderr, fmt, args);
206  va_end(args);
207 
208  fprintf(stderr, "%s\n", c(RESET));
209  }
210 }
#define YELLOW
Definition: amxrt_priv.h:94

◆ get_color()

PRIVATE const char* get_color ( uint32_t  cc)

Definition at line 130 of file amxrt_user_output.c.

130  {
131  if(cc < RESET) {
132  return colors[cc];
133  }
134  return colors[RESET];
135 }
static const char * colors[]