Asterisk - The Open Source Telephony Project GIT-master-85241bd
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)
 
void ast_cli_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_refer_init (void)
 
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 1428 of file config_options.c.

1429{
1430#ifdef AST_XML_DOCS
1432 if (!(xmldocs = ast_xmldoc_build_documentation("configInfo"))) {
1433 ast_log(LOG_ERROR, "Couldn't build config documentation\n");
1434 return -1;
1435 }
1437#endif /* AST_XML_DOCS */
1438 return 0;
1439}
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:666
struct ao2_container * ast_xmldoc_build_documentation(const char *type)
Build the documentation for a particular source type.
Definition: xmldoc.c:2684

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:201
#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 5543 of file bridge.c.

5544{
5546
5548 return -1;
5549 }
5550
5552 if (!bridge_manager) {
5553 return -1;
5554 }
5555
5558 if (!bridges) {
5559 return -1;
5560 }
5562
5564
5566
5567 ast_manager_register_xml_core("BridgeTechnologyList", 0, manager_bridge_tech_list);
5568 ast_manager_register_xml_core("BridgeTechnologySuspend", 0, manager_bridge_tech_suspend);
5569 ast_manager_register_xml_core("BridgeTechnologyUnsuspend", 0, manager_bridge_tech_unsuspend);
5570
5571 return 0;
5572}
@ 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:5460
static int manager_bridge_tech_suspend(struct mansession *s, const struct message *m)
Definition: bridge.c:5450
static int manager_bridge_tech_unsuspend(struct mansession *s, const struct message *m)
Definition: bridge.c:5455
static struct ast_cli_entry bridge_cli[]
Definition: bridge.c:5404
static int bridge_sort_cmp(const void *obj_left, const void *obj_right, int flags)
Definition: bridge.c:4990
static void bridge_prnt_obj(void *v_obj, void *where, ao2_prnt_fn *prnt)
Definition: bridge.c:5513
static struct ao2_container * bridges
Definition: bridge.c:123
static void bridge_cleanup(void)
Definition: bridge.c:5529
static struct bridge_manager_controller * bridge_manager_create(void)
Definition: bridge.c:4951
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 2238 of file main/cli.c.

2239{
2243}
static void cli_shutdown(void)
Definition: main/cli.c:2227
static struct @332 shutdown_commands
static struct ast_cli_entry cli_cli[]
Definition: main/cli.c:2019
#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 8007 of file channel.c.

8008{
8011 if (!channels) {
8012 return -1;
8013 }
8015
8017
8019
8021
8023
8026
8027 return 0;
8028}
#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:7993
static int ast_channel_hash_cb(const void *obj, const int flags)
Definition: channel.c:7788
static struct external_vars ari_vars
Definition: channel.c:7832
static void prnt_channel_key(void *v_obj, void *where, ao2_prnt_fn *prnt)
Definition: channel.c:7810
static struct external_vars ami_vars
Definition: channel.c:7831
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:1428
#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_channels_init()

void ast_cli_channels_init ( void  )

Provided by cli.c

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

2246{
2249}
static void cli_channels_shutdown(void)
Definition: main/cli.c:2232
static struct ast_cli_entry cli_channels_cli[]
Definition: main/cli.c:2051

References ARRAY_LEN, ast_cli_register_multiple, ast_register_cleanup(), cli_channels_cli, and cli_channels_shutdown().

Referenced by asterisk_daemon().

◆ ast_cli_perms_init()

int ast_cli_perms_init ( int  reload)

Provided by cli.c

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

