Asterisk - The Open Source Telephony Project  GIT-master-a24979a
Functions
_private.h File Reference

Prototypes for public functions only of internal interest,. More...

Go to the source code of this file.

Functions

int aco_init (void)
 
void ast_autoservice_init (void)
 
int ast_bridging_init (void)
 Initialize the bridging system. More...
 
void ast_builtins_init (void)
 initialize the _full_cmd string in * each of the builtins. More...
 
int ast_channels_init (void)
 
int ast_cli_perms_init (int reload)
 
int ast_device_state_engine_init (void)
 Initialize the device state engine in separate thread. More...
 
int ast_dns_system_resolver_init (void)
 Initializes the resolver. More...
 
int ast_endpoint_init (void)
 Endpoint support initialization. More...
 
int ast_file_init (void)
 
int ast_local_init (void)
 Initialize the local proxy channel. More...
 
int ast_msg_init (void)
 
void ast_msg_shutdown (void)
 
int ast_named_locks_init (void)
 
int ast_parking_stasis_init (void)
 initializes the rtp engine arrays More...
 
int ast_pj_init (void)
 
void ast_process_pending_reloads (void)
 Process reload requests received during startup. More...
 
int ast_rtp_engine_init (void)
 initializes the rtp engine arrays More...
 
int ast_ssl_init (void)
 
void ast_stun_init (void)
 Initialize the STUN system in Asterisk. More...
 
int ast_term_init (void)
 
int ast_test_init (void)
 
int ast_timing_init (void)
 
int ast_tps_init (void)
 
int ast_xmldoc_load_documentation (void)
 Load XML documentation. Provided by xmldoc.c. More...
 
int astdb_init (void)
 
int astobj2_init (void)
 
void clean_time_zones (void)
 
void close_logger (void)
 
int dns_core_init (void)
 
void dnsmgr_start_refresh (void)
 
int init_logger (void)
 
void load_asterisk_conf (void)
 
void load_astmm_phase_1 (void)
 Initialize malloc debug phase 1. More...
 
void load_astmm_phase_2 (void)
 Initialize malloc debug phase 2. More...
 
int load_modules (void)
 
int load_pbx (void)
 
int load_pbx_app (void)
 
int load_pbx_builtins (void)
 
int load_pbx_functions_cli (void)
 
int load_pbx_hangup_handler (void)
 
int load_pbx_switch (void)
 
int load_pbx_variables (void)
 
void logger_queue_start (void)
 Start the ast_queue_log() logger. More...
 
int modules_shutdown (void)
 
void set_asterisk_conf_path (const char *path)
 
void set_socket_path (const char *path)
 
void threadstorage_init (void)
 

Detailed Description

Prototypes for public functions only of internal interest,.

Definition in file _private.h.

Function Documentation

◆ aco_init()

int aco_init ( void  )

Provided by config_options.c

Definition at line 1426 of file config_options.c.

1427 {
1428 #ifdef AST_XML_DOCS
1430  if (!(xmldocs = ast_xmldoc_build_documentation("configInfo"))) {
1431  ast_log(LOG_ERROR, "Couldn't build config documentation\n");
1432  return -1;
1433  }
1435 #endif /* AST_XML_DOCS */
1436  return 0;
1437 }
int ast_register_cleanup(void(*func)(void))
Register a function to be executed before Asterisk gracefully exits.
Definition: clicompat.c:19
#define ast_log
Definition: astobj2.c:42
#define ast_cli_register_multiple(e, len)
Register multiple commands.
Definition: cli.h:265
static struct ao2_container * xmldocs
static struct ast_cli_entry cli_aco[]
static void aco_deinit(void)
#define LOG_ERROR
#define ARRAY_LEN(a)
Definition: utils.h:661
struct ao2_container * ast_xmldoc_build_documentation(const char *type)
Build the documentation for a particular source type.
Definition: xmldoc.c:2655

References aco_deinit(), ARRAY_LEN, ast_cli_register_multiple, ast_log, ast_register_cleanup(), ast_xmldoc_build_documentation(), cli_aco, LOG_ERROR, and xmldocs.

Referenced by asterisk_daemon().

◆ ast_autoservice_init()

void ast_autoservice_init ( void  )

Provided by autoservice.c

Definition at line 380 of file autoservice.c.

381 {
384 }
static ast_cond_t as_cond
Definition: autoservice.c:71
static void autoservice_shutdown(void)
Definition: autoservice.c:369
#define ast_cond_init(cond, attr)
Definition: lock.h:199
#define NULL
Definition: resample.c:96

References as_cond, ast_cond_init, ast_register_cleanup(), autoservice_shutdown(), and NULL.

Referenced by asterisk_daemon().

◆ ast_bridging_init()

int ast_bridging_init ( void  )

Initialize the bridging system.

Since
12.0.0
Return values
0on success.
-1on error.

Definition at line 5528 of file bridge.c.

5529 {
5531 
5532  if (ast_stasis_bridging_init()) {
5533  return -1;
5534  }
5535 
5537  if (!bridge_manager) {
5538  return -1;
5539  }
5540 
5543  if (!bridges) {
5544  return -1;
5545  }
5547 
5549 
5551 
5552  ast_manager_register_xml_core("BridgeTechnologyList", 0, manager_bridge_tech_list);
5553  ast_manager_register_xml_core("BridgeTechnologySuspend", 0, manager_bridge_tech_suspend);
5554  ast_manager_register_xml_core("BridgeTechnologyUnsuspend", 0, manager_bridge_tech_unsuspend);
5555 
5556  return 0;
5557 }
@ AO2_ALLOC_OPT_LOCK_MUTEX
Definition: astobj2.h:363
#define ao2_container_alloc_rbtree(ao2_options, container_options, sort_fn, cmp_fn)
Allocate and initialize a red-black tree container.
Definition: astobj2.h:1349
int ao2_container_register(const char *name, struct ao2_container *self, ao2_prnt_obj_fn *prnt_obj)
Register a container for CLI stats and integrity check.
@ AO2_CONTAINER_ALLOC_OPT_DUPS_REPLACE
Replace objects with duplicate keys in container.
Definition: astobj2.h:1211
static struct bridge_manager_controller * bridge_manager
Definition: bridge.c:172
static int manager_bridge_tech_list(struct mansession *s, const struct message *m)
Definition: bridge.c:5445
static int manager_bridge_tech_suspend(struct mansession *s, const struct message *m)
Definition: bridge.c:5435
static int manager_bridge_tech_unsuspend(struct mansession *s, const struct message *m)
Definition: bridge.c:5440
static struct ast_cli_entry bridge_cli[]
Definition: bridge.c:5389
static int bridge_sort_cmp(const void *obj_left, const void *obj_right, int flags)
Definition: bridge.c:4975
static void bridge_prnt_obj(void *v_obj, void *where, ao2_prnt_fn *prnt)
Definition: bridge.c:5498
static struct bridge_manager_controller * bridge_manager_create(void)
Definition: bridge.c:4936
static struct ao2_container * bridges
Definition: bridge.c:123
static void bridge_cleanup(void)
Definition: bridge.c:5514
void ast_bridging_init_basic(void)
#define ast_manager_register_xml_core(action, authority, func)
Register a manager callback using XML documentation to describe the manager.
Definition: manager.h:202
int ast_stasis_bridging_init(void)

References AO2_ALLOC_OPT_LOCK_MUTEX, AO2_CONTAINER_ALLOC_OPT_DUPS_REPLACE, ao2_container_alloc_rbtree, ao2_container_register(), ARRAY_LEN, ast_bridging_init_basic(), ast_cli_register_multiple, ast_manager_register_xml_core, ast_register_cleanup(), ast_stasis_bridging_init(), bridge_cleanup(), bridge_cli, bridge_manager, bridge_manager_create(), bridge_prnt_obj(), bridge_sort_cmp(), bridges, manager_bridge_tech_list(), manager_bridge_tech_suspend(), manager_bridge_tech_unsuspend(), and NULL.

Referenced by asterisk_daemon().

◆ ast_builtins_init()

void ast_builtins_init ( void  )

initialize the _full_cmd string in * each of the builtins.

Provided by cli.c

Definition at line 2243 of file main/cli.c.

2244 {
2248 }
static void cli_shutdown(void)
Definition: main/cli.c:2237
static struct ast_cli_entry cli_cli[]
Definition: main/cli.c:2016
static struct @362 shutdown_commands
#define AST_VECTOR_INIT(vec, size)
Initialize a vector.
Definition: vector.h:113

References ARRAY_LEN, ast_cli_register_multiple, ast_register_cleanup(), AST_VECTOR_INIT, cli_cli, cli_shutdown(), and shutdown_commands.

Referenced by asterisk_daemon().

◆ ast_channels_init()

int ast_channels_init ( void  )

Provided by channel.c

Definition at line 8090 of file channel.c.

8091 {
8094  if (!channels) {
8095  return -1;
8096  }
8098 
8100 
8102 
8104 
8106 
8109 
8110  return 0;
8111 }
#define ao2_container_alloc_hash(ao2_options, container_options, n_buckets, hash_fn, sort_fn, cmp_fn)
Allocate and initialize a hash container with the desired number of buckets.
Definition: astobj2.h:1303
static void channels_shutdown(void)
Definition: channel.c:8076
static int ast_channel_hash_cb(const void *obj, const int flags)
Definition: channel.c:7871
static struct external_vars ari_vars
Definition: channel.c:7915
static void prnt_channel_key(void *v_obj, void *where, ao2_prnt_fn *prnt)
Definition: channel.c:7893
static struct external_vars ami_vars
Definition: channel.c:7914
int ast_channel_register(const struct ast_channel_tech *tech)
Register a new telephony channel in Asterisk.
Definition: channel.c:539
static const struct ast_channel_tech surrogate_tech
Channel technology used to extract a channel from a running application. The channel created with thi...
Definition: channel.c:696
static struct ast_cli_entry cli_channel[]
Definition: channel.c:390
static struct ao2_container * channels
All active channels on the system.
Definition: channel.c:124
static int ast_channel_cmp_cb(void *obj, void *arg, int flags)
Definition: channel.c:1422
#define AST_NUM_CHANNEL_BUCKETS
Definition: channel.h:155
#define AST_RWLIST_HEAD_INIT(head)
Initializes an rwlist head structure.
Definition: linkedlists.h:639
int ast_stasis_channels_init(void)
Initialize the stasis channel topic and message types.

References ami_vars, AO2_ALLOC_OPT_LOCK_MUTEX, ao2_container_alloc_hash, ao2_container_register(), ari_vars, ARRAY_LEN, ast_channel_cmp_cb(), ast_channel_hash_cb(), ast_channel_register(), ast_cli_register_multiple, AST_NUM_CHANNEL_BUCKETS, ast_register_cleanup(), AST_RWLIST_HEAD_INIT, ast_stasis_channels_init(), channels, channels_shutdown(), cli_channel, NULL, prnt_channel_key(), and surrogate_tech.

Referenced by asterisk_daemon().

◆ ast_cli_perms_init()

int ast_cli_perms_init ( int  reload)

Provided by cli.c

Definition at line 2115 of file main/cli.c.

2116 {
2117  struct ast_flags config_flags = { reload ? CONFIG_FLAG_FILEUNCHANGED : 0 };
2118  struct ast_config *cfg;
2119  char *cat = NULL;
2120  struct ast_variable *v;
2121  struct usergroup_cli_perm *user_group, *cp_entry;
2122  struct cli_perm *perm = NULL;
2123  struct passwd *pw;
2124  struct group *gr;
2125 
2127  ast_log(LOG_NOTICE, "You must wait until last 'cli reload permissions' command finish\n");
2128  return 1;
2129  }
2130 
2131  cfg = ast_config_load2(perms_config, "" /* core, can't reload */, config_flags);
2132  if (!cfg) {
2134  return 1;
2135  } else if (cfg == CONFIG_STATUS_FILEUNCHANGED) {
2137  return 0;
2138  }
2139 
2140  /* free current structures. */
2142 
2143  while ((cat = ast_category_browse(cfg, cat))) {
2144  if (!strcasecmp(cat, "general")) {
2145  /* General options */
2146  for (v = ast_variable_browse(cfg, cat); v; v = v->next) {
2147  if (!strcasecmp(v->name, "default_perm")) {
2148  cli_default_perm = (!strcasecmp(v->value, "permit")) ? 1: 0;
2149  }
2150  }
2151  continue;
2152  }
2153 
2154  /* users or groups */
2155  gr = NULL, pw = NULL;
2156  if (cat[0] == '@') {
2157  /* This is a group */
2158  gr = getgrnam(&cat[1]);
2159  if (!gr) {
2160  ast_log (LOG_WARNING, "Unknown group '%s'\n", &cat[1]);
2161  continue;
2162  }
2163  } else {
2164  /* This is a user */
2165  pw = getpwnam(cat);
2166  if (!pw) {
2167  ast_log (LOG_WARNING, "Unknown user '%s'\n", cat);
2168  continue;
2169  }
2170  }
2171  user_group = NULL;
2172  /* Check for duplicates */
2174  AST_LIST_TRAVERSE(&cli_perms, cp_entry, list) {
2175  if ((pw && cp_entry->uid == pw->pw_uid) || (gr && cp_entry->gid == gr->gr_gid)) {
2176  /* if it is duplicated, just added this new settings, to
2177  the current list. */
2178  user_group = cp_entry;
2179  break;
2180  }
2181  }
2183 
2184  if (!user_group) {
2185  /* alloc space for the new user config. */
2186  user_group = ast_calloc(1, sizeof(*user_group));
2187  if (!user_group) {
2188  continue;
2189  }
2190  user_group->uid = (pw ? pw->pw_uid : -1);
2191  user_group->gid = (gr ? gr->gr_gid : -1);
2192  user_group->perms = ast_calloc(1, sizeof(*user_group->perms));
2193  if (!user_group->perms) {
2194  ast_free(user_group);
2195  continue;
2196  }
2197  }
2198  for (v = ast_variable_browse(cfg, cat); v; v = v->next) {
2199  if (ast_strlen_zero(v->value)) {
2200  /* we need to check this condition cause it could break security. */
2201  ast_log(LOG_WARNING, "Empty permit/deny option in user '%s'\n", cat);
2202  continue;
2203  }
2204  if (!strcasecmp(v->name, "permit")) {
2205  perm = ast_calloc(1, sizeof(*perm));
2206  if (perm) {
2207  perm->permit = 1;
2208  perm->command = ast_strdup(v->value);
2209  }
2210  } else if (!strcasecmp(v->name, "deny")) {
2211  perm = ast_calloc(1, sizeof(*perm));
2212  if (perm) {
2213  perm->permit = 0;
2214  perm->command = ast_strdup(v->value);
2215  }
2216  } else {
2217  /* up to now, only 'permit' and 'deny' are possible values. */
2218  ast_log(LOG_WARNING, "Unknown '%s' option\n", v->name);
2219  continue;
2220  }
2221  if (perm) {
2222  /* Added the permission to the user's list. */
2223  AST_LIST_INSERT_TAIL(user_group->perms, perm, list);
2224  perm = NULL;
2225  }
2226  }
2228  AST_RWLIST_INSERT_TAIL(&cli_perms, user_group, list);
2230  }
2231 
2232  ast_config_destroy(cfg);
2234  return 0;
2235 }
#define ast_free(a)
Definition: astmm.h:180
#define ast_strdup(str)
A wrapper for strdup()
Definition: astmm.h:241
#define ast_calloc(num, len)
A wrapper for calloc()
Definition: astmm.h:202
char * ast_category_browse(struct ast_config *config, const char *prev_name)
Browse categories.
Definition: extconf.c:3327
@ CONFIG_FLAG_FILEUNCHANGED
#define CONFIG_STATUS_FILEUNCHANGED
void ast_config_destroy(struct ast_config *cfg)
Destroys a config.
Definition: extconf.c:1289
struct ast_config * ast_config_load2(const char *filename, const char *who_asked, struct ast_flags flags)
Load a config file.
Definition: main/config.c:3220
struct ast_variable * ast_variable_browse(const struct ast_config *config, const char *category_name)
Definition: extconf.c:1215
#define LOG_NOTICE
#define LOG_WARNING
#define AST_RWLIST_WRLOCK(head)
Write locks a list.
Definition: linkedlists.h:52
#define AST_RWLIST_UNLOCK(head)
Attempts to unlock a read/write based list.
Definition: linkedlists.h:151
#define AST_LIST_TRAVERSE(head, var, field)
Loops over (traverses) the entries in a list.
Definition: linkedlists.h:491
#define AST_LIST_INSERT_TAIL(head, elm, field)
Appends a list entry to the tail of a list.
Definition: linkedlists.h:731
#define AST_RWLIST_INSERT_TAIL
Definition: linkedlists.h:741
#define ast_mutex_unlock(a)
Definition: lock.h:188
#define ast_mutex_trylock(a)
Definition: lock.h:189
static ast_mutex_t permsconfiglock
mutex used to prevent a user from running the 'cli reload permissions' command while it is already ru...
Definition: main/cli.c:91
static int cli_default_perm
Default permissions value 1=Permit 0=Deny.
Definition: main/cli.c:87
static void destroy_user_perms(void)
cleanup (free) cli_perms linkedlist.
Definition: main/cli.c:2099
static const char perms_config[]
CLI permissions config file.
Definition: main/cli.c:85
static int reload(void)
static force_inline int attribute_pure ast_strlen_zero(const char *s)
Definition: strings.h:65
Structure used to handle boolean flags.
Definition: utils.h:199
Structure for variables, used for configurations and for channel variables.
struct ast_variable * next
List of restrictions per user.
Definition: main/cli.c:69
unsigned int permit
Definition: main/cli.c:70
char * command
Definition: main/cli.c:71
List of users and permissions.
Definition: main/cli.c:93
list of users to apply restrictions.
Definition: main/cli.c:78
struct cli_perm_head * perms
Definition: main/cli.c:81

