diff options
Diffstat (limited to 'main/asterisk.c')
-rw-r--r-- | main/asterisk.c | 381 |
1 files changed, 94 insertions, 287 deletions
diff --git a/main/asterisk.c b/main/asterisk.c index 164e659ba..b8eedfa38 100644 --- a/main/asterisk.c +++ b/main/asterisk.c @@ -248,6 +248,7 @@ int daemon(int, int); /* defined in libresolv of all places */ #include "asterisk/endpoints.h" #include "asterisk/codec.h" #include "asterisk/format_cache.h" +#include "asterisk/astdb.h" #include "../defaults.h" @@ -600,6 +601,11 @@ void ast_unregister_thread(void *id) } } +int ast_pbx_uuid_get(char *pbx_uuid, int length) +{ + return ast_db_get("pbx", "UUID", pbx_uuid, length); +} + /*! \brief Give an overview of core settings */ static char *handle_show_settings(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) { @@ -607,6 +613,7 @@ static char *handle_show_settings(struct ast_cli_entry *e, int cmd, struct ast_c struct ast_tm tm; char eid_str[128]; struct rlimit limits; + char pbx_uuid[AST_UUID_STR_LEN]; switch (cmd) { case CLI_INIT: @@ -619,6 +626,7 @@ static char *handle_show_settings(struct ast_cli_entry *e, int cmd, struct ast_c } ast_eid_to_str(eid_str, sizeof(eid_str), &ast_eid_default); + ast_pbx_uuid_get(pbx_uuid, sizeof(pbx_uuid)); ast_cli(a->fd, "\nPBX Core settings\n"); ast_cli(a->fd, "-----------------\n"); @@ -657,6 +665,7 @@ static char *handle_show_settings(struct ast_cli_entry *e, int cmd, struct ast_c ast_cli(a->fd, " System: %s/%s built by %s on %s %s\n", ast_build_os, ast_build_kernel, ast_build_user, ast_build_machine, ast_build_date); ast_cli(a->fd, " System name: %s\n", ast_config_AST_SYSTEM_NAME); ast_cli(a->fd, " Entity ID: %s\n", eid_str); + ast_cli(a->fd, " PBX UUID: %s\n", pbx_uuid); ast_cli(a->fd, " Default language: %s\n", ast_defaultlanguage); ast_cli(a->fd, " Language prefix: %s\n", ast_language_is_prefix ? "Enabled" : "Disabled"); ast_cli(a->fd, " User name and group: %s/%s\n", ast_config_AST_RUN_USER, ast_config_AST_RUN_GROUP); @@ -3743,10 +3752,10 @@ static void ast_readconfig(void) } else if (!strcasecmp(v->name, "entityid")) { struct ast_eid tmp_eid; if (!ast_str_to_eid(&tmp_eid, v->value)) { - ast_verbose("Successfully set global EID to '%s'\n", v->value); ast_eid_default = tmp_eid; - } else - ast_verbose("Invalid Entity ID '%s' provided\n", v->value); + } else { + ast_log(LOG_WARNING, "Invalid Entity ID '%s' provided\n", v->value); + } } else if (!strcasecmp(v->name, "lightbackground")) { ast_set2_flag(&ast_options, ast_true(v->value), AST_OPT_FLAG_LIGHT_BACKGROUND); } else if (!strcasecmp(v->name, "forceblackbackground")) { @@ -4298,13 +4307,22 @@ int main(int argc, char *argv[]) return 0; } +static inline void check_init(int init_result, const char *name) +{ + if (init_result) { + printf("%s initialization failed.\n%s", name, term_quit()); + ast_run_atexits(0); + exit(init_result == -2 ? 2 : 1); + } +} + static void asterisk_daemon(int isroot, const char *runuser, const char *rungroup) { FILE *f; sigset_t sigs; int num; char *buf; - int moduleresult; /*!< Result from the module load subsystem */ + char pbx_uuid[AST_UUID_STR_LEN]; /* This needs to remain as high up in the initial start up as possible. * daemon causes a fork to occur, which has all sorts of unintended @@ -4394,15 +4412,8 @@ static void asterisk_daemon(int isroot, const char *runuser, const char *rungrou register_config_cli(); read_config_maps(); - if (astobj2_init()) { - printf("Failed: astobj2_init\n%s", term_quit()); - exit(1); - } - - if (ast_named_locks_init()) { - printf("Failed: ast_named_locks_init\n%s", term_quit()); - exit(1); - } + check_init(astobj2_init(), "AO2"); + check_init(ast_named_locks_init(), "Named Locks"); if (ast_opt_console) { if (el_hist == NULL || el == NULL) @@ -4410,6 +4421,21 @@ static void asterisk_daemon(int isroot, const char *runuser, const char *rungrou ast_el_read_default_histfile(); } +#ifdef AST_XML_DOCS + /* Load XML documentation. */ + ast_xmldoc_load_documentation(); +#endif + + check_init(astdb_init(), "ASTdb"); + + ast_uuid_init(); + + if (ast_pbx_uuid_get(pbx_uuid, sizeof(pbx_uuid))) { + ast_uuid_generate_str(pbx_uuid, sizeof(pbx_uuid)); + ast_db_put("pbx", "UUID", pbx_uuid); + } + ast_verb(0, "PBX UUID: %s\n", pbx_uuid); + ast_json_init(); ast_ulaw_init(); ast_alaw_init(); @@ -4417,92 +4443,27 @@ static void asterisk_daemon(int isroot, const char *runuser, const char *rungrou callerid_init(); ast_builtins_init(); - if (ast_utils_init()) { - printf("Failed: ast_utils_init\n%s", term_quit()); - exit(1); - } - - if (ast_tps_init()) { - printf("Failed: ast_tps_init\n%s", term_quit()); - exit(1); - } - - if (ast_fd_init()) { - printf("Failed: ast_fd_init\n%s", term_quit()); - exit(1); - } - - if (ast_pbx_init()) { - printf("Failed: ast_pbx_init\n%s", term_quit()); - exit(1); - } - + check_init(ast_utils_init(), "Utilities"); + check_init(ast_tps_init(), "Task Processor Core"); + check_init(ast_fd_init(), "File Descriptor Debugging"); + check_init(ast_pbx_init(), "ast_pbx_init"); #ifdef TEST_FRAMEWORK - if (ast_test_init()) { - printf("Failed: ast_test_init\n%s", term_quit()); - exit(1); - } + check_init(ast_test_init(), "Test Framework"); #endif - - if (ast_translate_init()) { - printf("Failed: ast_translate_init\n%s", term_quit()); - exit(1); - } + check_init(ast_translate_init(), "Translator Core"); ast_aoc_cli_init(); - ast_uuid_init(); - - if (ast_sorcery_init()) { - printf("Failed: ast_sorcery_init\n%s", term_quit()); - exit(1); - } - - if (ast_codec_init()) { - printf("Failed: ast_codec_init\n%s", term_quit()); - exit(1); - } - - if (ast_format_init()) { - printf("Failed: ast_format_init\n%s", term_quit()); - exit(1); - } - - if (ast_format_cache_init()) { - printf("Failed: ast_format_cache_init\n%s", term_quit()); - exit(1); - } - - if (ast_codec_builtin_init()) { - printf("Failed: ast_codec_builtin_init\n%s", term_quit()); - exit(1); - } - -#ifdef AST_XML_DOCS - /* Load XML documentation. */ - ast_xmldoc_load_documentation(); -#endif - - aco_init(); - - if (ast_bucket_init()) { - printf("Failed: ast_bucket_init\n%s", term_quit()); - exit(1); - } - if (stasis_init()) { - printf("Stasis initialization failed.\n%s", term_quit()); - exit(1); - } - - if (ast_stasis_system_init()) { - printf("Stasis system-level information initialization failed.\n%s", term_quit()); - exit(1); - } - - if (ast_endpoint_stasis_init()) { - printf("Endpoint initialization failed.\n%s", term_quit()); - exit(1); - } + check_init(ast_sorcery_init(), "Sorcery"); + check_init(ast_codec_init(), "Codecs"); + check_init(ast_format_init(), "Formats"); + check_init(ast_format_cache_init(), "Format Cache"); + check_init(ast_codec_builtin_init(), "Built-in Codecs"); + check_init(aco_init(), "Configuration Option Framework"); + check_init(ast_bucket_init(), "Bucket API"); + check_init(stasis_init(), "Stasis"); + check_init(ast_stasis_system_init(), "Stasis system-level information"); + check_init(ast_endpoint_stasis_init(), "Stasis Endpoint"); ast_makesocket(); /* GCC 4.9 gives a bogus "right-hand operand of comma expression has @@ -4526,212 +4487,58 @@ static void asterisk_daemon(int isroot, const char *runuser, const char *rungrou srand((unsigned int) getpid() + (unsigned int) time(NULL)); initstate((unsigned int) getpid() * 65536 + (unsigned int) time(NULL), randompool, sizeof(randompool)); - if (init_logger()) { /* Start logging subsystem */ - printf("Failed: init_logger\n%s", term_quit()); - exit(1); - } + check_init(init_logger(), "Logger"); threadstorage_init(); - if (ast_rtp_engine_init()) { - printf("Failed: ast_rtp_engine_init\n%s", term_quit()); - exit(1); - } + check_init(ast_rtp_engine_init(), "RTP Engine"); ast_autoservice_init(); - if (ast_timing_init()) { - printf("Failed: ast_timing_init\n%s", term_quit()); - exit(1); - } - - if (ast_ssl_init()) { - printf("Failed: ast_ssl_init\n%s", term_quit()); - exit(1); - } - - if (ast_pj_init()) { - printf("Failed: ast_pj_init\n%s", term_quit()); - exit(1); - } - - if (app_init()) { - printf("App core initialization failed.\n%s", term_quit()); - exit(1); - } - - if (devstate_init()) { - printf("Device state core initialization failed.\n%s", term_quit()); - exit(1); - } - - if (astdb_init()) { - printf("Failed: astdb_init\n%s", term_quit()); - exit(1); - } - - if (ast_msg_init()) { - printf("Failed: ast_msg_init\n%s", term_quit()); - exit(1); - } - - /* initialize the data retrieval API */ - if (ast_data_init()) { - printf("Failed: ast_data_init\n%s", term_quit()); - exit(1); - } - - ast_channels_init(); - - if (ast_endpoint_init()) { - printf ("Failed: ast_endpoint_init\n%s", term_quit()); - exit(1); - } - - if (ast_pickup_init()) { - printf("Failed: ast_pickup_init\n%s", term_quit()); - exit(1); - } - - if (ast_bridging_init()) { - printf("Failed: ast_bridging_init\n%s", term_quit()); - exit(1); - } - - if (ast_parking_stasis_init()) { - printf("Failed: ast_parking_stasis_init\n%s", term_quit()); - exit(1); - } - - if (ast_device_state_engine_init()) { - printf("Failed: ast_device_state_engine_init\n%s", term_quit()); - exit(1); - } - - if (ast_presence_state_engine_init()) { - printf("Failed: ast_presence_state_engine_init\n%s", term_quit()); - exit(1); - } - - if ((moduleresult = load_modules(1))) { /* Load modules, pre-load only */ - printf("Failed: load_modules\n%s", term_quit()); - exit(moduleresult == -2 ? 2 : 1); - } - - if (ast_features_init()) { - printf("Failed: ast_features_init\n%s", term_quit()); - exit(1); - } - - if (dnsmgr_init()) { /* Initialize the DNS manager */ - printf("Failed: dnsmgr_init\n%s", term_quit()); - exit(1); - } - - if (ast_security_stasis_init()) { /* Initialize Security Stasis Topic and Events */ - printf("Failed: ast_security_stasis_init\n%s", term_quit()); - exit(1); - } - - if (ast_named_acl_init()) { /* Initialize the Named ACL system */ - printf("Failed: ast_named_acl_init\n%s", term_quit()); - exit(1); - } + check_init(ast_timing_init(), "Timing"); + check_init(ast_ssl_init(), "SSL"); + check_init(ast_pj_init(), "Embedded PJProject"); + check_init(app_init(), "App Core"); + check_init(devstate_init(), "Device State Core"); + check_init(ast_msg_init(), "Messaging API"); + check_init(ast_data_init(), "Data Retrieval API"); + check_init(ast_channels_init(), "Channel"); + check_init(ast_endpoint_init(), "Endpoints"); + check_init(ast_pickup_init(), "Call Pickup"); + check_init(ast_bridging_init(), "Bridging"); + check_init(ast_parking_stasis_init(), "Parking Core"); + check_init(ast_device_state_engine_init(), "Device State Engine"); + check_init(ast_presence_state_engine_init(), "Presence State Engine"); + check_init(load_modules(1), "Module Preload"); + check_init(ast_features_init(), "Call Features"); + check_init(dnsmgr_init(), "DNS manager"); + check_init(ast_security_stasis_init(), "Security Stasis Topic and Events"); + check_init(ast_named_acl_init(), "Named ACL system"); ast_http_init(); /* Start the HTTP server, if needed */ - if (ast_indications_init()) { - printf("Failed: ast_indications_init\n%s", term_quit()); - exit(1); - } - - if (ast_cdr_engine_init()) { - printf("Failed: ast_cdr_engine_init\n%s", term_quit()); - exit(1); - } + check_init(ast_indications_init(), "Indication Tone Handling"); + check_init(ast_cdr_engine_init(), "CDR Engine"); ast_dsp_init(); ast_udptl_init(); - if (ast_image_init()) { - printf("Failed: ast_image_init\n%s", term_quit()); - exit(1); - } - - if (ast_file_init()) { - printf("Failed: ast_file_init\n%s", term_quit()); - exit(1); - } - - if (load_pbx()) { - printf("Failed: load_pbx\n%s", term_quit()); - exit(1); - } - - if (load_pbx_builtins()) { - printf("Failed: load_pbx_builtins\n%s", term_quit()); - exit(1); - } - - if (load_pbx_functions_cli()) { - printf("Failed: load_pbx_functions_cli\n%s", term_quit()); - exit(1); - } - - if (load_pbx_variables()) { - printf("Failed: load_pbx_variables\n%s", term_quit()); - exit(1); - } - - if (load_pbx_switch()) { - printf("Failed: load_pbx_switch\n%s", term_quit()); - exit(1); - } - - if (load_pbx_app()) { - printf("Failed: load_pbx_app\n%s", term_quit()); - exit(1); - } - - if (load_pbx_hangup_handler()) { - printf("Failed: load_pbx_hangup_handler\n%s", term_quit()); - exit(1); - } - - if (ast_local_init()) { - printf("Failed: ast_local_init\n%s", term_quit()); - exit(1); - } - - if (ast_cel_engine_init()) { - printf("Failed: ast_cel_engine_init\n%s", term_quit()); - exit(1); - } - - if (init_manager()) { - printf("Failed: init_manager\n%s", term_quit()); - exit(1); - } - - if (ast_enum_init()) { - printf("Failed: ast_enum_init\n%s", term_quit()); - exit(1); - } - - if (ast_cc_init()) { - printf("Failed: ast_cc_init\n%s", term_quit()); - exit(1); - } - - if (ast_sounds_index_init()) { - printf("Failed: ast_sounds_index_init\n%s", term_quit()); - exit(1); - } - - if ((moduleresult = load_modules(0))) { /* Load modules */ - printf("%s", term_quit()); - exit(moduleresult == -2 ? 2 : 1); - } + check_init(ast_image_init(), "Image"); + check_init(ast_file_init(), "Generic File Format Support"); + check_init(load_pbx(), "load_pbx"); + check_init(load_pbx_builtins(), "Builtin PBX Applications"); + check_init(load_pbx_functions_cli(), "PBX Functions Support"); + check_init(load_pbx_variables(), "PBX Variables Support"); + check_init(load_pbx_switch(), "PBX Switch Support"); + check_init(load_pbx_app(), "PBX Application Support"); + check_init(load_pbx_hangup_handler(), "PBX Hangup Handler Support"); + check_init(ast_local_init(), "Local Proxy Channel Driver"); + check_init(ast_cel_engine_init(), "CEL Engine"); + check_init(init_manager(), "Asterisk Manager Interface"); + check_init(ast_enum_init(), "ENUM Support"); + check_init(ast_cc_init(), "Call Completion Supplementary Services"); + check_init(ast_sounds_index_init(), "Sounds Indexer"); + check_init(load_modules(0), "Module"); /* loads the cli_permissoins.conf file needed to implement cli restrictions. */ ast_cli_perms_init(0); |