2106{
2107 struct ast_flags config_flags = { reload ? CONFIG_FLAG_FILEUNCHANGED : 0 };
2108 struct ast_config *cfg;
2109 char *cat = NULL;
2110 struct ast_variable *v;
2111 struct usergroup_cli_perm *user_group, *cp_entry;
2112 struct cli_perm *perm = NULL;
2113 struct passwd *pw;
2114 struct group *gr;
2115
2117 ast_log(LOG_NOTICE, "You must wait until last 'cli reload permissions' command finish\n");
2118 return 1;
2119 }
2120
2121 cfg = ast_config_load2(perms_config, "" /* core, can't reload */, config_flags);
2122 if (!cfg) {
2124 return 1;
2125 } else if (cfg == CONFIG_STATUS_FILEUNCHANGED) {
2127 return 0;
2128 }
2129
2130 /* free current structures. */
2132
2133 while ((cat = ast_category_browse(cfg, cat))) {
2134 if (!strcasecmp(cat, "general")) {
2135 /* General options */
2136 for (v = ast_variable_browse(cfg, cat); v; v = v->next) {
2137 if (!strcasecmp(v->name, "default_perm")) {
2138 cli_default_perm = (!strcasecmp(v->value, "permit")) ? 1: 0;
2139 }
2140 }
2141 continue;
2142 }
2143
2144 /* users or groups */
2145 gr = NULL, pw = NULL;
2146 if (cat[0] == '@') {
2147 /* This is a group */
2148 gr = getgrnam(&cat[1]);
2149 if (!gr) {
2150 ast_log (LOG_WARNING, "Unknown group '%s'\n", &cat[1]);
2151 continue;
2152 }
2153 } else {
2154 /* This is a user */
2155 pw = getpwnam(cat);
2156 if (!pw) {
2157 ast_log (LOG_WARNING, "Unknown user '%s'\n", cat);
2158 continue;
2159 }
2160 }
2161 user_group = NULL;
2162 /* Check for duplicates */
2164 AST_LIST_TRAVERSE(&cli_perms, cp_entry, list) {
2165 if ((pw && cp_entry->uid == pw->pw_uid) || (gr && cp_entry->gid == gr->gr_gid)) {
2166 /* if it is duplicated, just added this new settings, to
2167 the current list. */
2168 user_group = cp_entry;
2169 break;
2170 }
2171 }
2173
2174 if (!user_group) {
2175 /* alloc space for the new user config. */
2176 user_group = ast_calloc(1, sizeof(*user_group));
2177 if (!user_group) {
2178 continue;
2179 }
2180 user_group->uid = (pw ? pw->pw_uid : -1);
2181 user_group->gid = (gr ? gr->gr_gid : -1);
2182 user_group->perms = ast_calloc(1, sizeof(*user_group->perms));
2183 if (!user_group->perms) {
2184 ast_free(user_group);
2185 continue;
2186 }
2187 }
2188 for (v = ast_variable_browse(cfg, cat); v; v = v->next) {
2189 if (ast_strlen_zero(v->value)) {
2190 /* we need to check this condition cause it could break security. */
2191 ast_log(LOG_WARNING, "Empty permit/deny option in user '%s'\n", cat);
2192 continue;
2193 }
2194 if (!strcasecmp(v->name, "permit")) {
2195 perm = ast_calloc(1, sizeof(*perm));
2196 if (perm) {
2197 perm->permit = 1;
2198 perm->command = ast_strdup(v->value);
2199 }
2200 } else if (!strcasecmp(v->name, "deny")) {
2201 perm = ast_calloc(1, sizeof(*perm));
2202 if (perm) {
2203 perm->permit = 0;
2204 perm->command = ast_strdup(v->value);
2205 }
2206 } else {
2207 /* up to now, only 'permit' and 'deny' are possible values. */
2208 ast_log(LOG_WARNING, "Unknown '%s' option\n", v->name);
2209 continue;
2210 }
2211 if (perm) {
2212 /* Added the permission to the user's list. */
2213 AST_LIST_INSERT_TAIL(user_group->perms, perm, list);
2214 perm = NULL;
2215 }
2216 }
2218 AST_RWLIST_INSERT_TAIL(&cli_perms, user_group, list);
2220 }
2221
2222 ast_config_destroy(cfg);
2224 return 0;
2225}
#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
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:3321
char * ast_category_browse(struct ast_config *config, const char *prev_name)
Browse categories.
Definition: extconf.c:3326
#define CONFIG_STATUS_FILEUNCHANGED
void ast_config_destroy(struct ast_config *cfg)
Destroys a config.
Definition: extconf.c:1289
struct ast_variable * ast_variable_browse(const struct ast_config *config, const char *category_name)
Definition: extconf.c:1215
@ CONFIG_FLAG_FILEUNCHANGED
#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:190
#define ast_mutex_trylock(a)
Definition: lock.h:191
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:2089
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 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
static ast_cond_t change_pending
Flag for the queue.
Definition: devicestate.c:214
#define ast_pthread_create_background(a, b, c, d)
Definition: utils.h:592

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 */
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.
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.
@ TPS_REF_DEFAULT
return a reference to a taskprocessor, create one if it does not exist
Definition: taskprocessor.h:76

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 2051 of file file.c.

2052{
2057 return 0;
2058}
static void file_shutdown(void)
Definition: file.c:2044
static struct ast_cli_entry cli_file[]
Definition: file.c:2040
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 1139 of file core_local.c.

1140{
1142 return -1;
1143 }
1144
1146 return -1;
1147 }
1148
1150 return -1;
1151 }
1152
1154 return -1;
1155 }
1157
1159 if (!locals) {
1160 return -1;
1161 }
1162
1163 /* Make sure we can register our channel type */
1165 ast_log(LOG_ERROR, "Unable to register channel class 'Local'\n");
1166
1167 return -1;
1168 }
1171
1173 return 0;
1174}
#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:1074
static int locals_cmp_cb(void *obj, void *arg, int flags)
Definition: core_local.c:1111
static struct ast_channel_tech local_tech
Definition: core_local.c:173
static struct ast_cli_entry cli_local[]
Definition: core_local.c:1070
static void local_shutdown(void)
Definition: core_local.c:1121
static struct ao2_container * locals
Definition: core_local.c:138
struct stasis_message_type * ast_local_bridge_type(void)
Message type for when two local channel halves are bridged together.
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.
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
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:224
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
struct @373 msg_techs
Vector of message technologies.
static struct ast_custom_function msg_function
Definition: main/message.c:296
static struct ast_taskprocessor * msg_q_tp
Definition: main/message.c:280
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
struct @374 msg_handlers
Vector of received message handlers.
static int action_messagesend(struct mansession *s, const struct message *m)
static struct ast_custom_function msg_data_function
Definition: main/message.c:307
#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:617

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:167

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 1566 of file loader.c.

1567{
1568 struct reload_queue_item *item;
1569
1570 modules_loaded = 1;
1571
1573
1574 if (do_full_reload) {
1575 do_full_reload = 0;
1577 ast_log(LOG_NOTICE, "Executing deferred reload request.\n");
1579 return;
1580 }
1581
1583 ast_log(LOG_NOTICE, "Executing deferred reload request for module '%s'.\n", item->module);
1584 ast_module_reload(item->module);
1585 ast_free(item);
1586 }
1587
1589}
#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:1721
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_refer_init()

int ast_refer_init ( void  )

Provided by refer.c

Definition at line 529 of file refer.c.

530{
532 if (AST_VECTOR_INIT(&refer_techs, 8)) {
533 return -1;
534 }
536 return 0;
537}
static void refer_shutdown(void)
Definition: refer.c:513
struct @381 refer_techs
Vector of refer technologies.
static ast_rwlock_t refer_techs_lock
Lock for refer_techs vector.
Definition: refer.c:77