References ast_calloc, ast_category_browse(), ast_config_destroy(), ast_config_load2(), ast_free, AST_LIST_INSERT_TAIL, AST_LIST_TRAVERSE, ast_log, ast_mutex_trylock, ast_mutex_unlock, AST_RWLIST_INSERT_TAIL, AST_RWLIST_UNLOCK, AST_RWLIST_WRLOCK, ast_strdup, ast_strlen_zero(), ast_variable_browse(), cli_default_perm, cli_perm::command, CONFIG_FLAG_FILEUNCHANGED, CONFIG_STATUS_FILEUNCHANGED, destroy_user_perms(), usergroup_cli_perm::gid, LOG_NOTICE, LOG_WARNING, ast_variable::name, ast_variable::next, NULL, cli_perm::permit, usergroup_cli_perm::perms, perms_config, permsconfiglock, reload(), usergroup_cli_perm::uid, and ast_variable::value.

Referenced by asterisk_daemon(), and handle_cli_reload_permissions().

◆ ast_device_state_engine_init()

int ast_device_state_engine_init ( void  )

Initialize the device state engine in separate thread.

Provided by devicestate.c

Definition at line 618 of file devicestate.c.

619 {
622  ast_log(LOG_ERROR, "Unable to start device state change thread.\n");
623  return -1;
624  }
626 
627  return 0;
628 }
static void device_state_engine_cleanup(void)
Definition: devicestate.c:605
static pthread_t change_thread
The device state change notification thread.
Definition: devicestate.c:211
static ast_cond_t change_pending
Flag for the queue.
Definition: devicestate.c:214
static void * do_devstate_changes(void *data)
Go through the dev state change queue and update changes in the dev state thread.
Definition: devicestate.c:523
#define ast_pthread_create_background(a, b, c, d)
Definition: utils.h:587

References ast_cond_init, ast_log, ast_pthread_create_background, ast_register_cleanup(), change_pending, change_thread, device_state_engine_cleanup(), do_devstate_changes(), LOG_ERROR, and NULL.

Referenced by asterisk_daemon().

◆ ast_dns_system_resolver_init()

int ast_dns_system_resolver_init ( void  )

Initializes the resolver.

Provided by dns_system_resolver.c

Return values
0on success
-1on failure

Definition at line 244 of file dns_system_resolver.c.

245 {
246  /* Register the base resolver */
248 
249  if (res) {
251  }
252 
253  /* Instantiate the task processor */
254  dns_system_resolver_tp = ast_taskprocessor_get("dns_system_resolver_tp",
256 
257  /* Return error if the task processor failed to instantiate */
258  if (!dns_system_resolver_tp) {
260  }
261 
262  /* Register the cleanup function */
264 
266 }
int ast_dns_resolver_register(struct ast_dns_resolver *resolver)
Register a DNS resolver.
Definition: dns_core.c:630
static struct ast_taskprocessor * dns_system_resolver_tp
The task processor to use for making DNS searches asynchronous.
#define DNS_SYSTEM_RESOLVER_FAILURE
Resolver return code upon failure.
static void dns_system_resolver_destroy(void)
Destructor.
#define DNS_SYSTEM_RESOLVER_SUCCESS
Resolver return code upon success.
struct ast_dns_resolver dns_system_resolver_base
The base definition for the dns_system_resolver.
@ TPS_REF_DEFAULT
return a reference to a taskprocessor, create one if it does not exist
Definition: taskprocessor.h:76
struct ast_taskprocessor * ast_taskprocessor_get(const char *name, enum ast_tps_options create)
Get a reference to a taskprocessor with the specified name and create the taskprocessor if necessary.

References ast_dns_resolver_register(), ast_register_cleanup(), ast_taskprocessor_get(), dns_system_resolver_base, dns_system_resolver_destroy(), DNS_SYSTEM_RESOLVER_FAILURE, DNS_SYSTEM_RESOLVER_SUCCESS, dns_system_resolver_tp, and TPS_REF_DEFAULT.

Referenced by asterisk_daemon().

◆ ast_endpoint_init()

int ast_endpoint_init ( void  )

Endpoint support initialization.

Returns
0 on success.
Non-zero on error.

Definition at line 496 of file main/endpoints.c.

497 {
499 
501  ast_endpoint_hash_fn, NULL, ast_endpoint_cmp_fn);
502  if (!endpoints) {
503  return -1;
504  }
505 
507  TECH_ENDPOINT_BUCKETS, ast_endpoint_hash_fn, NULL, ast_endpoint_cmp_fn);
508  if (!tech_endpoints) {
509  return -1;
510  }
511 
512  return 0;
513 }
static struct ao2_container * tech_endpoints
static struct ao2_container * endpoints
#define ENDPOINT_BUCKETS
static void endpoint_cleanup(void)
#define TECH_ENDPOINT_BUCKETS

References AO2_ALLOC_OPT_LOCK_MUTEX, ao2_container_alloc_hash, ast_register_cleanup(), ENDPOINT_BUCKETS, endpoint_cleanup(), endpoints, NULL, TECH_ENDPOINT_BUCKETS, and tech_endpoints.

Referenced by asterisk_daemon().

◆ ast_file_init()

int ast_file_init ( void  )

Provided by file.c

Definition at line 2024 of file file.c.

2025 {
2030  return 0;
2031 }
static void file_shutdown(void)
Definition: file.c:2017
static struct ast_cli_entry cli_file[]
Definition: file.c:2013
struct stasis_message_type * ast_format_unregister_type(void)
Get the message type used for signaling a format unregistration.
struct stasis_message_type * ast_format_register_type(void)
Get the message type used for signaling a format registration.
#define STASIS_MESSAGE_TYPE_INIT(name)
Boiler-plate messaging macro for initializing message types.
Definition: stasis.h:1493

References ARRAY_LEN, ast_cli_register_multiple, ast_format_register_type(), ast_format_unregister_type(), ast_register_cleanup(), cli_file, file_shutdown(), and STASIS_MESSAGE_TYPE_INIT.

Referenced by asterisk_daemon().

◆ ast_local_init()

int ast_local_init ( void  )

Initialize the local proxy channel.

Since
12.0.0
Return values
0on success.
-1on error.

Definition at line 1134 of file core_local.c.

1135 {
1137  return -1;
1138  }
1139 
1141  return -1;
1142  }
1143 
1145  return -1;
1146  }
1147 
1149  return -1;
1150  }
1152 
1154  if (!locals) {
1155  return -1;
1156  }
1157 
1158  /* Make sure we can register our channel type */
1160  ast_log(LOG_ERROR, "Unable to register channel class 'Local'\n");
1161 
1162  return -1;
1163  }
1166 
1168  return 0;
1169 }
#define ao2_container_alloc_list(ao2_options, container_options, sort_fn, cmp_fn)
Allocate and initialize a list container.
Definition: astobj2.h:1327
int ast_channel_register(const struct ast_channel_tech *tech)
Register a channel technology (a new channel driver) Called by a channel module to register the kind ...
Definition: channel.c:539
@ AST_MEDIA_TYPE_UNKNOWN
Definition: codec.h:31
static int manager_optimize_away(struct mansession *s, const struct message *m)
Definition: core_local.c:1069
static int locals_cmp_cb(void *obj, void *arg, int flags)
Definition: core_local.c:1106
static struct ast_channel_tech local_tech
Definition: core_local.c:173
static struct ast_cli_entry cli_local[]
Definition: core_local.c:1065
static void local_shutdown(void)
Definition: core_local.c:1116
static struct ao2_container * locals
Definition: core_local.c:138
struct stasis_message_type * ast_local_optimization_end_type(void)
Message type for when a local channel optimization completes.
struct stasis_message_type * ast_local_optimization_begin_type(void)
Message type for when a local channel optimization begins.
struct stasis_message_type * ast_local_bridge_type(void)
Message type for when two local channel halves are bridged together.
int ast_format_cap_append_by_type(struct ast_format_cap *cap, enum ast_media_type type)
Add all codecs Asterisk knows about for a specific type to the capabilities structure.
Definition: format_cap.c:216
@ AST_FORMAT_CAP_FLAG_DEFAULT
Definition: format_cap.h:38
#define ast_format_cap_alloc(flags)
Allocate a new ast_format_cap structure.
Definition: format_cap.h:49
#define EVENT_FLAG_SYSTEM
Definition: manager.h:75
#define EVENT_FLAG_CALL
Definition: manager.h:76
struct ast_format_cap * capabilities
Definition: channel.h:632

References AO2_ALLOC_OPT_LOCK_MUTEX, ao2_container_alloc_list, ARRAY_LEN, ast_channel_register(), ast_cli_register_multiple, ast_format_cap_alloc, ast_format_cap_append_by_type(), AST_FORMAT_CAP_FLAG_DEFAULT, ast_local_bridge_type(), ast_local_optimization_begin_type(), ast_local_optimization_end_type(), ast_log, ast_manager_register_xml_core, AST_MEDIA_TYPE_UNKNOWN, ast_register_cleanup(), ast_channel_tech::capabilities, cli_local, EVENT_FLAG_CALL, EVENT_FLAG_SYSTEM, local_shutdown(), local_tech, locals, locals_cmp_cb(), LOG_ERROR, manager_optimize_away(), NULL, and STASIS_MESSAGE_TYPE_INIT.

Referenced by asterisk_daemon().

◆ ast_msg_init()

int ast_msg_init ( void  )

Provided by message.c

Definition at line 1758 of file main/message.c.

1759 {
1760  int res;
1761 
1762  msg_q_tp = ast_taskprocessor_get("ast_msg_queue", TPS_REF_DEFAULT);
1763  if (!msg_q_tp) {
1764  return -1;
1765  }
1766 
1768  if (AST_VECTOR_INIT(&msg_techs, 8)) {
1769  return -1;
1770  }
1771 
1773  if (AST_VECTOR_INIT(&msg_handlers, 4)) {
1774  return -1;
1775  }
1776 
1778 
1783 
1785 
1786  return res;
1787 }
#define ast_rwlock_init(rwlock)
wrapper for rwlock with tracking enabled
Definition: lock.h:222
static const char app_msg_send[]
Definition: main/message.c:282
static ast_rwlock_t msg_techs_lock
Lock for msg_techs vector.
Definition: main/message.c:269
static struct ast_msg_handler dialplan_msg_handler
Definition: main/message.c:906
static struct ast_custom_function msg_function
Definition: main/message.c:296
static struct ast_taskprocessor * msg_q_tp
Definition: main/message.c:280
struct @403 msg_techs
Vector of message technologies.
static void message_shutdown(void)
int ast_msg_handler_register(const struct ast_msg_handler *handler)
Register a ast_msg_handler.
static int msg_send_exec(struct ast_channel *chan, const char *data)
static ast_rwlock_t msg_handlers_lock
Lock for msg_handlers vector.
Definition: main/message.c:275
static int action_messagesend(struct mansession *s, const struct message *m)
static struct ast_custom_function msg_data_function
Definition: main/message.c:307
struct @404 msg_handlers
Vector of received message handlers.
#define EVENT_FLAG_MESSAGE
Definition: manager.h:95
int ast_register_application2(const char *app, int(*execute)(struct ast_channel *, const char *), const char *synopsis, const char *description, void *mod)
Register an application.
Definition: pbx_app.c:103
int __ast_custom_function_register(struct ast_custom_function *acf, struct ast_module *mod)
Register a custom function.

References __ast_custom_function_register(), action_messagesend(), app_msg_send, ast_manager_register_xml_core, ast_msg_handler_register(), ast_register_application2(), ast_register_cleanup(), ast_rwlock_init, ast_taskprocessor_get(), AST_VECTOR_INIT, dialplan_msg_handler, EVENT_FLAG_MESSAGE, message_shutdown(), msg_data_function, msg_function, msg_handlers, msg_handlers_lock, msg_q_tp, msg_send_exec(), msg_techs, msg_techs_lock, NULL, and TPS_REF_DEFAULT.

Referenced by asterisk_daemon().

◆ ast_msg_shutdown()

void ast_msg_shutdown ( void  )

Provided by message.c

Definition at line 1717 of file main/message.c.

1718 {
1719  if (msg_q_tp) {
1721  }
1722 }
void * ast_taskprocessor_unreference(struct ast_taskprocessor *tps)
Unreference the specified taskprocessor and its reference count will decrement.

References ast_taskprocessor_unreference(), and msg_q_tp.

Referenced by can_safely_quit().

◆ ast_named_locks_init()

int ast_named_locks_init ( void  )

Provided by named_locks.c

Definition at line 52 of file named_locks.c.

53 {
55  NAMED_LOCKS_BUCKETS, named_lock_proxy_hash_fn, NULL, named_lock_proxy_cmp_fn);
56  if (!named_locks) {
57  return -1;
58  }
59 
61 
62  return 0;
63 }
#define NAMED_LOCKS_BUCKETS
Definition: named_locks.c:34
static void named_locks_shutdown(void)
Definition: named_locks.c:47
struct ao2_container * named_locks
Definition: named_locks.c:33

References AO2_ALLOC_OPT_LOCK_MUTEX, ao2_container_alloc_hash, ast_register_cleanup(), named_locks, NAMED_LOCKS_BUCKETS, named_locks_shutdown(), and NULL.

Referenced by asterisk_daemon().

◆ ast_parking_stasis_init()

int ast_parking_stasis_init ( void  )

initializes the rtp engine arrays

Since
12.0.0

Definition at line 53 of file parking.c.

54 {
56  return -1;
57  }
58 
59  parking_topic = stasis_topic_create("parking:all");
60  if (!parking_topic) {
61  return -1;
62  }
64  return 0;
65 }
struct stasis_message_type * ast_parked_call_type(void)
accessor for the parked call stasis message type
static struct stasis_topic * parking_topic
Topic for parking lots.
Definition: parking.c:41
static void parking_stasis_cleanup(void)
Definition: parking.c:46
struct stasis_topic * stasis_topic_create(const char *name)
Create a new topic.
Definition: stasis.c:619

References ast_parked_call_type(), ast_register_cleanup(), parking_stasis_cleanup(), parking_topic, STASIS_MESSAGE_TYPE_INIT, and stasis_topic_create().

Referenced by asterisk_daemon().

◆ ast_pj_init()

int ast_pj_init ( void  )

Provided by libasteriskpj.c

Definition at line 45 of file libasteriskpj.c.

46 {
47 #ifdef HAVE_PJPROJECT_BUNDLED
49  pj_init();
50 #endif
51  return 0;
52 }
#define AST_PJPROJECT_INIT_LOG_LEVEL()
Get maximum log level pjproject was compiled with.
Definition: options.h:166

References AST_PJPROJECT_INIT_LOG_LEVEL.

Referenced by asterisk_daemon().

◆ ast_process_pending_reloads()

void ast_process_pending_reloads ( void  )

Process reload requests received during startup.

This function requests that the loader execute the pending reload requests that were queued during server startup.

Note
This function will do nothing if the server has not completely started up. Once called, the reload queue is emptied, and further invocations will have no affect.

Definition at line 1407 of file loader.c.

1408 {
1409  struct reload_queue_item *item;
1410 
1411  modules_loaded = 1;
1412 
1414 
1415  if (do_full_reload) {
1416  do_full_reload = 0;
1418  ast_log(LOG_NOTICE, "Executing deferred reload request.\n");
1420  return;
1421  }
1422 
1423  while ((item = AST_LIST_REMOVE_HEAD(&reload_queue, entry))) {
1424  ast_log(LOG_NOTICE, "Executing deferred reload request for module '%s'.\n", item->module);
1425  ast_module_reload(item->module);
1426  ast_free(item);
1427  }
1428 
1430 }
#define AST_LIST_LOCK(head)
Locks a list.
Definition: linkedlists.h:40
#define AST_LIST_REMOVE_HEAD(head, field)
Removes and returns the head entry from a list.
Definition: linkedlists.h:833
#define AST_LIST_UNLOCK(head)
Attempts to unlock a list.
Definition: linkedlists.h:140
static int modules_loaded
Internal flag to indicate all modules have been initially loaded.
Definition: loader.c:291
static int do_full_reload
Definition: loader.c:638
enum ast_module_reload_result ast_module_reload(const char *name)
Reload asterisk modules.
Definition: loader.c:1562
Definition: search.h:40
static struct aco_type item
Definition: test_config.c:1463

References ast_free, AST_LIST_LOCK, AST_LIST_REMOVE_HEAD, AST_LIST_UNLOCK, ast_log, ast_module_reload(), do_full_reload, item, LOG_NOTICE, modules_loaded, and NULL.

Referenced by asterisk_daemon().

◆ ast_rtp_engine_init()

int ast_rtp_engine_init ( void  )

initializes the rtp engine arrays

Definition at line 3615 of file rtp_engine.c.

3616 {
3619 
3620  rtp_topic = stasis_topic_create("rtp:all");
3621  if (!rtp_topic) {
3622  return -1;
3623  }
3627 
3628  /* Define all the RTP mime types available */
3629  set_next_mime_type(ast_format_g723, 0, "audio", "G723", 8000);
3630  set_next_mime_type(ast_format_gsm, 0, "audio", "GSM", 8000);
3631  set_next_mime_type(ast_format_ulaw, 0, "audio", "PCMU", 8000);
3632  set_next_mime_type(ast_format_ulaw, 0, "audio", "G711U", 8000);
3633  set_next_mime_type(ast_format_alaw, 0, "audio", "PCMA", 8000);
3634  set_next_mime_type(ast_format_alaw, 0, "audio", "G711A", 8000);
3635  set_next_mime_type(ast_format_g726, 0, "audio", "G726-32", 8000);
3636  set_next_mime_type(ast_format_adpcm, 0, "audio", "DVI4", 8000);
3637  set_next_mime_type(ast_format_slin, 0, "audio", "L16", 8000);
3638  set_next_mime_type(ast_format_slin16, 0, "audio", "L16", 16000);
3639  set_next_mime_type(ast_format_slin16, 0, "audio", "L16-256", 16000);
3640  set_next_mime_type(ast_format_slin12, 0, "audio", "L16", 12000);
3641  set_next_mime_type(ast_format_slin24, 0, "audio", "L16", 24000);
3642  set_next_mime_type(ast_format_slin32, 0, "audio", "L16", 32000);
3643  set_next_mime_type(ast_format_slin44, 0, "audio", "L16", 44000);
3644  set_next_mime_type(ast_format_slin48, 0, "audio", "L16", 48000);
3645  set_next_mime_type(ast_format_slin96, 0, "audio", "L16", 96000);
3646  set_next_mime_type(ast_format_slin192, 0, "audio", "L16", 192000);
3647  set_next_mime_type(ast_format_lpc10, 0, "audio", "LPC", 8000);
3648  set_next_mime_type(ast_format_g729, 0, "audio", "G729", 8000);
3649  set_next_mime_type(ast_format_g729, 0, "audio", "G729A", 8000);
3650  set_next_mime_type(ast_format_g729, 0, "audio", "G.729", 8000);
3651  set_next_mime_type(ast_format_speex, 0, "audio", "speex", 8000);
3652  set_next_mime_type(ast_format_speex16, 0, "audio", "speex", 16000);
3653  set_next_mime_type(ast_format_speex32, 0, "audio", "speex", 32000);
3654  set_next_mime_type(ast_format_ilbc, 0, "audio", "iLBC", 8000);
3655  /* this is the sample rate listed in the RTP profile for the G.722 codec, *NOT* the actual sample rate of the media stream */
3656  set_next_mime_type(ast_format_g722, 0, "audio", "G722", 8000);
3657  set_next_mime_type(ast_format_g726_aal2, 0, "audio", "AAL2-G726-32", 8000);
3658  set_next_mime_type(NULL, AST_RTP_DTMF, "audio", "telephone-event", 8000);
3659  set_next_mime_type(NULL, AST_RTP_CISCO_DTMF, "audio", "cisco-telephone-event", 8000);
3660  set_next_mime_type(NULL, AST_RTP_CN, "audio", "CN", 8000);
3661  set_next_mime_type(ast_format_jpeg, 0, "video", "JPEG", 90000);
3662  set_next_mime_type(ast_format_png, 0, "video", "PNG", 90000);
3663  set_next_mime_type(ast_format_h261, 0, "video", "H261", 90000);
3664  set_next_mime_type(ast_format_h263, 0, "video", "H263", 90000);
3665  set_next_mime_type(ast_format_h263p, 0, "video", "h263-1998", 90000);
3666  set_next_mime_type(ast_format_h264, 0, "video", "H264", 90000);
3667  set_next_mime_type(ast_format_h265, 0, "video", "H265", 90000);
3668  set_next_mime_type(ast_format_mp4, 0, "video", "MP4V-ES", 90000);
3669  set_next_mime_type(ast_format_t140_red, 0, "text", "RED", 1000);
3670  set_next_mime_type(ast_format_t140, 0, "text", "T140", 1000);
3671  set_next_mime_type(ast_format_siren7, 0, "audio", "G7221", 16000);
3672  set_next_mime_type(ast_format_siren14, 0, "audio", "G7221", 32000);
3673  set_next_mime_type(ast_format_g719, 0, "audio", "G719", 48000);
3674  /* Opus, VP8, and VP9 */
3675  set_next_mime_type(ast_format_opus, 0, "audio", "opus", 48000);
3676  set_next_mime_type(ast_format_vp8, 0, "video", "VP8", 90000);
3677  set_next_mime_type(ast_format_vp9, 0, "video", "VP9", 90000);
3678 
3679  /* Define the static rtp payload mappings */
3681  #ifdef USE_DEPRECATED_G726
3682  add_static_payload(2, ast_format_g726, 0);/* Technically this is G.721, but if Cisco can do it, so can we... */
3683  #endif
3686  add_static_payload(5, ast_format_adpcm, 0);/* 8 kHz */
3687  add_static_payload(6, ast_format_adpcm, 0); /* 16 kHz */
3691  add_static_payload(10, ast_format_slin, 0); /* 2 channels */
3692  add_static_payload(11, ast_format_slin, 0); /* 1 channel */
3694  add_static_payload(16, ast_format_adpcm, 0); /* 11.025 kHz */
3695  add_static_payload(17, ast_format_adpcm, 0); /* 22.050 kHz */
3697  add_static_payload(19, NULL, AST_RTP_CN); /* Also used for CN */
3701 
3702  /*
3703  * Dynamic payload types - Even when dynamically assigning them we'll fall
3704  * back to using the statically declared values as the default number.
3705  */
3708 
3715  add_static_payload(105, ast_format_t140_red, 0); /* Real time text chat (with redundancy encoding) */
3716  add_static_payload(106, ast_format_t140, 0); /* Real time text chat */
3720 
3724 
3728  add_static_payload(118, ast_format_slin16, 0); /* 16 Khz signed linear */
3730 
3731  add_static_payload(121, NULL, AST_RTP_CISCO_DTMF); /* Must be type 121 */
3738  /* payload types above 127 are not valid */
3739 
3747 
3748  return 0;
3749 }
struct ast_format * ast_format_speex16
Built-in cached speex at 16kHz format.
Definition: format_cache.c:136
struct ast_format * ast_format_h264
Built-in cached h264 format.
Definition: format_cache.c:176
struct ast_format * ast_format_slin44
Built-in cached signed linear 44kHz format.
Definition: format_cache.c:66
struct ast_format * ast_format_adpcm
Built-in cached adpcm format.
Definition: format_cache.c:101
struct ast_format * ast_format_slin24
Built-in cached signed linear 24kHz format.
Definition: format_cache.c:56
struct ast_format * ast_format_opus
Built-in cached opus format.
Definition: format_cache.c:221
struct ast_format * ast_format_h265
Built-in cached h265 format.
Definition: format_cache.c:181
struct ast_format * ast_format_gsm
Built-in cached gsm format.
Definition: format_cache.c:96
struct ast_format * ast_format_slin32
Built-in cached signed linear 32kHz format.
Definition: format_cache.c:61
struct ast_format * ast_format_siren14
Built-in cached siren14 format.
Definition: format_cache.c:211
struct ast_format * ast_format_speex
Built-in cached speex format.
Definition: format_cache.c:131
struct ast_format * ast_format_h263
Built-in cached h263 format.
Definition: format_cache.c:166
struct ast_format * ast_format_mp4
Built-in cached mp4 format.
Definition: format_cache.c:186
struct ast_format * ast_format_slin192
Built-in cached signed linear 192kHz format.
Definition: format_cache.c:81
struct ast_format * ast_format_ilbc
Built-in cached ilbc format.
Definition: format_cache.c:121
struct ast_format * ast_format_g726
Built-in cached g726 format.
Definition: format_cache.c:111
struct ast_format * ast_format_ulaw
Built-in cached ulaw format.
Definition: format_cache.c:86
struct ast_format * ast_format_lpc10
Built-in cached ilbc format.
Definition: format_cache.c:126
struct ast_format * ast_format_slin16
Built-in cached signed linear 16kHz format.
Definition: format_cache.c:51
struct ast_format * ast_format_slin96
Built-in cached signed linear 96kHz format.
Definition: format_cache.c:76
struct ast_format * ast_format_slin48
Built-in cached signed linear 48kHz format.
Definition: format_cache.c:71
struct ast_format * ast_format_g723
Built-in cached g723.1 format.
Definition: format_cache.c:146
struct ast_format * ast_format_slin
Built-in cached signed linear 8kHz format.
Definition: format_cache.c:41
struct ast_format * ast_format_siren7
Built-in cached siren7 format.
Definition: format_cache.c:216
struct ast_format * ast_format_alaw
Built-in cached alaw format.
Definition: format_cache.c:91
struct ast_format * ast_format_speex32
Built-in cached speex at 32kHz format.
Definition: format_cache.c:141
struct ast_format * ast_format_h261
Built-in cached h261 format.
Definition: format_cache.c:161
struct ast_format * ast_format_vp9
Built-in cached vp9 format.
Definition: format_cache.c:196
struct ast_format * ast_format_t140_red
Built-in cached t140 red format.
Definition: format_cache.c:236
struct ast_format * ast_format_slin12
Built-in cached signed linear 12kHz format.
Definition: format_cache.c:46
struct ast_format * ast_format_h263p
Built-in cached h263 plus format.
Definition: format_cache.c:171
struct ast_format * ast_format_png
Built-in cached png format.
Definition: format_cache.c:206
struct ast_format * ast_format_g722
Built-in cached g722 format.
Definition: format_cache.c:106
struct ast_format * ast_format_g726_aal2
Built-in cached g726 aal2 format.
Definition: format_cache.c:116
struct ast_format * ast_format_t140
Built-in cached t140 format.
Definition: format_cache.c:231
struct ast_format * ast_format_g729
Built-in cached g729 format.
Definition: format_cache.c:151
struct ast_format * ast_format_jpeg
Built-in cached jpeg format.
Definition: format_cache.c:201
struct ast_format * ast_format_vp8
Built-in cached vp8 format.
Definition: format_cache.c:191
struct ast_format * ast_format_g719
Built-in cached g719 format.
Definition: format_cache.c:156
struct stasis_message_type * ast_rtp_rtcp_received_type(void)
Message type for an RTCP message received from some external source.
struct stasis_message_type * ast_rtp_rtcp_sent_type(void)
Message type for an RTCP message sent from this Asterisk instance.
uintmax_t ast_debug_category_register(const char *name)
Register a debug level logger category.
static uintmax_t debug_category_dtls_packet_id
Definition: rtp_engine.c:3564
static uintmax_t debug_category_rtcp_id
Definition: rtp_engine.c:3543
static struct stasis_topic * rtp_topic
Stasis Message Bus API topic for RTP related messages
Definition: rtp_engine.c:278
static void rtp_engine_shutdown(void)
Definition: rtp_engine.c:3578
static void add_static_payload(int payload, struct ast_format *format, int rtp_code)
Definition: rtp_engine.c:3175
static ast_rwlock_t static_RTP_PT_lock
Definition: rtp_engine.c:275
static uintmax_t debug_category_rtcp_packet_id
Definition: rtp_engine.c:3550
static uintmax_t debug_category_ice_id
Definition: rtp_engine.c:3571
static uintmax_t debug_category_rtp_id
Definition: rtp_engine.c:3529
static uintmax_t debug_category_rtp_packet_id
Definition: rtp_engine.c:3536
static uintmax_t debug_category_dtls_id
Definition: rtp_engine.c:3557
static void set_next_mime_type(struct ast_format *format, int rtp_code, const char *type, const char *subtype, unsigned int sample_rate)
Definition: rtp_engine.c:3147
static ast_rwlock_t mime_types_lock
Definition: rtp_engine.c:261
#define AST_LOG_CATEGORY_ICE
Definition: rtp_engine.h:2836
#define AST_RTP_DTMF
Definition: rtp_engine.h:266
#define AST_LOG_CATEGORY_RTCP_PACKET
Definition: rtp_engine.h:2830
#define AST_LOG_CATEGORY_DTLS
Definition: rtp_engine.h:2832
#define AST_LOG_CATEGORY_RTCP
Definition: rtp_engine.h:2828
#define AST_LOG_CATEGORY_RTP
Definition: rtp_engine.h:2824
#define AST_LOG_CATEGORY_RTP_PACKET
Definition: rtp_engine.h:2826
#define AST_LOG_CATEGORY_DTLS_PACKET
Definition: rtp_engine.h:2834
#define AST_RTP_CN
Definition: rtp_engine.h:268
#define AST_RTP_CISCO_DTMF
Definition: rtp_engine.h:270