References ast_register_cleanup(), ast_rwlock_init, AST_VECTOR_INIT, refer_shutdown(), refer_techs, and refer_techs_lock.

Referenced by asterisk_daemon().

◆ ast_rtp_engine_init()

int ast_rtp_engine_init ( void  )

initializes the rtp engine arrays

Definition at line 3779 of file rtp_engine.c.

3780{
3783
3784 rtp_topic = stasis_topic_create("rtp:all");
3785 if (!rtp_topic) {
3786 return -1;
3787 }
3791
3792 /* Define all the RTP mime types available */
3793 set_next_mime_type(ast_format_g723, 0, "audio", "G723", 8000);
3794 set_next_mime_type(ast_format_gsm, 0, "audio", "GSM", 8000);
3795 set_next_mime_type(ast_format_ulaw, 0, "audio", "PCMU", 8000);
3796 set_next_mime_type(ast_format_ulaw, 0, "audio", "G711U", 8000);
3797 set_next_mime_type(ast_format_alaw, 0, "audio", "PCMA", 8000);
3798 set_next_mime_type(ast_format_alaw, 0, "audio", "G711A", 8000);
3799 set_next_mime_type(ast_format_g726, 0, "audio", "G726-32", 8000);
3800 set_next_mime_type(ast_format_adpcm, 0, "audio", "DVI4", 8000);
3801 set_next_mime_type(ast_format_slin, 0, "audio", "L16", 8000);
3802 set_next_mime_type(ast_format_slin16, 0, "audio", "L16", 16000);
3803 set_next_mime_type(ast_format_slin16, 0, "audio", "L16-256", 16000);
3804 set_next_mime_type(ast_format_slin12, 0, "audio", "L16", 12000);
3805 set_next_mime_type(ast_format_slin24, 0, "audio", "L16", 24000);
3806 set_next_mime_type(ast_format_slin32, 0, "audio", "L16", 32000);
3807 set_next_mime_type(ast_format_slin44, 0, "audio", "L16", 44100);
3808 set_next_mime_type(ast_format_slin48, 0, "audio", "L16", 48000);
3809 set_next_mime_type(ast_format_slin96, 0, "audio", "L16", 96000);
3810 set_next_mime_type(ast_format_slin192, 0, "audio", "L16", 192000);
3811 set_next_mime_type(ast_format_lpc10, 0, "audio", "LPC", 8000);
3812 set_next_mime_type(ast_format_g729, 0, "audio", "G729", 8000);
3813 set_next_mime_type(ast_format_g729, 0, "audio", "G729A", 8000);
3814 set_next_mime_type(ast_format_g729, 0, "audio", "G.729", 8000);
3815 set_next_mime_type(ast_format_speex, 0, "audio", "speex", 8000);
3816 set_next_mime_type(ast_format_speex16, 0, "audio", "speex", 16000);
3817 set_next_mime_type(ast_format_speex32, 0, "audio", "speex", 32000);
3818 set_next_mime_type(ast_format_ilbc, 0, "audio", "iLBC", 8000);
3819 /* this is the sample rate listed in the RTP profile for the G.722 codec, *NOT* the actual sample rate of the media stream */
3820 set_next_mime_type(ast_format_g722, 0, "audio", "G722", 8000);
3821 set_next_mime_type(ast_format_g726_aal2, 0, "audio", "AAL2-G726-32", 8000);
3822 /* we need all possible dtmf/bitrate combinations or ast_rtp_codecs_payloads_set_rtpmap_type_rate will not examine it */
3823 set_next_mime_type(NULL, AST_RTP_DTMF, "audio", "telephone-event", 8000);
3824 set_next_mime_type(NULL, AST_RTP_DTMF, "audio", "telephone-event", 16000);
3825 set_next_mime_type(NULL, AST_RTP_DTMF, "audio", "telephone-event", 24000);
3826 set_next_mime_type(NULL, AST_RTP_DTMF, "audio", "telephone-event", 32000);
3827 set_next_mime_type(NULL, AST_RTP_DTMF, "audio", "telephone-event", 48000);
3828 set_next_mime_type(NULL, AST_RTP_CISCO_DTMF, "audio", "cisco-telephone-event", 8000);
3829 set_next_mime_type(NULL, AST_RTP_CN, "audio", "CN", 8000);
3830 set_next_mime_type(ast_format_jpeg, 0, "video", "JPEG", 90000);
3831 set_next_mime_type(ast_format_png, 0, "video", "PNG", 90000);
3832 set_next_mime_type(ast_format_h261, 0, "video", "H261", 90000);
3833 set_next_mime_type(ast_format_h263, 0, "video", "H263", 90000);
3834 set_next_mime_type(ast_format_h263p, 0, "video", "h263-1998", 90000);
3835 set_next_mime_type(ast_format_h264, 0, "video", "H264", 90000);
3836 set_next_mime_type(ast_format_h265, 0, "video", "H265", 90000);
3837 set_next_mime_type(ast_format_mp4, 0, "video", "MP4V-ES", 90000);
3838 set_next_mime_type(ast_format_t140_red, 0, "text", "RED", 1000);
3839 set_next_mime_type(ast_format_t140, 0, "text", "T140", 1000);
3840 set_next_mime_type(ast_format_siren7, 0, "audio", "G7221", 16000);
3841 set_next_mime_type(ast_format_siren14, 0, "audio", "G7221", 32000);
3842 set_next_mime_type(ast_format_g719, 0, "audio", "G719", 48000);
3843 /* Opus, VP8, and VP9 */
3844 set_next_mime_type(ast_format_opus, 0, "audio", "opus", 48000);
3845 set_next_mime_type(ast_format_vp8, 0, "video", "VP8", 90000);
3846 set_next_mime_type(ast_format_vp9, 0, "video", "VP9", 90000);
3847
3848 /* Define the static rtp payload mappings */
3850 #ifdef USE_DEPRECATED_G726
3851 add_static_payload(2, ast_format_g726, 0);/* Technically this is G.721, but if Cisco can do it, so can we... */
3852 #endif
3855 add_static_payload(5, ast_format_adpcm, 0);/* 8 kHz */
3856 add_static_payload(6, ast_format_adpcm, 0); /* 16 kHz */
3860 add_static_payload(10, ast_format_slin, 0); /* 2 channels */
3861 add_static_payload(11, ast_format_slin, 0); /* 1 channel */
3863 add_static_payload(16, ast_format_adpcm, 0); /* 11.025 kHz */
3864 add_static_payload(17, ast_format_adpcm, 0); /* 22.050 kHz */
3866 add_static_payload(19, NULL, AST_RTP_CN); /* Also used for CN */
3870
3871 /*
3872 * Dynamic payload types - Even when dynamically assigning them we'll fall
3873 * back to using the statically declared values as the default number.
3874 */
3877
3884 add_static_payload(105, ast_format_t140_red, 0); /* Real time text chat (with redundancy encoding) */
3885 add_static_payload(106, ast_format_t140, 0); /* Real time text chat */
3889
3893
3897 add_static_payload(118, ast_format_slin16, 0); /* 16 Khz signed linear */
3899
3900 add_static_payload(121, NULL, AST_RTP_CISCO_DTMF); /* Must be type 121 */
3907 /* payload types above 127 are not valid */
3908
3916
3917 /*
3918 * Normnally a core module should call ast_register_cleanup,
3919 * which doesn't run if any module fails to unload. This
3920 * prevents resources being pulled out from under a running
3921 * module and possibly causing a segfault. In this case however,
3922 * the only thing we're cleaning up are the registrations of the
3923 * debug categories.
3924 */
3926
3927 return 0;
3928}
int ast_register_atexit(void(*func)(void))
Register a function to be executed before Asterisk exits.
Definition: clicompat.c:13
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_sent_type(void)
Message type for an RTCP message sent from this Asterisk instance.
struct stasis_message_type * ast_rtp_rtcp_received_type(void)
Message type for an RTCP message received from some external source.
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:3715
static uintmax_t debug_category_rtcp_id
Definition: rtp_engine.c:3694
static struct stasis_topic * rtp_topic
Stasis Message Bus API topic for RTP related messages
Definition: rtp_engine.c:277
static void rtp_engine_shutdown(void)
Definition: rtp_engine.c:3734
static void add_static_payload(int payload, struct ast_format *format, int rtp_code)
Definition: rtp_engine.c:3322
static ast_rwlock_t static_RTP_PT_lock
Definition: rtp_engine.c:274
static uintmax_t debug_category_rtcp_packet_id
Definition: rtp_engine.c:3701
static uintmax_t debug_category_ice_id
Definition: rtp_engine.c:3722
static void rtp_engine_atexit(void)
Definition: rtp_engine.c:3765
static uintmax_t debug_category_rtp_id
Definition: rtp_engine.c:3680
static uintmax_t debug_category_rtp_packet_id
Definition: rtp_engine.c:3687
static uintmax_t debug_category_dtls_id
Definition: rtp_engine.c:3708
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:3294
static ast_rwlock_t mime_types_lock
Definition: rtp_engine.c:260
#define AST_LOG_CATEGORY_ICE
Definition: rtp_engine.h:2990
#define AST_RTP_DTMF
Definition: rtp_engine.h:291
#define AST_LOG_CATEGORY_RTCP_PACKET
Definition: rtp_engine.h:2984
#define AST_LOG_CATEGORY_DTLS
Definition: rtp_engine.h:2986
#define AST_LOG_CATEGORY_RTCP
Definition: rtp_engine.h:2982
#define AST_LOG_CATEGORY_RTP
Definition: rtp_engine.h:2978
#define AST_LOG_CATEGORY_RTP_PACKET
Definition: rtp_engine.h:2980
#define AST_LOG_CATEGORY_DTLS_PACKET
Definition: rtp_engine.h:2988
#define AST_RTP_CN
Definition: rtp_engine.h:293
#define AST_RTP_CISCO_DTMF
Definition: rtp_engine.h:295

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_atexit(), 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_atexit(), 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));
581
582 /*
583 * Normnally a core module should call ast_register_cleanup
584 * which doesn't run if any module fails to unload. This
585 * prevents resources being pulled out from under a running
586 * module and ppossibly causing a segfault. In this case however,
587 * the only thing we're cleaning up is the cli command and
588 * the registers of the debug categories.
589 */
591
592}
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_atexit(), 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
220end:
221 if (vt100compat) {
222 /* Make commands show up in nice colors */
224 snprintf(enddata, sizeof(enddata), "%c[%dm", ESC, COLOR_BLACK);
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:111
#define ast_opt_no_color
Definition: options.h:116
#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 1482 of file test.c.

1483{
1484#ifdef TEST_FRAMEWORK
1485 ast_register_cleanup(test_cleanup);
1486
1487 /* Create stasis topic */
1488 test_suite_topic = stasis_topic_create("testsuite:all");
1489 if (!test_suite_topic) {
1490 return -1;
1491 }
1492
1493 if (STASIS_MESSAGE_TYPE_INIT(ast_test_suite_message_type) != 0) {
1494 return -1;
1495 }
1496
1497 AST_TEST_REGISTER(test_registrations);
1498
1499 /* Register cli commands */
1500 ast_cli_register_multiple(test_cli, ARRAY_LEN(test_cli));
1501#endif
1502
1503 return 0;
1504}
#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 3047 of file xmldoc.c.

3048{
3049 return xmldoc_load_documentation(1);
3050}
static int xmldoc_load_documentation(int first_time)
Definition: xmldoc.c:2920

References xmldoc_load_documentation().

Referenced by asterisk_daemon().

◆ astdb_init()

int astdb_init ( void  )

Provided by db.c

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

1229{
1231
1232 if (db_init()) {
1233 return -1;
1234 }
1235
1237 return -1;
1238 }
1239
1247 return 0;
1248}
static int manager_dbdel(struct mansession *s, const struct message *m)
Definition: main/db.c:1095
static int manager_db_tree_get(struct mansession *s, const struct message *m)
Definition: main/db.c:1029
static int manager_dbdeltree(struct mansession *s, const struct message *m)
Definition: main/db.c:1120
static struct ast_cli_entry cli_database[]
Definition: main/db.c:952
static int manager_dbget(struct mansession *s, const struct message *m)
Definition: main/db.c:987
static int db_init(void)
Definition: main/db.c:297
static int manager_dbput(struct mansession *s, const struct message *m)
Definition: main/db.c:962
static void * db_sync_thread(void *data)
Definition: main/db.c:1170
static ast_cond_t dbcond
Definition: main/db.c:121
static pthread_t syncthread
Definition: main/db.c:123
static void astdb_atexit(void)
Definition: main/db.c:1203
#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_db_tree_get(), 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::@400 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 2245 of file logger.c.