References add_static_payload(), ast_debug_category_register(), ast_format_adpcm, ast_format_alaw, ast_format_g719, ast_format_g722, ast_format_g723, ast_format_g726, ast_format_g726_aal2, ast_format_g729, ast_format_gsm, ast_format_h261, ast_format_h263, ast_format_h263p, ast_format_h264, ast_format_h265, ast_format_ilbc, ast_format_jpeg, ast_format_lpc10, ast_format_mp4, ast_format_opus, ast_format_png, ast_format_siren14, ast_format_siren7, ast_format_slin, ast_format_slin12, ast_format_slin16, ast_format_slin192, ast_format_slin24, ast_format_slin32, ast_format_slin44, ast_format_slin48, ast_format_slin96, ast_format_speex, ast_format_speex16, ast_format_speex32, ast_format_t140, ast_format_t140_red, ast_format_ulaw, ast_format_vp8, ast_format_vp9, AST_LOG_CATEGORY_DTLS, AST_LOG_CATEGORY_DTLS_PACKET, AST_LOG_CATEGORY_ICE, AST_LOG_CATEGORY_RTCP, AST_LOG_CATEGORY_RTCP_PACKET, AST_LOG_CATEGORY_RTP, AST_LOG_CATEGORY_RTP_PACKET, ast_register_cleanup(), AST_RTP_CISCO_DTMF, AST_RTP_CN, AST_RTP_DTMF, ast_rtp_rtcp_received_type(), ast_rtp_rtcp_sent_type(), ast_rwlock_init, debug_category_dtls_id, debug_category_dtls_packet_id, debug_category_ice_id, debug_category_rtcp_id, debug_category_rtcp_packet_id, debug_category_rtp_id, debug_category_rtp_packet_id, mime_types_lock, NULL, rtp_engine_shutdown(), rtp_topic, set_next_mime_type(), STASIS_MESSAGE_TYPE_INIT, stasis_topic_create(), and static_RTP_PT_lock.

Referenced by asterisk_daemon().

◆ ast_ssl_init()

int ast_ssl_init ( void  )

Provided by ssl.c

Definition at line 205 of file libasteriskssl.c.

206 {
207  return 0;
208 }

Referenced by asterisk_daemon().

◆ ast_stun_init()

void ast_stun_init ( void  )

Initialize the STUN system in Asterisk.

Provided by stun.c

Definition at line 576 of file stun.c.

577 {
578  ast_cli_register_multiple(cli_stun, sizeof(cli_stun) / sizeof(struct ast_cli_entry));
580 
583 }
descriptor for a cli entry.
Definition: cli.h:171
static void stun_shutdown(void)
Definition: stun.c:567
static uintmax_t debug_category_stun_id
Definition: stun.c:553
static uintmax_t debug_category_stun_packet_id
Definition: stun.c:560
static struct ast_cli_entry cli_stun[]
Definition: stun.c:549
#define AST_LOG_CATEGORY_STUN_PACKET
Definition: stun.h:40
#define AST_LOG_CATEGORY_STUN
Definition: stun.h:38

References ast_cli_register_multiple, ast_debug_category_register(), AST_LOG_CATEGORY_STUN, AST_LOG_CATEGORY_STUN_PACKET, ast_register_cleanup(), cli_stun, debug_category_stun_id, debug_category_stun_packet_id, and stun_shutdown().

Referenced by asterisk_daemon().

◆ ast_term_init()

int ast_term_init ( void  )

Provided by term.c

Definition at line 165 of file term.c.

166 {
167  char *term = getenv("TERM");
168  char termfile[256] = "";
169  int termfd = -1, parseokay = 0, i;
170 
171  if (ast_opt_no_color) {
172  return 0;
173  }
174 
175  if (!ast_opt_console) {
176  /* If any remote console is not compatible, we'll strip the color codes at that point */
177  vt100compat = 1;
178  goto end;
179  }
180 
181  if (!term) {
182  return 0;
183  }
184 
185  for (i = 0; !parseokay && termpath[i]; i++) {
186  snprintf(termfile, sizeof(termfile), "%s/%c/%s", termpath[i], *term, term);
187 
188  termfd = open(termfile, O_RDONLY);
189  if (termfd > -1) {
190  parseokay = parse_terminfo_file(termfd);
191  close(termfd);
192  }
193  }
194 
195  if (!parseokay) {
196  /* These comparisons should not be substrings nor case-insensitive, as
197  * terminal types are very particular about how they treat suffixes and
198  * capitalization. For example, terminal type 'linux-m' does NOT
199  * support color, while 'linux' does. Not even all vt100* terminals
200  * support color, either (e.g. 'vt100+fnkeys'). */
201  if (!strcmp(term, "linux")) {
202  vt100compat = 1;
203  } else if (!strcmp(term, "xterm")) {
204  vt100compat = 1;
205  } else if (!strcmp(term, "xterm-color")) {
206  vt100compat = 1;
207  } else if (!strcmp(term, "xterm-256color")) {
208  vt100compat = 1;
209  } else if (!strncmp(term, "Eterm", 5)) {
210  /* Both entries which start with Eterm support color */
211  vt100compat = 1;
212  } else if (!strcmp(term, "vt100")) {
213  vt100compat = 1;
214  } else if (!strncmp(term, "crt", 3)) {
215  /* Both crt terminals support color */
216  vt100compat = 1;
217  }
218  }
219 
220 end:
221  if (vt100compat) {
222  /* Make commands show up in nice colors */
224  snprintf(enddata, sizeof(enddata), "%c[%dm", ESC, COLOR_BLACK);
225  } else if (ast_opt_force_black_background) {
226  snprintf(enddata, sizeof(enddata), "%c[%d;%d;%dm", ESC, ATTR_RESET, COLOR_WHITE, COLOR_BLACK + 10);
227  } else {
228  snprintf(enddata, sizeof(enddata), "%c[%dm", ESC, ATTR_RESET);
229  }
230  snprintf(quitdata, sizeof(quitdata), "%c[%dm", ESC, ATTR_RESET);
231  }
232  return 0;
233 }
char * end
Definition: eagi_proxy.c:73
#define ast_opt_console
Definition: options.h:109
#define ast_opt_no_color
Definition: options.h:114
#define ast_opt_force_black_background
Definition: options.h:131
#define ast_opt_light_background
Definition: options.h:130
static int vt100compat
Definition: term.c:43
static char enddata[80]
Definition: term.c:45
static int parse_terminfo_file(int fd)
Definition: term.c:106
static char quitdata[80]
Definition: term.c:46
static const char *const termpath[]
Definition: term.c:48
#define ESC
Definition: term.h:30
#define COLOR_WHITE
Definition: term.h:64
#define COLOR_BLACK
Definition: term.h:50
#define ATTR_RESET
Definition: term.h:36

References ast_opt_console, ast_opt_force_black_background, ast_opt_light_background, ast_opt_no_color, ATTR_RESET, COLOR_BLACK, COLOR_WHITE, end, enddata, ESC, parse_terminfo_file(), quitdata, termpath, and vt100compat.

Referenced by ast_remotecontrol(), asterisk_daemon(), and main().

◆ ast_test_init()

int ast_test_init ( void  )

Provided by test.c

Definition at line 1222 of file test.c.

1223 {
1224 #ifdef TEST_FRAMEWORK
1225  ast_register_cleanup(test_cleanup);
1226 
1227  /* Create stasis topic */
1228  test_suite_topic = stasis_topic_create("testsuite:all");
1229  if (!test_suite_topic) {
1230  return -1;
1231  }
1232 
1233  if (STASIS_MESSAGE_TYPE_INIT(ast_test_suite_message_type) != 0) {
1234  return -1;
1235  }
1236 
1237  AST_TEST_REGISTER(test_registrations);
1238 
1239  /* Register cli commands */
1240  ast_cli_register_multiple(test_cli, ARRAY_LEN(test_cli));
1241 #endif
1242 
1243  return 0;
1244 }
#define AST_TEST_REGISTER(cb)
Definition: test.h:127

References ARRAY_LEN, ast_cli_register_multiple, ast_register_cleanup(), AST_TEST_REGISTER, STASIS_MESSAGE_TYPE_INIT, and stasis_topic_create().

Referenced by asterisk_daemon().

◆ ast_timing_init()

int ast_timing_init ( void  )

Provided by timing.c

Definition at line 289 of file timing.c.

290 {
292  return -1;
293  }
294 
296 
298 }
#define ast_heap_create(init_height, cmp_fn, index_offset)
Create a max heap.
Definition: heap.h:100
static void timing_shutdown(void)
Definition: timing.c:281
static struct ast_heap * timing_interfaces
Definition: timing.c:52
static struct ast_cli_entry cli_timing[]
Definition: timing.c:277
static int timing_holder_cmp(void *_h1, void *_h2)
Definition: timing.c:59

References ARRAY_LEN, ast_cli_register_multiple, ast_heap_create, ast_register_cleanup(), cli_timing, timing_holder_cmp(), timing_interfaces, and timing_shutdown().

Referenced by asterisk_daemon().

◆ ast_tps_init()

int ast_tps_init ( void  )

Provided by taskprocessor.c

Definition at line 368 of file taskprocessor.c.

369 {
372  if (!tps_singletons) {
373  ast_log(LOG_ERROR, "taskprocessor container failed to initialize!\n");
374  return -1;
375  }
376 
377  if (AST_VECTOR_RW_INIT(&overloaded_subsystems, 10)) {
378  ao2_ref(tps_singletons, -1);
379  ast_log(LOG_ERROR, "taskprocessor subsystems vector failed to initialize!\n");
380  return -1;
381  }
382 
383  ast_cond_init(&cli_ping_cond, NULL);
384 
386 
388 
389  return 0;
390 }
#define ao2_ref(o, delta)
Reference/unreference an object and return the old refcount.
Definition: astobj2.h:459
static void tps_shutdown(void)
#define TPS_MAX_BUCKETS
static struct ast_cli_entry taskprocessor_clis[]
static int tps_cmp_cb(void *obj, void *arg, int flags)
The astobj2 compare callback for taskprocessors.
static int tps_hash_cb(const void *obj, const int flags)
The astobj2 hash callback for taskprocessors.
#define AST_VECTOR_RW_INIT(vec, size)
Initialize a vector with a read/write lock.
Definition: vector.h:158

References AO2_ALLOC_OPT_LOCK_MUTEX, ao2_container_alloc_hash, ao2_ref, ARRAY_LEN, ast_cli_register_multiple, ast_cond_init, ast_log, ast_register_cleanup(), AST_VECTOR_RW_INIT, LOG_ERROR, NULL, taskprocessor_clis, tps_cmp_cb(), tps_hash_cb(), TPS_MAX_BUCKETS, and tps_shutdown().

Referenced by asterisk_daemon().

◆ ast_xmldoc_load_documentation()

int ast_xmldoc_load_documentation ( void  )

Load XML documentation. Provided by xmldoc.c.

Return values
1on error.
0on success.

Definition at line 2881 of file xmldoc.c.