2246{
2247 struct logchannel *f = NULL;
2248
2250
2253
2255
2256 /* Stop logger thread */
2261
2263 pthread_join(logthread, NULL);
2264 }
2265
2267
2268 if (qlog) {
2269 fclose(qlog);
2270 qlog = NULL;
2271 }
2272
2273 while ((f = AST_LIST_REMOVE_HEAD(&logchannels, list))) {
2274 if (f->fileptr && (f->fileptr != stdout) && (f->fileptr != stderr)) {
2275 fclose(f->fileptr);
2276 f->fileptr = NULL;
2277 }
2278 ast_free(f);
2279 }
2280
2282
2283 closelog(); /* syslog */
2284
2286}
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:203
static int callid_group_remove_filters(void)
Definition: logger.c:1714
static struct ast_custom_function log_group_function
Definition: logger.c:1801
static int close_logger_thread
Definition: logger.c:199
static FILE * qlog
Definition: logger.c:201
static int logger_initialized
Definition: logger.c:89
static pthread_t logthread
Definition: logger.c:197
static ast_cond_t logcond
Definition: logger.c:198
static struct ast_cli_entry cli_logger[]
Definition: logger.c:1891
int ast_logger_category_unload(void)
Unload system wide logger category functionality.
int ast_custom_function_unregister(struct ast_custom_function *acf)
Unregister a custom function.
struct logchannel::@368 list
FILE * fileptr
Definition: logger.c:152

References ARRAY_LEN, ast_cli_unregister_multiple(), ast_cond_signal, ast_custom_function_unregister(), 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, callid_group_remove_filters(), cli_logger, close_logger_thread, logchannel::fileptr, logchannel::list, log_group_function, 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
int ast_sched_start_thread(struct ast_sched_context *con)
Start a thread for processing scheduler entries.
Definition: sched.c:197
struct ast_sched_context * ast_sched_context_create(void)
Create a scheduler context.
Definition: sched.c:238
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 2202 of file logger.c.

2203{
2204 int res;
2205 /* auto rotate if sig SIGXFSZ comes a-knockin */
2206 sigaction(SIGXFSZ, &handle_SIGXFSZ, NULL);
2207
2208 /* Re-initialize the logmsgs mutex. The recursive mutex can be accessed prior
2209 * to Asterisk being forked into the background, which can cause the thread
2210 * ID tracked by the underlying pthread mutex to be different than the ID of
2211 * the thread that unlocks the mutex. Since init_logger is called after the
2212 * fork, it is safe to initialize the mutex here for future accesses.
2213 */
2217
2218 /* start logger thread */
2221 return -1;
2222 }
2223
2224 /* register the logger cli commands */
2227
2229
2230 /* create log channels */
2232 res = init_logger_chain(NULL);
2236 if (res) {
2237 ast_log(LOG_ERROR, "Errors detected in logger.conf. Default console logging is being used.\n");
2238 }
2239
2241
2242 return 0;
2243}
#define ast_cond_destroy(cond)
Definition: lock.h:202
#define ast_mutex_init(pmutex)
Definition: lock.h:186
#define ast_mutex_destroy(a)
Definition: lock.h:188
static int init_logger_chain(const char *altconf)
Read config, setup channels.
Definition: logger.c:759
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:2453
static struct sigaction handle_SIGXFSZ
Definition: logger.c:1910
static void * logger_thread(void *data)
Actual logging thread.
Definition: logger.c:2097
void ast_verb_update(void)
Re-evaluate the system max verbosity level (ast_verb_sys_level).
Definition: logger.c:2584
int ast_logger_category_load(void)
Load/Initialize system wide logger category functionality.
#define ast_custom_function_register(acf)
Register a custom function.
Definition: pbx.h:1558
ast_mutex_t lock
Definition: logger.c:196
#define ast_pthread_create(a, b, c, d)
Definition: utils.h:584
int ast_mkdir(const char *path, int mode)
Recursively create directory path.
Definition: utils.c:2479