2882 {
2883  struct ast_xml_node *root_node;
2884  struct ast_xml_doc *tmpdoc;
2885  struct documentation_tree *doc_tree;
2886  char *xmlpattern;
2887  struct ast_config *cfg = NULL;
2888  struct ast_variable *var = NULL;
2889  struct ast_flags cnfflags = { 0 };
2890  int globret, i, dup, duplicate;
2891  glob_t globbuf;
2892 #if !defined(HAVE_GLOB_NOMAGIC) || !defined(HAVE_GLOB_BRACE) || defined(DEBUG_NONGNU)
2893  int xmlpattern_maxlen;
2894 #endif
2895 
2896  /* setup default XML documentation language */
2898 
2899  if ((cfg = ast_config_load2("asterisk.conf", "" /* core can't reload */, cnfflags)) && cfg != CONFIG_STATUS_FILEINVALID) {
2900  for (var = ast_variable_browse(cfg, "options"); var; var = var->next) {
2901  if (!strcasecmp(var->name, "documentation_language")) {
2902  if (!ast_strlen_zero(var->value)) {
2903  snprintf(documentation_language, sizeof(documentation_language), "%s", var->value);
2904  }
2905  }
2906  }
2907  ast_config_destroy(cfg);
2908  }
2909 
2910  /* initialize the XML library. */
2911  ast_xml_init();
2912 
2914  /* register function to be run when asterisk finish. */
2916 
2917  globbuf.gl_offs = 0; /* slots to reserve in gl_pathv */
2918 
2919 #if !defined(HAVE_GLOB_NOMAGIC) || !defined(HAVE_GLOB_BRACE) || defined(DEBUG_NONGNU)
2920  xmlpattern_maxlen = strlen(ast_config_AST_DATA_DIR) + strlen("/documentation/thirdparty") + strlen("/*-??_??.xml") + 1;
2921  xmlpattern = ast_malloc(xmlpattern_maxlen);
2922  globret = xml_pathmatch(xmlpattern, xmlpattern_maxlen, &globbuf);
2923 #else
2924  /* Get every *-LANG.xml file inside $(ASTDATADIR)/documentation */
2925  if (ast_asprintf(&xmlpattern, "%s/documentation{/thirdparty/,/}*-{%s,%.2s_??,%s}.xml", ast_config_AST_DATA_DIR,
2927  return 1;
2928  }
2929  globret = glob(xmlpattern, MY_GLOB_FLAGS, NULL, &globbuf);
2930 #endif
2931 
2932  ast_debug(3, "gl_pathc %zu\n", (size_t)globbuf.gl_pathc);
2933  if (globret == GLOB_NOSPACE) {
2934  ast_log(LOG_WARNING, "XML load failure, glob expansion of pattern '%s' failed: Not enough memory\n", xmlpattern);
2935  ast_free(xmlpattern);
2936  return 1;
2937  } else if (globret == GLOB_ABORTED) {
2938  ast_log(LOG_WARNING, "XML load failure, glob expansion of pattern '%s' failed: Read error\n", xmlpattern);
2939  ast_free(xmlpattern);
2940  return 1;
2941  }
2942  ast_free(xmlpattern);
2943 
2945  /* loop over expanded files */
2946  for (i = 0; i < globbuf.gl_pathc; i++) {
2947  /* check for duplicates (if we already [try to] open the same file. */
2948  duplicate = 0;
2949  for (dup = 0; dup < i; dup++) {
2950  if (!strcmp(globbuf.gl_pathv[i], globbuf.gl_pathv[dup])) {
2951  duplicate = 1;
2952  break;
2953  }
2954  }
2955  if (duplicate || strchr(globbuf.gl_pathv[i], '*')) {
2956  /* skip duplicates as well as pathnames not found
2957  * (due to use of GLOB_NOCHECK in xml_pathmatch) */
2958  continue;
2959  }
2960  tmpdoc = NULL;
2961  tmpdoc = ast_xml_open(globbuf.gl_pathv[i]);
2962  if (!tmpdoc) {
2963  ast_log(LOG_ERROR, "Could not open XML documentation at '%s'\n", globbuf.gl_pathv[i]);
2964  continue;
2965  }
2966  /* Get doc root node and check if it starts with '<docs>' */
2967  root_node = ast_xml_get_root(tmpdoc);
2968  if (!root_node) {
2969  ast_log(LOG_ERROR, "Error getting documentation root node\n");
2970  ast_xml_close(tmpdoc);
2971  continue;
2972  }
2973  /* Check root node name for malformed xmls. */
2974  if (strcmp(ast_xml_node_get_name(root_node), "docs")) {
2975  ast_log(LOG_ERROR, "Documentation file is not well formed!\n");
2976  ast_xml_close(tmpdoc);
2977  continue;
2978  }
2979  doc_tree = ast_calloc(1, sizeof(*doc_tree));
2980  if (!doc_tree) {
2981  ast_log(LOG_ERROR, "Unable to allocate documentation_tree structure!\n");
2982  ast_xml_close(tmpdoc);
2983  continue;
2984  }
2985  doc_tree->doc = tmpdoc;
2986  doc_tree->filename = ast_strdup(globbuf.gl_pathv[i]);
2988  }
2990 
2991  globfree(&globbuf);
2992 
2993  return 0;
2994 }
#define GLOB_ABORTED
Definition: ael_lex.c:839
#define var
Definition: ast_expr2f.c:614
#define ast_asprintf(ret, fmt,...)
A wrapper for asprintf()
Definition: astmm.h:267
#define ast_malloc(len)
A wrapper for malloc()
Definition: astmm.h:191
#define ast_cli_register(e)
Registers a command or an array of commands.
Definition: cli.h:256
#define MY_GLOB_FLAGS
#define CONFIG_STATUS_FILEINVALID
#define ast_debug(level,...)
Log a DEBUG message.
const char * ast_config_AST_DATA_DIR
Definition: options.c:158
XML documentation tree.
Definition: xmldoc.c:54
struct ast_xml_doc * doc
Definition: xmldoc.c:56
char * filename
Definition: xmldoc.c:55
Container of documentation trees.
Definition: xmldoc.c:75
const char * ast_xml_node_get_name(struct ast_xml_node *node)
Get the name of a node.
Definition: xml.c:364
struct ast_xml_doc * ast_xml_open(char *filename)
Open an XML document.
Definition: xml.c:71
void ast_xml_close(struct ast_xml_doc *doc)
Close an already open document and free the used structure.
Definition: xml.c:190
int ast_xml_init(void)
Initialize the XML library implementation. This function is used to setup everything needed to start ...
Definition: xml.c:48
struct ast_xml_node * ast_xml_get_root(struct ast_xml_doc *doc)
Get the document root node.
Definition: xml.c:209
static char documentation_language[6]
XML documentation language.
Definition: xmldoc.c:51
static const char default_documentation_language[]
Default documentation language.
Definition: xmldoc.c:44
static struct ast_cli_entry cli_dump_xmldocs
Definition: xmldoc.c:2861
static void xmldoc_unload_documentation(void)
Close and unload XML documentation.
Definition: xmldoc.c:2864

References ast_asprintf, ast_calloc, ast_cli_register, ast_config_AST_DATA_DIR, ast_config_destroy(), ast_config_load2(), ast_debug, ast_free, ast_log, ast_malloc, ast_register_cleanup(), AST_RWLIST_INSERT_TAIL, AST_RWLIST_UNLOCK, AST_RWLIST_WRLOCK, ast_strdup, ast_strlen_zero(), ast_variable_browse(), ast_xml_close(), ast_xml_get_root(), ast_xml_init(), ast_xml_node_get_name(), ast_xml_open(), cli_dump_xmldocs, CONFIG_STATUS_FILEINVALID, default_documentation_language, documentation_tree::doc, documentation_language, documentation_tree::filename, GLOB_ABORTED, LOG_ERROR, LOG_WARNING, MY_GLOB_FLAGS, NULL, var, and xmldoc_unload_documentation().

Referenced by asterisk_daemon().

◆ astdb_init()

int astdb_init ( void  )

Provided by db.c

Definition at line 1082 of file main/db.c.

1083 {
1085 
1086  if (db_init()) {
1087  return -1;
1088  }
1089 
1091  return -1;
1092  }
1093 
1100  return 0;
1101 }
int ast_register_atexit(void(*func)(void))
Register a function to be executed before Asterisk exits.
Definition: clicompat.c:13
static int manager_dbdel(struct mansession *s, const struct message *m)
Definition: main/db.c:950
static int manager_dbdeltree(struct mansession *s, const struct message *m)
Definition: main/db.c:975
static struct ast_cli_entry cli_database[]
Definition: main/db.c:873
static int manager_dbget(struct mansession *s, const struct message *m)
Definition: main/db.c:908
static int db_init(void)
Definition: main/db.c:282
static int manager_dbput(struct mansession *s, const struct message *m)
Definition: main/db.c:883
static ast_cond_t dbcond
Definition: main/db.c:109
static void * db_sync_thread(void *data)
Definition: main/db.c:1025
static pthread_t syncthread
Definition: main/db.c:111
static void astdb_atexit(void)
Definition: main/db.c:1058
#define EVENT_FLAG_REPORTING
Definition: manager.h:84

References ARRAY_LEN, ast_cli_register_multiple, ast_cond_init, ast_manager_register_xml_core, ast_pthread_create_background, ast_register_atexit(), astdb_atexit(), cli_database, db_init(), db_sync_thread(), dbcond, EVENT_FLAG_REPORTING, EVENT_FLAG_SYSTEM, manager_dbdel(), manager_dbdeltree(), manager_dbget(), manager_dbput(), NULL, and syncthread.

Referenced by asterisk_daemon().

◆ astobj2_init()

int astobj2_init ( void  )

Provided by astobj2.c

Definition at line 1169 of file astobj2.c.

1170 {
1171  char ref_filename[1024];
1172 
1173  if (ast_opt_ref_debug) {
1174  snprintf(ref_filename, sizeof(ref_filename), "%s/refs", ast_config_AST_LOG_DIR);
1175  ref_log = fopen(ref_filename, "w");
1176  if (!ref_log) {
1177  ast_log(LOG_ERROR, "Could not open ref debug log file: %s\n", ref_filename);
1178  }
1179  }
1180 
1182 
1183  if (container_init() != 0) {
1184  fclose(ref_log);
1185  ref_log = NULL;
1186  return -1;
1187  }
1188 
1189 #if defined(AO2_DEBUG)
1190  ast_cli_register_multiple(cli_astobj2, ARRAY_LEN(cli_astobj2));
1191 #endif /* defined(AO2_DEBUG) */
1192 
1193  return 0;
1194 }
static void astobj2_cleanup(void)
Definition: astobj2.c:1157
static FILE * ref_log
Definition: astobj2.c:44
int container_init(void)
#define ast_opt_ref_debug
Definition: options.h:135
const char * ast_config_AST_LOG_DIR
Definition: options.c:159

References ARRAY_LEN, ast_cli_register_multiple, ast_config_AST_LOG_DIR, ast_log, ast_opt_ref_debug, ast_register_cleanup(), astobj2_cleanup(), container_init(), LOG_ERROR, NULL, and ref_log.

Referenced by asterisk_daemon().

◆ clean_time_zones()

void clean_time_zones ( void  )

Provided by localtime.c

Definition at line 1590 of file localtime.c.

1591 {
1592  struct state *sp;
1593 
1595  while ((sp = AST_LIST_REMOVE_HEAD(&zonelist, list))) {
1596  sstate_free(sp);
1597  }
1599 }
static void sstate_free(struct state *p)
Definition: localtime.c:789
struct state::@427 list

References AST_LIST_LOCK, AST_LIST_REMOVE_HEAD, AST_LIST_UNLOCK, state::list, and sstate_free().

Referenced by really_quit().

◆ close_logger()

void close_logger ( void  )

Provided by logger.c

Definition at line 1998 of file logger.c.

1999 {
2000  struct logchannel *f = NULL;
2001 
2003 
2005 
2006  logger_initialized = 0;
2007 
2008  /* Stop logger thread */
2010  close_logger_thread = 1;
2013 
2014  if (logthread != AST_PTHREADT_NULL) {
2015  pthread_join(logthread, NULL);
2016  }
2017 
2019 
2020  if (qlog) {
2021  fclose(qlog);
2022  qlog = NULL;
2023  }
2024 
2025  while ((f = AST_LIST_REMOVE_HEAD(&logchannels, list))) {
2026  if (f->fileptr && (f->fileptr != stdout) && (f->fileptr != stderr)) {
2027  fclose(f->fileptr);
2028  f->fileptr = NULL;
2029  }
2030  ast_free(f);
2031  }
2032 
2033  closelog(); /* syslog */
2034 
2036 }
int ast_cli_unregister_multiple(struct ast_cli_entry *e, int len)
Unregister multiple commands.
Definition: clicompat.c:30
#define AST_PTHREADT_NULL
Definition: lock.h:66
#define ast_cond_signal(cond)
Definition: lock.h:201
static int close_logger_thread
Definition: logger.c:198
static FILE * qlog
Definition: logger.c:200
static int logger_initialized
Definition: logger.c:89
static pthread_t logthread
Definition: logger.c:196
static ast_cond_t logcond
Definition: logger.c:197
static struct ast_cli_entry cli_logger[]
Definition: logger.c:1648
int ast_logger_category_unload(void)
Unload system wide logger category functionality.
struct logchannel::@398 list
FILE * fileptr
Definition: logger.c:152

References ARRAY_LEN, ast_cli_unregister_multiple(), ast_cond_signal, ast_free, AST_LIST_LOCK, AST_LIST_REMOVE_HEAD, AST_LIST_UNLOCK, ast_logger_category_unload(), AST_PTHREADT_NULL, AST_RWLIST_UNLOCK, AST_RWLIST_WRLOCK, cli_logger, close_logger_thread, logchannel::fileptr, logchannel::list, logcond, logger_initialized, logthread, NULL, and qlog.

Referenced by really_quit().

◆ dns_core_init()

int dns_core_init ( void  )

Provided by dns_core.c

Definition at line 614 of file dns_core.c.

615 {
617  if (!sched) {
618  return -1;
619  }
620 
622  return -1;
623  }
624 
626 
627  return 0;
628 }
static void dns_shutdown(void)
Definition: dns_core.c:606
struct ast_sched_context * ast_sched_context_create(void)
Create a scheduler context.
Definition: sched.c:238
int ast_sched_start_thread(struct ast_sched_context *con)
Start a thread for processing scheduler entries.
Definition: sched.c:197
Definition: sched.c:76

References ast_register_cleanup(), ast_sched_context_create(), ast_sched_start_thread(), and dns_shutdown().

Referenced by asterisk_daemon().

◆ dnsmgr_start_refresh()

void dnsmgr_start_refresh ( void  )

Provided by dnsmgr.c

Definition at line 302 of file dnsmgr.c.

303 {
304  if (refresh_sched > -1) {
307  }
308 }
static int refresh_list(const void *data)
Definition: dnsmgr.c:272
static struct refresh_info master_refresh_info
Definition: dnsmgr.c:101
static int refresh_sched
Definition: dnsmgr.c:63
#define AST_SCHED_DEL(sched, id)
Remove a scheduler entry.
Definition: sched.h:46
int ast_sched_add_variable(struct ast_sched_context *con, int when, ast_sched_cb callback, const void *data, int variable) attribute_warn_unused_result
Adds a scheduled event with rescheduling support.
Definition: sched.c:526

References ast_sched_add_variable(), AST_SCHED_DEL, master_refresh_info, refresh_list(), and refresh_sched.

Referenced by asterisk_daemon().

◆ init_logger()

int init_logger ( void  )

Provided by logger.c

Definition at line 1956 of file logger.c.

1957 {
1958  int res;
1959  /* auto rotate if sig SIGXFSZ comes a-knockin */
1960  sigaction(SIGXFSZ, &handle_SIGXFSZ, NULL);
1961 
1962  /* Re-initialize the logmsgs mutex. The recursive mutex can be accessed prior
1963  * to Asterisk being forked into the background, which can cause the thread
1964  * ID tracked by the underlying pthread mutex to be different than the ID of
1965  * the thread that unlocks the mutex. Since init_logger is called after the
1966  * fork, it is safe to initialize the mutex here for future accesses.
1967  */
1971 
1972  /* start logger thread */
1975  return -1;
1976  }
1977 
1978  /* register the logger cli commands */
1980 
1982 
1983  /* create log channels */
1985  res = init_logger_chain(NULL);
1987  ast_verb_update();
1988  logger_initialized = 1;
1989  if (res) {
1990  ast_log(LOG_ERROR, "Errors detected in logger.conf. Default console logging is being used.\n");
1991  }
1992 
1994 
1995  return 0;
1996 }
#define ast_cond_destroy(cond)
Definition: lock.h:200
#define ast_mutex_init(pmutex)
Definition: lock.h:184
#define ast_mutex_destroy(a)
Definition: lock.h:186
static int init_logger_chain(const char *altconf)
Read config, setup channels.
Definition: logger.c:746
void ast_log(int level, const char *file, int line, const char *function, const char *fmt,...)
Used for sending a log message This is the standard logger function. Probably the only way you will i...
Definition: logger.c:2187
static struct sigaction handle_SIGXFSZ
Definition: logger.c:1664
void ast_verb_update(void)
Re-evaluate the system max verbosity level (ast_verb_sys_level).
Definition: logger.c:2318
static void * logger_thread(void *data)
Actual logging thread.
Definition: logger.c:1851
int ast_logger_category_load(void)
Load/Initialize system wide logger category functionality.
ast_mutex_t lock
Definition: logger.c:195
#define ast_pthread_create(a, b, c, d)
Definition: utils.h:579
int ast_mkdir(const char *path, int mode)
Recursively create directory path.
Definition: main/utils.c:2377

References ARRAY_LEN, ast_cli_register_multiple, ast_cond_destroy, ast_cond_init, ast_config_AST_LOG_DIR, ast_log(), ast_logger_category_load(), ast_mkdir(), ast_mutex_destroy, ast_mutex_init, ast_pthread_create, AST_RWLIST_UNLOCK, AST_RWLIST_WRLOCK, ast_verb_update(), cli_logger, handle_SIGXFSZ, init_logger_chain(), logmsgs::lock, LOG_ERROR, logcond, logger_initialized, logger_thread(), logthread, and NULL.

Referenced by asterisk_daemon().

◆ load_asterisk_conf()

void load_asterisk_conf ( void  )

Definition at line 210 of file options.c.