References ARRAY_LEN, ast_cli_register_multiple, ast_cond_destroy, ast_cond_init, ast_config_AST_LOG_DIR, ast_custom_function_register, 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, log_group_function, 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)) {
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 } else if (!strcasecmp(v->name, "sounds_search_custom_dir")) {
477 }
478 }
479 if (!ast_opt_remote) {
482 }
483
484 option_debug += option_debug_new;
485 option_trace += option_trace_new;
486 option_verbose += option_verbose_new;
487
489}
#define MAX_LANGUAGE
Definition: channel.h:172
static int live_dangerously
Set to true (non-zero) to globally allow all dangerous AMI actions to run.
Definition: manager.c:1658
void astman_live_dangerously(int new_live_dangerously)
Enable/disable the inclusion of 'dangerous' configurations outside of the ast_config_AST_CONFIG_DIR.
Definition: manager.c:3850
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:92
@ AST_OPT_FLAG_TRANSCODE_VIA_SLIN
Definition: options.h:60
@ AST_OPT_FLAG_HIDE_CONSOLE_CONNECT
Definition: options.h:96
@ 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:80
@ AST_OPT_FLAG_TRANSMIT_SILENCE
Definition: options.h:74
@ AST_OPT_FLAG_ALWAYS_FORK
Definition: options.h:82
@ 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:98
@ 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:94
@ AST_OPT_FLAG_LIGHT_BACKGROUND
Definition: options.h:90
@ AST_OPT_FLAG_DUMP_CORE
Definition: options.h:64
@ AST_OPT_FLAG_SOUNDS_SEARCH_CUSTOM
Definition: options.h:78
@ 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:2599
int getloadavg(double *list, int nelem)
#define CONFIG_STATUS_FILEMISSING
#define CONFIG_STATUS_FILEINVALID
int ast_parse_arg(const char *arg, enum ast_parse_flags flags, void *p_result,...)
The argument parsing routine.
Definition: main/config.c:3827
@ CONFIG_FLAG_NOREALTIME
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:114
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,...
#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: utils.c:2199
void ast_copy_string(char *dst, const char *src, size_t size)
Size-limited null-terminating string copy.
Definition: strings.h:425
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:813
void ast_set_default_eid(struct ast_eid *eid)
Fill in an ast_eid with the default eid of this machine.
Definition: utils.c:3001
#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: utils.c:3077

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_SOUNDS_SEARCH_CUSTOM, 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(), astman_live_dangerously(), _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 2508 of file loader.c.