211 {
212  struct ast_config *cfg;
213  struct ast_variable *v;
214  char hostname[MAXHOSTNAMELEN] = "";
215  struct ast_flags config_flags = { CONFIG_FLAG_NOREALTIME };
216  struct {
217  unsigned int dbdir:1;
218  unsigned int keydir:1;
219  } found = { 0, 0 };
220  /* Default to false for security */
221  int live_dangerously = 0;
222  int option_debug_new = 0;
223  int option_trace_new = 0;
224  int option_verbose_new = 0;
225 
226  /* init with buildtime config */
227 #ifdef REF_DEBUG
228  /* The REF_DEBUG compiler flag is now only used to enable refdebug by default.
229  * Support for debugging reference counts is always compiled in. */
231 #endif
232 
234 
235  cfg = ast_config_load2(ast_config_AST_CONFIG_FILE, "" /* core, can't reload */, config_flags);
236 
237  /* If AST_OPT_FLAG_EXEC_INCLUDES was previously enabled with -X turn it off now.
238  * Using #exec from other configs requires that it be enabled from asterisk.conf. */
240 
241  /* no asterisk.conf? no problem, use buildtime config! */
243  fprintf(stderr, "Unable to open specified master config file '%s', using built-in defaults\n", ast_config_AST_CONFIG_FILE);
244  return;
245  }
246 
247  for (v = ast_variable_browse(cfg, "files"); v; v = v->next) {
248  if (!strcasecmp(v->name, "astctlpermissions")) {
250  } else if (!strcasecmp(v->name, "astctlowner")) {
252  } else if (!strcasecmp(v->name, "astctlgroup")) {
254  } else if (!strcasecmp(v->name, "astctl")) {
256  }
257  }
258 
259  for (v = ast_variable_browse(cfg, "directories"); v; v = v->next) {
260  if (!strcasecmp(v->name, "astcachedir")) {
262  } else if (!strcasecmp(v->name, "astetcdir")) {
264  } else if (!strcasecmp(v->name, "astspooldir")) {
266  snprintf(cfg_paths.monitor_dir, sizeof(cfg_paths.monitor_dir), "%s/monitor", v->value);
267  snprintf(cfg_paths.recording_dir, sizeof(cfg_paths.recording_dir), "%s/recording", v->value);
268  } else if (!strcasecmp(v->name, "astvarlibdir")) {
270  if (!found.dbdir) {
271  snprintf(cfg_paths.db_path, sizeof(cfg_paths.db_path), "%s/astdb", v->value);
272  }
273  } else if (!strcasecmp(v->name, "astdbdir")) {
274  snprintf(cfg_paths.db_path, sizeof(cfg_paths.db_path), "%s/astdb", v->value);
275  found.dbdir = 1;
276  } else if (!strcasecmp(v->name, "astdatadir")) {
278  if (!found.keydir) {
279  snprintf(cfg_paths.key_dir, sizeof(cfg_paths.key_dir), "%s/keys", v->value);
280  }
281  } else if (!strcasecmp(v->name, "astkeydir")) {
282  snprintf(cfg_paths.key_dir, sizeof(cfg_paths.key_dir), "%s/keys", v->value);
283  found.keydir = 1;
284  } else if (!strcasecmp(v->name, "astlogdir")) {
286  } else if (!strcasecmp(v->name, "astagidir")) {
288  } else if (!strcasecmp(v->name, "astrundir")) {
289  snprintf(cfg_paths.pid_path, sizeof(cfg_paths.pid_path), "%s/%s", v->value, "asterisk.pid");
291  } else if (!strcasecmp(v->name, "astmoddir")) {
293  } else if (!strcasecmp(v->name, "astsbindir")) {
295  }
296  }
297 
298  /* Combine astrundir and astctl settings. */
299  snprintf(cfg_paths.socket_path, sizeof(cfg_paths.socket_path), "%s/%s",
301 
302  for (v = ast_variable_browse(cfg, "options"); v; v = v->next) {
303  /* verbose level (-v at startup) */
304  if (!strcasecmp(v->name, "verbose")) {
305  option_verbose_new = atoi(v->value);
306  /* whether or not to force timestamping in CLI verbose output. (-T at startup) */
307  } else if (!strcasecmp(v->name, "timestamp")) {
309  /* whether or not to support #exec in config files */
310  } else if (!strcasecmp(v->name, "execincludes")) {
312  /* debug level (-d at startup) */
313  } else if (!strcasecmp(v->name, "debug")) {
314  option_debug_new = 0;
315  if (sscanf(v->value, "%30d", &option_debug_new) != 1) {
316  option_debug_new = ast_true(v->value) ? 1 : 0;
317  }
318  } else if (!strcasecmp(v->name, "trace")) {
319  option_trace_new = 0;
320  if (sscanf(v->value, "%30d", &option_trace_new) != 1) {
321  option_trace_new = ast_true(v->value) ? 1 : 0;
322  }
323  } else if (!strcasecmp(v->name, "refdebug")) {
325 #if HAVE_WORKING_FORK
326  /* Disable forking (-f at startup) */
327  } else if (!strcasecmp(v->name, "nofork")) {
329  /* Always fork, even if verbose or debug are enabled (-F at startup) */
330  } else if (!strcasecmp(v->name, "alwaysfork")) {
332 #endif
333  /* Run quietly (-q at startup ) */
334  } else if (!strcasecmp(v->name, "quiet")) {
336  /* Run as console (-c at startup, implies nofork) */
337  } else if (!strcasecmp(v->name, "console")) {
338  if (!ast_opt_remote) {
340  }
341  /* Run with high priority if the O/S permits (-p at startup) */
342  } else if (!strcasecmp(v->name, "highpriority")) {
344  /* Initialize RSA auth keys (IAX2) (-i at startup) */
345  } else if (!strcasecmp(v->name, "initcrypto")) {
347  /* Disable ANSI colors for console (-c at startup) */
348  } else if (!strcasecmp(v->name, "nocolor")) {
350  /* Disable some usage warnings for picky people :p */
351  } else if (!strcasecmp(v->name, "dontwarn")) {
353  /* Dump core in case of crash (-g) */
354  } else if (!strcasecmp(v->name, "dumpcore")) {
356  /* Cache recorded sound files to another directory during recording */
357  } else if (!strcasecmp(v->name, "cache_record_files")) {
359 #if !defined(LOW_MEMORY)
360  /* Cache media frames for performance */
361  } else if (!strcasecmp(v->name, "cache_media_frames")) {
363 #endif
364  /* Specify cache directory */
365  } else if (!strcasecmp(v->name, "record_cache_dir")) {
367  /* Build transcode paths via SLINEAR, instead of directly */
368  } else if (!strcasecmp(v->name, "transcode_via_sln")) {
370  /* Transmit SLINEAR silence while a channel is being recorded or DTMF is being generated on a channel */
371  } else if (!strcasecmp(v->name, "transmit_silence_during_record") || !strcasecmp(v->name, "transmit_silence")) {
373  } else if (!strcasecmp(v->name, "mindtmfduration")) {
374  if (sscanf(v->value, "%30u", &option_dtmfminduration) != 1) {
376  }
377  } else if (!strcasecmp(v->name, "rtp_use_dynamic")) {
379  /* http://www.iana.org/assignments/rtp-parameters
380  * RTP dynamic payload types start at 96 normally; extend down to 0 */
381  } else if (!strcasecmp(v->name, "rtp_pt_dynamic")) {
384  } else if (!strcasecmp(v->name, "maxcalls")) {
385  if ((sscanf(v->value, "%30d", &ast_option_maxcalls) != 1) || (ast_option_maxcalls < 0)) {
387  }
388  } else if (!strcasecmp(v->name, "maxload")) {
389  double test[1];
390 
391  if (getloadavg(test, 1) == -1) {
392  ast_log(LOG_ERROR, "Cannot obtain load average on this system. 'maxload' option disabled.\n");
393  ast_option_maxload = 0.0;
394  } else if ((sscanf(v->value, "%30lf", &ast_option_maxload) != 1) || (ast_option_maxload < 0.0)) {
395  ast_option_maxload = 0.0;
396  }
397  /* Set the maximum amount of open files */
398  } else if (!strcasecmp(v->name, "maxfiles")) {
399  ast_option_maxfiles = atoi(v->value);
400  if (!ast_opt_remote) {
402  }
403  /* What user to run as */
404  } else if (!strcasecmp(v->name, "runuser")) {
406  /* What group to run as */
407  } else if (!strcasecmp(v->name, "rungroup")) {
409  } else if (!strcasecmp(v->name, "systemname")) {
411  } else if (!strcasecmp(v->name, "autosystemname")) {
412  if (ast_true(v->value)) {
413  if (!gethostname(hostname, sizeof(hostname) - 1)) {
415  } else {
418  }
419  ast_log(LOG_ERROR, "Cannot obtain hostname for this system. Using '%s' instead.\n", ast_config_AST_SYSTEM_NAME);
420  }
421  }
422  } else if (!strcasecmp(v->name, "languageprefix")) {
424  } else if (!strcasecmp(v->name, "defaultlanguage")) {
426  } else if (!strcasecmp(v->name, "lockmode")) {
427  if (!strcasecmp(v->value, "lockfile")) {
429  } else if (!strcasecmp(v->value, "flock")) {
431  } else {
432  ast_log(LOG_WARNING, "'%s' is not a valid setting for the lockmode option, "
433  "defaulting to 'lockfile'\n", v->value);
435  }
436 #if defined(HAVE_SYSINFO)
437  } else if (!strcasecmp(v->name, "minmemfree")) {
438  /* specify the minimum amount of free memory to retain. Asterisk should stop accepting new calls
439  * if the amount of free memory falls below this watermark */
440  if ((sscanf(v->value, "%30ld", &option_minmemfree) != 1) || (option_minmemfree < 0)) {
441  option_minmemfree = 0;
442  }
443 #endif
444  } else if (!strcasecmp(v->name, "entityid")) {
445  struct ast_eid tmp_eid;
446  if (!ast_str_to_eid(&tmp_eid, v->value)) {
447  ast_eid_default = tmp_eid;
448  } else {
449  ast_log(LOG_WARNING, "Invalid Entity ID '%s' provided\n", v->value);
450  }
451  } else if (!strcasecmp(v->name, "lightbackground")) {
453  } else if (!strcasecmp(v->name, "forceblackbackground")) {
455  } else if (!strcasecmp(v->name, "hideconnect")) {
457  } else if (!strcasecmp(v->name, "lockconfdir")) {
459  } else if (!strcasecmp(v->name, "stdexten")) {
460  /* Choose how to invoke the extensions.conf stdexten */
461  if (!strcasecmp(v->value, "gosub")) {
463  } else if (!strcasecmp(v->value, "macro")) {
465  } else {
467  "'%s' is not a valid setting for the stdexten option, defaulting to 'gosub'\n",
468  v->value);
470  }
471  } else if (!strcasecmp(v->name, "live_dangerously")) {
473  } else if (!strcasecmp(v->name, "hide_messaging_ami_events")) {
475  }
476  }
477  if (!ast_opt_remote) {
479  }
480 
481  option_debug += option_debug_new;
482  option_trace += option_trace_new;
483  option_verbose += option_verbose_new;
484 
485  ast_config_destroy(cfg);
486 }
#define MAX_LANGUAGE
Definition: channel.h:172
int ast_option_rtpusedynamic
Definition: options.c:88
int ast_option_maxfiles
Definition: options.c:81
int option_debug
Definition: options.c:69
int ast_option_maxcalls
Definition: options.c:79
double ast_option_maxload
Definition: options.c:77
unsigned int ast_option_rtpptdynamic
Definition: options.c:89
int option_verbose
Definition: options.c:67
struct ast_flags ast_options
Definition: options.c:61
unsigned int option_dtmfminduration
Definition: options.c:83
long option_minmemfree
Definition: options.c:86
int option_trace
Definition: options.c:71
@ AST_OPT_FLAG_HIGH_PRIORITY
Definition: options.h:48
@ AST_OPT_FLAG_HIDE_MESSAGING_AMI_EVENTS
Definition: options.h:90
@ AST_OPT_FLAG_TRANSCODE_VIA_SLIN
Definition: options.h:60
@ AST_OPT_FLAG_HIDE_CONSOLE_CONNECT
Definition: options.h:94
@ AST_OPT_FLAG_EXEC_INCLUDES
Definition: options.h:40
@ AST_OPT_FLAG_NO_COLOR
Definition: options.h:56
@ AST_OPT_FLAG_NO_FORK
Definition: options.h:42
@ AST_OPT_FLAG_REF_DEBUG
Definition: options.h:78
@ AST_OPT_FLAG_TRANSMIT_SILENCE
Definition: options.h:74
@ AST_OPT_FLAG_ALWAYS_FORK
Definition: options.h:80
@ AST_OPT_FLAG_QUIET
Definition: options.h:44
@ AST_OPT_FLAG_STDEXTEN_MACRO
Definition: options.h:62
@ AST_OPT_FLAG_CACHE_MEDIA_FRAMES
Definition: options.h:70
@ AST_OPT_FLAG_TIMESTAMP
Definition: options.h:68
@ AST_OPT_FLAG_LOCK_CONFIG_DIR
Definition: options.h:96
@ AST_OPT_FLAG_CACHE_RECORD_FILES
Definition: options.h:66
@ AST_OPT_FLAG_INIT_KEYS
Definition: options.h:50
@ AST_OPT_FLAG_CONSOLE
Definition: options.h:46
@ AST_OPT_FLAG_DONT_WARN
Definition: options.h:76
@ AST_OPT_FLAG_FORCE_BLACK_BACKGROUND
Definition: options.h:92
@ AST_OPT_FLAG_LIGHT_BACKGROUND
Definition: options.h:88
@ AST_OPT_FLAG_DUMP_CORE
Definition: options.h:64
@ AST_LOCK_TYPE_LOCKFILE
@ AST_LOCK_TYPE_FLOCK
void ast_set_lock_type(enum AST_LOCK_TYPE type)
Set the type of locks used by ast_lock_path()
Definition: main/app.c:2669
int getloadavg(double *list, int nelem)
#define CONFIG_STATUS_FILEMISSING
@ CONFIG_FLAG_NOREALTIME
int ast_parse_arg(const char *arg, enum ast_parse_flags flags, void *p_result,...)
The argument parsing routine.
Definition: main/config.c:3726
static char hostname[MAXHOSTNAMELEN]
Definition: logger.c:119
#define MAXHOSTNAMELEN
Definition: network.h:69
static struct _cfg_paths cfg_paths
Definition: options.c:128
char record_cache_dir[AST_CACHE_DIR_LEN]
Definition: options.c:96
#define AST_MIN_DTMF_DURATION
Definition: options.c:49
const char * ast_config_AST_RUN_DIR
Definition: options.c:162
char ast_defaultlanguage[MAX_LANGUAGE]
Definition: options.c:98
const char * ast_config_AST_SYSTEM_NAME
Definition: options.c:170
struct ast_eid ast_eid_default
Global EID.
Definition: options.c:93
const char * ast_config_AST_CONFIG_FILE
Definition: options.c:152
static void set_ulimit(int value)
Set maximum open files.
Definition: options.c:178
const char * ast_config_AST_CTL
Definition: options.c:175
#define ast_opt_remote
Definition: options.h:112
int ast_language_is_prefix
The following variable controls the layout of localized sound files. If 0, use the historical layout ...
Definition: file.c:67
#define AST_CACHE_DIR_LEN
Definition: options.h:32
void pbx_live_dangerously(int new_live_dangerously)
Enable/disable the execution of 'dangerous' functions from external protocols (AMI,...
static int live_dangerously
Set to true (non-zero) to globally allow all dangerous dialplan functions to run.
Definition: pbx_functions.c:46
#define AST_RTP_PT_FIRST_DYNAMIC
Definition: rtp_engine.h:92
int attribute_pure ast_true(const char *val)
Make sure something is true. Determine if a string containing a boolean value is "true"....
Definition: main/utils.c:2097
void ast_copy_string(char *dst, const char *src, size_t size)
Size-limited null-terminating string copy.
Definition: strings.h:406
char system_name[128]
Definition: options.c:121
char monitor_dir[PATH_MAX]
Definition: options.c:105
char ctl_perms[PATH_MAX]
Definition: options.c:122
char run_dir[PATH_MAX]
Definition: options.c:111
char config_dir[PATH_MAX]
Definition: options.c:102
char log_dir[PATH_MAX]
Definition: options.c:109
char key_dir[PATH_MAX]
Definition: options.c:112
char pid_path[PATH_MAX]
Definition: options.c:117
char sbin_dir[PATH_MAX]
Definition: options.c:116
char spool_dir[PATH_MAX]
Definition: options.c:104
char recording_dir[PATH_MAX]
Definition: options.c:106
char var_dir[PATH_MAX]
Definition: options.c:107
char ctl_group[PATH_MAX]
Definition: options.c:124
char run_group[PATH_MAX]
Definition: options.c:120
char data_dir[PATH_MAX]
Definition: options.c:108
char ctl_owner[PATH_MAX]
Definition: options.c:123
char socket_path[PATH_MAX]
Definition: options.c:118
char ctl_file[PATH_MAX]
Definition: options.c:125
char cache_dir[PATH_MAX]
Definition: options.c:101
char db_path[PATH_MAX]
Definition: options.c:115
char run_user[PATH_MAX]
Definition: options.c:119
char module_dir[PATH_MAX]
Definition: options.c:103
char agi_dir[PATH_MAX]
Definition: options.c:110
An Entity ID is essentially a MAC address, brief and unique.
Definition: utils.h:808
void ast_set_default_eid(struct ast_eid *eid)
Fill in an ast_eid with the default eid of this machine.
Definition: main/utils.c:2897
#define ast_set2_flag(p, value, flag)
Definition: utils.h:94
#define ast_clear_flag(p, flag)
Definition: utils.h:77
#define ast_set_flag(p, flag)
Definition: utils.h:70
int ast_str_to_eid(struct ast_eid *eid, const char *s)
Convert a string into an EID.
Definition: main/utils.c:2973

References _cfg_paths::agi_dir, AST_CACHE_DIR_LEN, ast_clear_flag, ast_config_AST_CONFIG_FILE, ast_config_AST_CTL, ast_config_AST_RUN_DIR, ast_config_AST_SYSTEM_NAME, ast_config_destroy(), ast_config_load2(), ast_copy_string(), ast_defaultlanguage, ast_eid_default, ast_language_is_prefix, AST_LOCK_TYPE_FLOCK, AST_LOCK_TYPE_LOCKFILE, ast_log, AST_MIN_DTMF_DURATION, AST_OPT_FLAG_ALWAYS_FORK, AST_OPT_FLAG_CACHE_MEDIA_FRAMES, AST_OPT_FLAG_CACHE_RECORD_FILES, AST_OPT_FLAG_CONSOLE, AST_OPT_FLAG_DONT_WARN, AST_OPT_FLAG_DUMP_CORE, AST_OPT_FLAG_EXEC_INCLUDES, AST_OPT_FLAG_FORCE_BLACK_BACKGROUND, AST_OPT_FLAG_HIDE_CONSOLE_CONNECT, AST_OPT_FLAG_HIDE_MESSAGING_AMI_EVENTS, AST_OPT_FLAG_HIGH_PRIORITY, AST_OPT_FLAG_INIT_KEYS, AST_OPT_FLAG_LIGHT_BACKGROUND, AST_OPT_FLAG_LOCK_CONFIG_DIR, AST_OPT_FLAG_NO_COLOR, AST_OPT_FLAG_NO_FORK, AST_OPT_FLAG_QUIET, AST_OPT_FLAG_REF_DEBUG, AST_OPT_FLAG_STDEXTEN_MACRO, AST_OPT_FLAG_TIMESTAMP, AST_OPT_FLAG_TRANSCODE_VIA_SLIN, AST_OPT_FLAG_TRANSMIT_SILENCE, ast_opt_remote, ast_option_maxcalls, ast_option_maxfiles, ast_option_maxload, ast_option_rtpptdynamic, ast_option_rtpusedynamic, ast_options, ast_parse_arg(), AST_RTP_PT_FIRST_DYNAMIC, ast_set2_flag, ast_set_default_eid(), ast_set_flag, ast_set_lock_type(), ast_str_to_eid(), ast_strlen_zero(), ast_true(), ast_variable_browse(), _cfg_paths::cache_dir, cfg_paths, _cfg_paths::config_dir, CONFIG_FLAG_NOREALTIME, CONFIG_STATUS_FILEINVALID, CONFIG_STATUS_FILEMISSING, CONFIG_STATUS_FILEUNCHANGED, _cfg_paths::ctl_file, _cfg_paths::ctl_group, _cfg_paths::ctl_owner, _cfg_paths::ctl_perms, _cfg_paths::data_dir, _cfg_paths::db_path, getloadavg(), hostname, _cfg_paths::key_dir, live_dangerously, _cfg_paths::log_dir, LOG_ERROR, LOG_WARNING, MAX_LANGUAGE, MAXHOSTNAMELEN, _cfg_paths::module_dir, _cfg_paths::monitor_dir, ast_variable::name, ast_variable::next, option_debug, option_dtmfminduration, option_minmemfree, option_trace, option_verbose, PARSE_IN_RANGE, PARSE_UINT32, pbx_live_dangerously(), _cfg_paths::pid_path, record_cache_dir, _cfg_paths::recording_dir, _cfg_paths::run_dir, _cfg_paths::run_group, _cfg_paths::run_user, _cfg_paths::sbin_dir, set_ulimit(), _cfg_paths::socket_path, _cfg_paths::spool_dir, _cfg_paths::system_name, ast_variable::value, and _cfg_paths::var_dir.

Referenced by main().

◆ load_astmm_phase_1()

void load_astmm_phase_1 ( void  )

Initialize malloc debug phase 1.

Note
Must be called first thing after forking.

Definition at line 1525 of file astmm.c.

1526 {
1527 }

Referenced by asterisk_daemon().

◆ load_astmm_phase_2()

void load_astmm_phase_2 ( void  )

Initialize malloc debug phase 2.

Definition at line 1529 of file astmm.c.

1530 {
1531 }

Referenced by asterisk_daemon().

◆ load_modules()

int load_modules ( void  )

Provided by loader.c

Definition at line 2338 of file loader.c.

2339 {
2340  struct load_order_entry *order;
2341  unsigned int load_count;
2342  struct load_order load_order;
2343  int res = 0;
2344  int modulecount = 0;
2345  int i;
2346  struct ast_module *cur;
2347 #ifdef AST_XML_DOCS
2348  struct ast_str *warning_msg;
2349  char deprecated_in[33];
2350  char removed_in[33];
2351  char replacement[129];
2352 #endif
2353  struct timeval start_time = ast_tvnow();
2354  struct timeval end_time;
2355  int64_t usElapsed;
2356 
2357  ast_verb(1, "Asterisk Dynamic Loader Starting:\n");
2358 
2359 #if defined(HAVE_PERMANENT_DLOPEN)
2361  info_list_obj_cmp_fn); /* must not be cleaned at shutdown */
2362  if (!info_list) {
2363  fprintf(stderr, "Module info list allocation failure.\n");
2364  return 1;
2365  }
2366 #endif
2367 
2370 
2373 
2375  if (res) {
2376  goto done;
2377  }
2378 
2380  if (res) {
2381  goto done;
2382  }
2383 
2384  load_count = 0;
2386  load_count++;
2387 
2388  if (load_count)
2389  ast_log(LOG_NOTICE, "%u modules will be loaded.\n", load_count);
2390 
2391  res = load_resource_list(&load_order, &modulecount);
2392  if (res == -1) {
2393  ast_log(LOG_WARNING, "Some non-required modules failed to load.\n");
2394  res = 0;
2395  }
2396 
2397 done:
2398  while ((order = AST_LIST_REMOVE_HEAD(&load_order, entry))) {
2399  ast_free(order->resource);
2400  ast_free(order);
2401  }
2402 
2403 #ifdef AST_XML_DOCS
2404  warning_msg = ast_str_create(512);
2405 #endif
2406 
2408 #ifdef AST_XML_DOCS
2409  char *mod_name = NULL;
2410  struct ast_xml_xpath_results *results;
2411 #endif
2412 
2413  if (!cur->flags.running || cur->flags.declined) {
2414  continue;
2415  }
2416 
2417 #ifdef AST_XML_DOCS
2418  mod_name = get_name_from_resource(cur->resource);
2419  if (!warning_msg || !mod_name) {
2420  /* If we can't allocate memory, we have bigger issues */
2421  ast_free(mod_name);
2422  continue;
2423  }
2424 
2425  /* Clear out the previous values */
2426  deprecated_in[0] = removed_in[0] = replacement[0] = 0;
2427 
2428  results = ast_xmldoc_query("/docs/module[@name='%s']", mod_name);
2429  if (results) {
2430  struct ast_xml_node *deprecated_node, *removed_node, *replacement_node;
2431  struct ast_xml_node *metadata_nodes = ast_xml_node_get_children(ast_xml_xpath_get_first_result(results));
2432 
2433  deprecated_node = ast_xml_find_element(metadata_nodes, "deprecated_in", NULL, NULL);
2434  if (deprecated_node) {
2435  const char *result_tmp = ast_xml_get_text(deprecated_node);
2436  if (!ast_strlen_zero(result_tmp)) {
2437  ast_copy_string(deprecated_in, result_tmp, sizeof(deprecated_in));
2438  }
2439  }
2440 
2441  removed_node = ast_xml_find_element(metadata_nodes, "removed_in", NULL, NULL);
2442  if (removed_node) {
2443  const char *result_tmp = ast_xml_get_text(removed_node);
2444  if (!ast_strlen_zero(result_tmp)) {
2445  ast_copy_string(removed_in, result_tmp, sizeof(removed_in));
2446  }
2447  }
2448 
2449  replacement_node = ast_xml_find_element(metadata_nodes, "replacement", NULL, NULL);
2450  if (replacement_node) {
2451  const char *result_tmp = ast_xml_get_text(replacement_node);
2452  if (!ast_strlen_zero(result_tmp)) {
2453  ast_copy_string(replacement, result_tmp, sizeof(replacement));
2454  }
2455  }
2456 
2457  ast_xml_xpath_results_free(results);
2458  }
2459 
2460  ast_str_reset(warning_msg);
2461 
2462  if (cur->info->support_level == AST_MODULE_SUPPORT_DEPRECATED || !ast_strlen_zero(deprecated_in)
2463  || !ast_strlen_zero(removed_in) || !ast_strlen_zero(replacement)) {
2464  int already_butted = 0;
2465 
2466  ast_str_append(&warning_msg, -1, "Module '%s' has been loaded", mod_name);
2467  if (!ast_strlen_zero(deprecated_in)) {
2468  ast_str_append(&warning_msg, -1, " but %s deprecated in Asterisk version %s",
2469  cur->info->support_level == AST_MODULE_SUPPORT_DEPRECATED ? "was" : "will be", deprecated_in);
2470  already_butted = 1;
2471  }
2472 
2473  if (!ast_strlen_zero(removed_in)) {
2474  ast_str_append(&warning_msg, -1, " %s will be removed in Asterisk version %s", already_butted ? "and" : "but", removed_in);
2475  } else {
2476  ast_str_append(&warning_msg, -1, " %s may be removed in a future release", already_butted ? "and" : "but");
2477  }
2478 
2479  ast_str_append(&warning_msg, -1, ".");
2480 
2481  if (!ast_strlen_zero(replacement)) {
2482  ast_str_append(&warning_msg, -1, " Its replacement is '%s'.", replacement);
2483  }
2484  }
2485 
2486  if (ast_str_strlen(warning_msg)) {
2487  ast_log(LOG_WARNING, "%s\n", ast_str_buffer(warning_msg));
2488  }
2489 
2490  ast_free(mod_name);
2491 #else
2493  ast_log(LOG_WARNING, "The deprecated module '%s' has been loaded and is running, it may be removed in a future version\n", cur->resource);
2494  }
2495 #endif
2496  }
2497 
2498 #ifdef AST_XML_DOCS
2499  ast_free(warning_msg);
2500 #endif
2501 
2503 
2504 
2505  for (i = 0; i < AST_VECTOR_SIZE(&startup_errors); i++) {
2506  char *str = AST_VECTOR_GET(&startup_errors, i);
2507 
2508  ast_log(LOG_ERROR, "%s", str);
2509  ast_free(str);
2510  }
2512 
2515 
2516  end_time = ast_tvnow();
2517  usElapsed = ast_tvdiff_us(end_time, start_time);
2518 
2519 #ifdef AST_XML_DOCS
2520  ast_debug(1, "Loader time with AST_XML_DOCS: %ld.%06ld\n", usElapsed / 1000000, usElapsed % 1000000);
2521 #else
2522  ast_debug(1, "Loader time without AST_XML_DOCS: %ld.%06ld\n", usElapsed / 1000000, usElapsed % 1000000);
2523 #endif
2524 
2525  return res;
2526 }
integer order
Definition: analys.c:66
const char * str
Definition: app_jack.c:147
@ AO2_ALLOC_OPT_LOCK_NOLOCK
Definition: astobj2.h:367
#define AST_DLLIST_LOCK(head)
Locks a list.
Definition: dlinkedlists.h:46
#define AST_DLLIST_UNLOCK(head)
Attempts to unlock a list.
Definition: dlinkedlists.h:123
#define AST_DLLIST_TRAVERSE(head, var, field)
Loops over (traverses) the entries in a list.
Definition: dlinkedlists.h:576
#define ast_verb(level,...)
#define AST_LIST_HEAD_INIT_NOLOCK(head)
Initializes a list head structure.
Definition: linkedlists.h:681
static int load_resource_list(struct load_order *load_order, int *mod_count)
Definition: loader.c:2101
static struct ast_vector_string startup_errors
Definition: loader.c:153
static struct ast_str * startup_error_builder
Definition: loader.c:154
static int loader_config_init(struct load_order *load_order)
Definition: loader.c:2214
static char * get_name_from_resource(const char *resource)
Definition: loader.c:157
static int loader_builtin_init(struct load_order *load_order)
Definition: loader.c:2179
@ AST_MODULE_SUPPORT_DEPRECATED
Definition: module.h:123
int ast_str_append(struct ast_str **buf, ssize_t max_len, const char *fmt,...)
Append to a thread local dynamic string.
Definition: strings.h:1117
char * ast_str_buffer(const struct ast_str *buf)
Returns the string buffer within the ast_str buf.
Definition: strings.h:739
void ast_str_reset(struct ast_str *buf)
Reset the content of a dynamic string. Useful before a series of ast_str_append.
Definition: strings.h:674
#define ast_str_create(init_len)
Create a malloc'ed dynamic length string.
Definition: strings.h:640
size_t ast_str_strlen(const struct ast_str *buf)
Returns the current length of the string stored within buf.
Definition: strings.h:711
enum ast_module_support_level support_level
Definition: module.h:416
unsigned int running
Definition: loader.c:320
unsigned int declined
Definition: loader.c:322
const struct ast_module_info * info
Definition: loader.c:294
char resource[0]
Definition: loader.c:333
struct ast_module::@392 flags
Support for dynamic strings.
Definition: strings.h:604
Definition: loader.c:1832
int done
Definition: test_amihooks.c:48
int64_t ast_tvdiff_us(struct timeval end, struct timeval start)
Computes the difference (in microseconds) between two struct timeval instances.
Definition: time.h:85
struct timeval ast_tvnow(void)
Returns current timeval. Meant to replace calls to gettimeofday().
Definition: time.h:157
#define AST_VECTOR_SIZE(vec)
Get the number of elements in a vector.
Definition: vector.h:609
#define AST_VECTOR_FREE(vec)
Deallocates this vector.
Definition: vector.h:174
#define AST_VECTOR_GET(vec, idx)
Get an element from a vector.
Definition: vector.h:680
struct ast_xml_node * ast_xml_xpath_get_first_result(struct ast_xml_xpath_results *results)
Return the first result node of an XPath query.
Definition: xml.c:389
struct ast_xml_node * ast_xml_node_get_children(struct ast_xml_node *node)
Get the node's children.
Definition: xml.c:369
struct ast_xml_node * ast_xml_find_element(struct ast_xml_node *root_node, const char *name, const char *attrname, const char *attrvalue)
Find a node element by name.
Definition: xml.c:276
void ast_xml_xpath_results_free(struct ast_xml_xpath_results *results)
Free the XPath results.
Definition: xml.c:399
const char * ast_xml_get_text(struct ast_xml_node *node)
Get an element content string.
Definition: xml.c:332
struct ast_xml_xpath_results * ast_xmldoc_query(const char *fmt,...)
Execute an XPath query on the loaded XML documentation.
Definition: xmldoc.c:2547

References AO2_ALLOC_OPT_LOCK_NOLOCK, ao2_container_alloc_list, ast_copy_string(), ast_debug, AST_DLLIST_LOCK, AST_DLLIST_TRAVERSE, AST_DLLIST_UNLOCK, ast_free, AST_LIST_HEAD_INIT_NOLOCK, AST_LIST_REMOVE_HEAD, AST_LIST_TRAVERSE, ast_log, AST_MODULE_SUPPORT_DEPRECATED, ast_str_append(), ast_str_buffer(), ast_str_create, ast_str_reset(), ast_str_strlen(), ast_strlen_zero(), ast_tvdiff_us(), ast_tvnow(), AST_VECTOR_FREE, AST_VECTOR_GET, AST_VECTOR_INIT, AST_VECTOR_SIZE, ast_verb, ast_xml_find_element(), ast_xml_get_text(), ast_xml_node_get_children(), ast_xml_xpath_get_first_result(), ast_xml_xpath_results_free(), ast_xmldoc_query(), ast_module::declined, done, ast_module::flags, get_name_from_resource(), ast_module::info, load_resource_list(), loader_builtin_init(), loader_config_init(), LOG_ERROR, LOG_NOTICE, LOG_WARNING, NULL, order, ast_module::resource, ast_module::running, startup_error_builder, startup_errors, str, and ast_module_info::support_level.

Referenced by asterisk_daemon().

◆ load_pbx()

int load_pbx ( void  )

Provided by pbx.c

Referenced by asterisk_daemon().

◆ load_pbx_app()

int load_pbx_app ( void  )

Provided by pbx_app.c

Definition at line 511 of file pbx_app.c.

512 {
515 
516  return 0;
517 }
static struct ast_cli_entry app_cli[]
Definition: pbx_app.c:501
static void unload_pbx_app(void)
Definition: pbx_app.c:506

References app_cli, ARRAY_LEN, ast_cli_register_multiple, ast_register_cleanup(), and unload_pbx_app().

Referenced by asterisk_daemon().

◆ load_pbx_builtins()

int load_pbx_builtins ( void  )

Provided by pbx_builtins.c

Definition at line 1607 of file pbx_builtins.c.

1608 {
1609  int x;
1610 
1611  /* Register builtin applications */
1612  for (x = 0; x < ARRAY_LEN(builtins); x++) {
1614  ast_log(LOG_ERROR, "Unable to register builtin application '%s'\n", builtins[x].name);
1615  return -1;
1616  }
1617  }
1618 
1620 
1621  return 0;
1622 }
static const char name[]
Definition: format_mp3.c:68
static SQLHSTMT execute(struct odbc_obj *obj, void *data, int silent)
Common execution function for SQL queries.
Definition: func_odbc.c:467
struct pbx_builtin builtins[]
static void unload_pbx_builtins(void)

References ARRAY_LEN, ast_log, ast_register_application2(), ast_register_cleanup(), builtins, execute(), LOG_ERROR, name, NULL, unload_pbx_builtins(), and ast_channel::x.

Referenced by asterisk_daemon().

◆ load_pbx_functions_cli()

int load_pbx_functions_cli ( void  )

Provided by pbx_functions.c

Definition at line 732 of file pbx_functions.c.

733 {
736 
737  return 0;
738 }
static void unload_pbx_functions_cli(void)
static struct ast_cli_entry acf_cli[]

References acf_cli, ARRAY_LEN, ast_cli_register_multiple, ast_register_cleanup(), and unload_pbx_functions_cli().

Referenced by asterisk_daemon().

◆ load_pbx_hangup_handler()

int load_pbx_hangup_handler ( void  )

Provided by pbx_hangup_handler.c

Definition at line 288 of file pbx_hangup_handler.c.

289 {
292 
293  return 0;
294 }
static struct ast_cli_entry cli[]
static void unload_pbx_hangup_handler(void)

References ARRAY_LEN, ast_cli_register_multiple, ast_register_cleanup(), cli, and unload_pbx_hangup_handler().

Referenced by asterisk_daemon().

◆ load_pbx_switch()

int load_pbx_switch ( void  )

Provided by pbx_switch.c

Definition at line 125 of file pbx_switch.c.

126 {
129 
130  return 0;
131 }
static void unload_pbx_switch(void)
Definition: pbx_switch.c:120
static struct ast_cli_entry sw_cli[]
Definition: pbx_switch.c:116

References ARRAY_LEN, ast_cli_register_multiple, ast_register_cleanup(), sw_cli, and unload_pbx_switch().

Referenced by asterisk_daemon().

◆ load_pbx_variables()

int load_pbx_variables ( void  )

Provided by pbx_variables.c

Definition at line 1283 of file pbx_variables.c.

1284 {
1285  int res = 0;
1286 
1291 
1292  return res;
1293 }
int pbx_builtin_setvar(struct ast_channel *chan, const char *data)
Parse and set a single channel variable, where the name and value are separated with an '=' character...
static struct ast_cli_entry vars_cli[]
static void unload_pbx_variables(void)
int pbx_builtin_setvar_multiple(struct ast_channel *chan, const char *vdata)
Parse and set multiple channel variables, where the pairs are separated by the ',' character,...

References ARRAY_LEN, ast_cli_register_multiple, ast_register_application2(), ast_register_cleanup(), NULL, pbx_builtin_setvar(), pbx_builtin_setvar_multiple(), unload_pbx_variables(), and vars_cli.

Referenced by asterisk_daemon().

◆ logger_queue_start()

void logger_queue_start ( void  )

Start the ast_queue_log() logger.

Provided by logger.c

Note
Called when the system is fully booted after startup so preloaded realtime modules can get up.

Definition at line 1940 of file logger.c.

1941 {
1942  /* Must not be called before the logger is initialized. */
1944 
1946  if (!queuelog_init) {
1948  queuelog_init = 1;
1950  ast_queue_log("NONE", "NONE", "NONE", "QUEUESTART", "%s", "");
1951  } else {
1953  }
1954 }
static int queuelog_init
Definition: logger.c:88
void ast_queue_log(const char *queuename, const char *callid, const char *agent, const char *event, const char *fmt,...)
Definition: logger.c:952
static void logger_queue_init(void)
Definition: logger.c:1905
#define ast_assert(a)
Definition: utils.h:734

References ast_assert, ast_queue_log(), AST_RWLIST_UNLOCK, AST_RWLIST_WRLOCK, logger_initialized, logger_queue_init(), and queuelog_init.

Referenced by ast_queue_log(), and asterisk_daemon().

◆ modules_shutdown()

int modules_shutdown ( void  )

Provided by loader.c

Note
Some resources, like timers, are started up dynamically, and thus may be still in use, even if all channels are dead. We must therefore check the usecount before asking modules to unload.

Definition at line 1182 of file loader.c.

1183 {
1184  struct ast_module *mod;
1185  int somethingchanged;
1186  int res;
1187 
1189 
1190  /*!\note Some resources, like timers, are started up dynamically, and thus
1191  * may be still in use, even if all channels are dead. We must therefore
1192  * check the usecount before asking modules to unload. */
1193  do {
1194  /* Reset flag before traversing the list */
1195  somethingchanged = 0;
1196 
1198  if (mod->usecount) {
1199  ast_debug(1, "Passing on %s: its use count is %d\n",
1200  mod->resource, mod->usecount);
1201  continue;
1202  }
1204  if (mod->flags.running && !mod->flags.declined && mod->info->unload) {
1205  ast_verb(1, "Unloading %s\n", mod->resource);
1206  mod->info->unload();
1207  }
1208  module_destroy(mod);
1209  somethingchanged = 1;
1210  }
1212  if (!somethingchanged) {
1214  if (mod->flags.keepuntilshutdown) {
1215  ast_module_unref(mod);
1216  mod->flags.keepuntilshutdown = 0;
1217  somethingchanged = 1;
1218  }
1219  }
1220  }
1221  } while (somethingchanged);
1222 
1223  res = AST_DLLIST_EMPTY(&module_list);
1225 
1226  return !res;
1227 }
#define AST_DLLIST_TRAVERSE_BACKWARDS_SAFE_BEGIN(head, var, field)
Loops safely over (traverses) the entries in a list.
Definition: dlinkedlists.h:888
#define AST_DLLIST_EMPTY(head)
Checks whether the specified list contains any entries.
Definition: dlinkedlists.h:469
#define AST_DLLIST_REMOVE_CURRENT(field)
Removes the current entry from a list during a traversal.
Definition: dlinkedlists.h:753
#define AST_DLLIST_TRAVERSE_BACKWARDS_SAFE_END
Closes a safe loop traversal block.
Definition: dlinkedlists.h:921
static void module_destroy(struct ast_module *mod)
Definition: loader.c:744
#define ast_module_unref(mod)
Release a reference to the module.
Definition: module.h:469
int(* unload)(void)
Definition: module.h:348
unsigned int keepuntilshutdown
Definition: loader.c:324
int usecount
Definition: loader.c:300

References ast_debug, AST_DLLIST_EMPTY, AST_DLLIST_LOCK, AST_DLLIST_REMOVE_CURRENT, AST_DLLIST_TRAVERSE, AST_DLLIST_TRAVERSE_BACKWARDS_SAFE_BEGIN, AST_DLLIST_TRAVERSE_BACKWARDS_SAFE_END, AST_DLLIST_UNLOCK, ast_module_unref, ast_verb, ast_module::declined, ast_module::flags, ast_module::info, ast_module::keepuntilshutdown, module_destroy(), ast_module::resource, ast_module::running, ast_module_info::unload, and ast_module::usecount.

Referenced by really_quit().

◆ set_asterisk_conf_path()

void set_asterisk_conf_path ( const char *  path)

Definition at line 200 of file options.c.

201 {
203 }
char config_file[PATH_MAX]
Definition: options.c:114

References ast_copy_string(), cfg_paths, and _cfg_paths::config_file.

Referenced by main().

◆ set_socket_path()

void set_socket_path ( const char *  path)

Definition at line 205 of file options.c.

206 {
208 }

References ast_copy_string(), cfg_paths, and _cfg_paths::socket_path.

Referenced by main().

◆ threadstorage_init()

void threadstorage_init ( void  )

Provided by threadstorage.c

Definition at line 35 of file threadstorage.c.

36 {
37 }

Referenced by asterisk_daemon().