2509{
2510 struct load_order_entry *order;
2511 unsigned int load_count;
2512 struct load_order load_order;
2513 int res = 0;
2514 int modulecount = 0;
2515 int i;
2516 struct ast_module *cur;
2517#ifdef AST_XML_DOCS
2518 struct ast_str *warning_msg;
2519 char deprecated_in[33];
2520 char removed_in[33];
2521 char replacement[129];
2522#endif
2523 struct timeval start_time = ast_tvnow();
2524 struct timeval end_time;
2525 int64_t usElapsed;
2526
2527 ast_verb(1, "Asterisk Dynamic Loader Starting:\n");
2528
2529#if defined(HAVE_PERMANENT_DLOPEN)
2531 info_list_obj_cmp_fn); /* must not be cleaned at shutdown */
2532 if (!info_list) {
2533 fprintf(stderr, "Module info list allocation failure.\n");
2534 return 1;
2535 }
2536#endif
2537
2540
2543
2545 if (res) {
2546 goto done;
2547 }
2548
2550 if (res) {
2551 goto done;
2552 }
2553
2554 load_count = 0;
2556 load_count++;
2557
2558 if (load_count)
2559 ast_log(LOG_NOTICE, "%u modules will be loaded.\n", load_count);
2560
2561 res = load_resource_list(&load_order, &modulecount);
2562 if (res == -1) {
2563 ast_log(LOG_WARNING, "Some non-required modules failed to load.\n");
2564 res = 0;
2565 }
2566
2567done:
2569 ast_free(order->resource);
2570 ast_free(order);
2571 }
2572
2573#ifdef AST_XML_DOCS
2574 warning_msg = ast_str_create(512);
2575#endif
2576
2578#ifdef AST_XML_DOCS
2579 char *mod_name = NULL;
2580 struct ast_xml_xpath_results *results;
2581#endif
2582
2583 if (!cur->flags.running || cur->flags.declined) {
2584 continue;
2585 }
2586
2587#ifdef AST_XML_DOCS
2588 mod_name = get_name_from_resource(cur->resource);
2589 if (!warning_msg || !mod_name) {
2590 /* If we can't allocate memory, we have bigger issues */
2591 ast_free(mod_name);
2592 continue;
2593 }
2594
2595 /* Clear out the previous values */
2596 deprecated_in[0] = removed_in[0] = replacement[0] = 0;
2597
2598 results = ast_xmldoc_query("/docs/module[@name='%s']", mod_name);
2599 if (results) {
2600 struct ast_xml_node *deprecated_node, *removed_node, *replacement_node;
2601 struct ast_xml_node *metadata_nodes = ast_xml_node_get_children(ast_xml_xpath_get_first_result(results));
2602
2603 deprecated_node = ast_xml_find_element(metadata_nodes, "deprecated_in", NULL, NULL);
2604 if (deprecated_node) {
2605 const char *result_tmp = ast_xml_get_text(deprecated_node);
2606 if (!ast_strlen_zero(result_tmp)) {
2607 ast_copy_string(deprecated_in, result_tmp, sizeof(deprecated_in));
2608 }
2609 }
2610
2611 removed_node = ast_xml_find_element(metadata_nodes, "removed_in", NULL, NULL);
2612 if (removed_node) {
2613 const char *result_tmp = ast_xml_get_text(removed_node);
2614 if (!ast_strlen_zero(result_tmp)) {
2615 ast_copy_string(removed_in, result_tmp, sizeof(removed_in));
2616 }
2617 }
2618
2619 replacement_node = ast_xml_find_element(metadata_nodes, "replacement", NULL, NULL);
2620 if (replacement_node) {
2621 const char *result_tmp = ast_xml_get_text(replacement_node);
2622 if (!ast_strlen_zero(result_tmp)) {
2623 ast_copy_string(replacement, result_tmp, sizeof(replacement));
2624 }
2625 }
2626
2628 }
2629
2630 ast_str_reset(warning_msg);
2631
2632 if (cur->info->support_level == AST_MODULE_SUPPORT_DEPRECATED || !ast_strlen_zero(deprecated_in)
2633 || !ast_strlen_zero(removed_in) || !ast_strlen_zero(replacement)) {
2634 int already_butted = 0;
2635
2636 ast_str_append(&warning_msg, -1, "Module '%s' has been loaded", mod_name);
2637 if (!ast_strlen_zero(deprecated_in)) {
2638 ast_str_append(&warning_msg, -1, " but %s deprecated in Asterisk version %s",
2639 cur->info->support_level == AST_MODULE_SUPPORT_DEPRECATED ? "was" : "will be", deprecated_in);
2640 already_butted = 1;
2641 }
2642
2643 if (!ast_strlen_zero(removed_in)) {
2644 ast_str_append(&warning_msg, -1, " %s will be removed in Asterisk version %s", already_butted ? "and" : "but", removed_in);
2645 } else {
2646 ast_str_append(&warning_msg, -1, " %s may be removed in a future release", already_butted ? "and" : "but");
2647 }
2648
2649 ast_str_append(&warning_msg, -1, ".");
2650
2651 if (!ast_strlen_zero(replacement)) {
2652 ast_str_append(&warning_msg, -1, " Its replacement is '%s'.", replacement);
2653 }
2654 }
2655
2656 if (ast_str_strlen(warning_msg)) {
2657 ast_log(LOG_WARNING, "%s\n", ast_str_buffer(warning_msg));
2658 }
2659
2660 ast_free(mod_name);
2661#else
2663 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);
2664 }
2665#endif
2666 }
2667
2668#ifdef AST_XML_DOCS
2669 ast_free(warning_msg);
2670#endif
2671
2673
2674
2675 for (i = 0; i < AST_VECTOR_SIZE(&startup_errors); i++) {
2676 char *str = AST_VECTOR_GET(&startup_errors, i);
2677
2678 ast_log(LOG_ERROR, "%s", str);
2679 ast_free(str);
2680 }
2682
2685
2686 end_time = ast_tvnow();
2687 usElapsed = ast_tvdiff_us(end_time, start_time);
2688
2689#ifdef AST_XML_DOCS
2690 ast_debug(1, "Loader time with AST_XML_DOCS: %" PRId64 ".%06" PRId64 "\n", usElapsed / 1000000, usElapsed % 1000000);
2691#else
2692 ast_debug(1, "Loader time without AST_XML_DOCS: %" PRId64 ".%06" PRId64 "\n", usElapsed / 1000000, usElapsed % 1000000);
2693#endif
2694
2695 return res;
2696}
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_debug(level,...)
Log a DEBUG message.
#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:2271
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:2384
static int loader_builtin_init(struct load_order *load_order)
Definition: loader.c:2349
static char * get_name_from_resource(const char *resource)
Definition: loader.c:157
@ 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:1139
char * ast_str_buffer(const struct ast_str *buf)
Returns the string buffer within the ast_str buf.
Definition: strings.h:761
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:693
#define ast_str_create(init_len)
Create a malloc'ed dynamic length string.
Definition: strings.h:659
size_t ast_str_strlen(const struct ast_str *buf)
Returns the current length of the string stored within buf.
Definition: strings.h:730
enum ast_module_support_level support_level
Definition: module.h:430
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::@362 flags
Support for dynamic strings.
Definition: strings.h:623
Definition: loader.c:2002
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:87
struct timeval ast_tvnow(void)
Returns current timeval. Meant to replace calls to gettimeofday().
Definition: time.h:159
#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_node_get_children(struct ast_xml_node *node)
Get the node's children.
Definition: xml.c:397
const char * ast_xml_get_text(struct ast_xml_node *node)
Get an element content string.
Definition: xml.c:355
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:417
void ast_xml_xpath_results_free(struct ast_xml_xpath_results *results)
Free the XPath results.
Definition: xml.c:427
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:299
struct ast_xml_xpath_results * ast_xmldoc_query(const char *fmt,...)
Execute an XPath query on the loaded XML documentation.
Definition: xmldoc.c:2576

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

Definition at line 8421 of file pbx.c.

8422{
8423 int res = 0;
8424
8426
8427 /* Initialize the PBX */
8428 ast_verb(1, "Asterisk PBX Core Initializing\n");
8429
8430 ast_verb(5, "Registering builtin functions:\n");
8434
8435 /* Register manager application */
8438
8439 if (res) {
8440 return -1;
8441 }
8442
8444 return -1;
8445 }
8447 stasis_subscription_accept_message_type(device_state_sub, hint_change_message_type());
8448 stasis_subscription_accept_message_type(device_state_sub, hint_remove_message_type());
8450
8452 return -1;
8453 }
8456
8457 return 0;
8458}
struct stasis_message_type * ast_device_state_message_type(void)
Get the Stasis message type for device state messages.
struct stasis_topic * ast_device_state_topic_all(void)
Get the Stasis topic for device state messages.
Definition: devicestate.c:668
#define EVENT_FLAG_CONFIG
Definition: manager.h:82
static int manager_show_dialplan(struct mansession *s, const struct message *m)
Manager listing of dial plan.
Definition: pbx.c:5970
static int action_extensionstatelist(struct mansession *s, const struct message *m)
Definition: pbx.c:8344
static struct stasis_subscription * presence_state_sub
Subscription for presence state change events.
Definition: pbx.c:775
static void presence_state_cb(void *unused, struct stasis_subscription *sub, struct stasis_message *msg)
Definition: pbx.c:8294
static void unload_pbx(void)
Definition: pbx.c:8409
static struct ast_custom_function testtime_function
Definition: pbx.c:8277
static void device_state_cb(void *unused, struct stasis_subscription *sub, struct stasis_message *msg)
Definition: pbx.c:3584
static struct ast_cli_entry pbx_cli[]
Definition: pbx.c:6115
static struct stasis_subscription * device_state_sub
Subscription for device state change events.
Definition: pbx.c:773
static struct ast_custom_function exception_function
Definition: pbx.c:2852
struct stasis_topic * ast_presence_state_topic_all(void)
Get presence state topic.
struct stasis_message_type * ast_presence_state_message_type(void)
Get presence state message type.
@ STASIS_SUBSCRIPTION_FILTER_SELECTIVE
Definition: stasis.h:297
int stasis_subscription_accept_message_type(struct stasis_subscription *subscription, const struct stasis_message_type *type)
Indicate to a subscription that we are interested in a message type.
Definition: stasis.c:1023
int stasis_subscription_set_filter(struct stasis_subscription *subscription, enum stasis_subscription_message_filter filter)
Set the message type filtering level on a subscription.
Definition: stasis.c:1077
#define stasis_subscribe(topic, callback, data)
Definition: stasis.h:649

References __ast_custom_function_register(), action_extensionstatelist(), ARRAY_LEN, ast_cli_register_multiple, ast_device_state_message_type(), ast_device_state_topic_all(), ast_manager_register_xml_core, ast_presence_state_message_type(), ast_presence_state_topic_all(), ast_register_cleanup(), ast_verb, device_state_cb(), device_state_sub, EVENT_FLAG_CALL, EVENT_FLAG_CONFIG, EVENT_FLAG_REPORTING, exception_function, manager_show_dialplan(), NULL, pbx_cli, presence_state_cb(), presence_state_sub, stasis_subscribe, stasis_subscription_accept_message_type(), STASIS_SUBSCRIPTION_FILTER_SELECTIVE, stasis_subscription_set_filter(), testtime_function, and unload_pbx().

Referenced by asterisk_daemon().

◆ load_pbx_app()

int load_pbx_app ( void  )

Provided by pbx_app.c

Definition at line 538 of file pbx_app.c.

539{
542
543 return 0;
544}
static struct ast_cli_entry app_cli[]
Definition: pbx_app.c:528
static void unload_pbx_app(void)
Definition: pbx_app.c:533

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 1506 of file pbx_builtins.c.

1507{
1508 int x;
1509
1510 /* Register builtin applications */
1511 for (x = 0; x < ARRAY_LEN(builtins); x++) {
1513 ast_log(LOG_ERROR, "Unable to register builtin application '%s'\n", builtins[x].name);
1514 return -1;
1515 }
1516 }
1517
1519
1520 return 0;
1521}
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:471
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 733 of file pbx_functions.c.

734{
737
738 return 0;
739}
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 1403 of file pbx_variables.c.

1404{
1405 int res = 0;
1406
1411 AST_TEST_REGISTER(test_variable_substrings);
1412
1413 return res;
1414}
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(), AST_TEST_REGISTER, 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 2186 of file logger.c.

2187{
2188 /* Must not be called before the logger is initialized. */
2190
2192 if (!queuelog_init) {
2194 queuelog_init = 1;
2196 ast_queue_log("NONE", "NONE", "NONE", "QUEUESTART", "%s", "");
2197 } else {
2199 }
2200}
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:965
static void logger_queue_init(void)
Definition: logger.c:2151
#define ast_assert(a)
Definition: utils.h:739

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 1172 of file loader.c.

1173{
1174 struct ast_module *mod;
1175 int somethingchanged;
1176 int res;
1177
1179
1180 /*!\note Some resources, like timers, are started up dynamically, and thus
1181 * may be still in use, even if all channels are dead. We must therefore
1182 * check the usecount before asking modules to unload. */
1183 do {
1184 /* Reset flag before traversing the list */
1185 somethingchanged = 0;
1186
1188 if (mod->usecount) {
1189 ast_debug(1, "Passing on %s: its use count is %d\n",
1190 mod->resource, mod->usecount);
1191 continue;
1192 }
1194 if (mod->flags.running && !mod->flags.declined && mod->info->unload) {
1195 ast_verb(4, "Unloading %s\n", mod->resource);
1196 mod->info->unload();
1197 }
1198 module_destroy(mod);
1199 somethingchanged = 1;
1200 }
1202 if (!somethingchanged) {
1204 if (mod->flags.keepuntilshutdown) {
1205 ast_module_unref(mod);
1206 mod->flags.keepuntilshutdown = 0;
1207 somethingchanged = 1;
1208 }
1209 }
1210 }
1211 } while (somethingchanged);
1212
1215
1216 return !res;
1217}
#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:483
int(* unload)(void)
Definition: module.h:362
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().