Merge "loader: Convert reload_classes to built-in modules."

This commit is contained in:
Jenkins2 2018-03-19 12:53:12 -05:00 committed by Gerrit Code Review
commit 5843a19797
79 changed files with 526 additions and 423 deletions

View File

@ -724,4 +724,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "MySQL CDR Backend",
.load = load_module,
.unload = unload_module,
.reload = reload,
.requires = "cdr",
);

View File

@ -5243,5 +5243,6 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Objective Systems H32
.load = load_module,
.unload = unload_module,
.reload = reload_module,
.load_pri = AST_MODPRI_CHANNEL_DRIVER
.load_pri = AST_MODPRI_CHANNEL_DRIVER,
.requires = "udptl",
);

View File

@ -1559,4 +1559,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "MySQL RealTime Config
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_REALTIME_DRIVER,
.requires = "extconfig",
);

View File

@ -103,4 +103,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Generate an User-Defined
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
.requires = "cel",
);

View File

@ -3380,4 +3380,9 @@ static int load_module(void)
return res;
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Dialing Application");
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Dialing Application",
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
.requires = "ccss",
);

View File

@ -215,4 +215,9 @@ static int load_module(void)
return AST_MODULE_LOAD_SUCCESS;
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Fork The CDR into 2 separate entities");
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Fork The CDR into 2 separate entities",
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
.requires = "cdr",
);

View File

@ -831,4 +831,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Adaptive ODBC CDR bac
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_CDR_DRIVER,
.requires = "cdr,res_odbc",
);

View File

@ -261,9 +261,10 @@ static int reload(void) {
}
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Asterisk Beanstalkd CDR Backend",
.support_level = AST_MODULE_SUPPORT_EXTENDED,
.load = load_module,
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_CDR_DRIVER,
.support_level = AST_MODULE_SUPPORT_EXTENDED,
.load = load_module,
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_CDR_DRIVER,
.requires = "cdr",
);

View File

@ -360,4 +360,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Comma Separated Value
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_CDR_DRIVER,
.requires = "cdr",
);

View File

@ -231,4 +231,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Customizable Comma Se
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_CDR_DRIVER,
.requires = "cdr",
);

View File

@ -371,4 +371,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Asterisk Manager Inte
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_CDR_DRIVER,
.requires = "cdr",
);

View File

@ -328,4 +328,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "ODBC CDR Backend",
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_CDR_DRIVER,
.requires = "cdr",
);

View File

@ -794,4 +794,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "PostgreSQL CDR Backen
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_CDR_DRIVER,
.requires = "cdr",
);

View File

@ -287,4 +287,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "RADIUS CDR Backend",
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_CDR_DRIVER,
.requires = "cdr",
);

View File

@ -248,4 +248,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "SQLite CDR Backend",
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_CDR_DRIVER,
.requires = "cdr",
);

View File

@ -360,4 +360,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "SQLite3 Custom CDR Mo
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_CDR_DRIVER,
.requires = "cdr",
);

View File

@ -292,4 +292,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Customizable syslog C
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_CDR_DRIVER,
.requires = "cdr",
);

View File

@ -635,4 +635,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "FreeTDS CDR Backend",
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_CDR_DRIVER,
.requires = "cdr",
);

View File

@ -272,4 +272,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Beanstalkd CEL Backen
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_CDR_DRIVER,
.requires = "cel",
);

View File

@ -223,4 +223,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Customizable Comma Se
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_CDR_DRIVER,
.requires = "cel",
);

View File

@ -380,4 +380,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Asterisk Manager Inte
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_CDR_DRIVER,
.requires = "cel",
);

View File

@ -856,4 +856,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "ODBC CEL backend",
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_CDR_DRIVER,
.requires = "cel,res_odbc",
);

View File

@ -709,4 +709,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "PostgreSQL CEL Backen
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_CDR_DRIVER,
.requires = "cel",
);

View File

@ -259,4 +259,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "RADIUS CEL Backend",
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_CDR_DRIVER,
.requires = "cel",
);

View File

@ -360,4 +360,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "SQLite3 Custom CEL Mo
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_CDR_DRIVER,
.requires = "cel",
);

View File

@ -580,4 +580,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "FreeTDS CEL Backend",
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_CDR_DRIVER,
.requires = "cel",
);

View File

@ -19542,5 +19542,6 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, tdesc,
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_CHANNEL_DRIVER,
.requires = "ccss",
.optional_modules = "res_smdi",
);

View File

@ -14902,5 +14902,6 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Inter Asterisk eXchan
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_CHANNEL_DRIVER,
.requires = "dnsmgr",
.optional_modules = "res_crypto",
);

View File

@ -35744,5 +35744,6 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Session Initiation Pr
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_CHANNEL_DRIVER,
.requires = "ccss,dnsmgr,udptl",
.optional_modules = "res_crypto,res_http_websocket",
);

View File

@ -126,4 +126,9 @@ static int load_module(void)
return ast_custom_function_register(&cc_function) == 0 ? AST_MODULE_LOAD_SUCCESS : AST_MODULE_LOAD_DECLINE;
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Call Control Configuration Function");
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Call Control Configuration Function",
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
.requires = "ccss",
);

View File

@ -704,4 +704,9 @@ static int load_module(void)
return AST_MODULE_LOAD_SUCCESS;
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Call Detail Record (CDR) dialplan functions");
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Call Detail Record (CDR) dialplan functions",
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
.requires = "cdr",
);

View File

@ -472,4 +472,9 @@ static int load_module(void)
return res;
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "ENUM related dialplan functions");
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "ENUM related dialplan functions",
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
.requires = "enum",
);

View File

@ -33,26 +33,17 @@ int astdb_init(void); /*!< Provided by db.c */
int ast_channels_init(void); /*!< Provided by channel.c */
void ast_builtins_init(void); /*!< Provided by cli.c */
int ast_cli_perms_init(int reload); /*!< Provided by cli.c */
int dnsmgr_init(void); /*!< Provided by dnsmgr.c */
void dnsmgr_start_refresh(void); /*!< Provided by dnsmgr.c */
int dnsmgr_reload(void); /*!< Provided by dnsmgr.c */
int ast_dns_system_resolver_init(void); /*!< Provided by dns_system_resolver.c */
void threadstorage_init(void); /*!< Provided by threadstorage.c */
int ast_device_state_engine_init(void); /*!< Provided by devicestate.c */
int astobj2_init(void); /*!< Provided by astobj2.c */
int ast_named_locks_init(void); /*!< Provided by named_locks.c */
int ast_file_init(void); /*!< Provided by file.c */
int ast_features_init(void); /*!< Provided by features.c */
void ast_autoservice_init(void); /*!< Provided by autoservice.c */
int ast_http_init(void); /*!< Provided by http.c */
int ast_http_reload(void); /*!< Provided by http.c */
int ast_tps_init(void); /*!< Provided by taskprocessor.c */
int ast_timing_init(void); /*!< Provided by timing.c */
int ast_indications_init(void); /*!< Provided by indications.c */
int ast_indications_reload(void);/*!< Provided by indications.c */
void ast_stun_init(void); /*!< Provided by stun.c */
int ast_cel_engine_init(void); /*!< Provided by cel.c */
int ast_cel_engine_reload(void); /*!< Provided by cel.c */
int ast_ssl_init(void); /*!< Provided by ssl.c */
int ast_pj_init(void); /*!< Provided by libasteriskpj.c */
int ast_test_init(void); /*!< Provided by test.c */
@ -97,13 +88,6 @@ void ast_process_pending_reloads(void);
*/
int ast_xmldoc_load_documentation(void);
/*!
* \brief Reload genericplc configuration value from codecs.conf
*
* Implementation is in main/channel.c
*/
int ast_plc_reload(void);
/*! \brief initializes the rtp engine arrays */
int ast_rtp_engine_init(void);
@ -113,9 +97,6 @@ int ast_rtp_engine_init(void);
*/
int ast_parking_stasis_init(void);
/*! \brief initialize the sounds index */
int ast_sounds_index_init(void);
/*!
* \brief Endpoint support initialization.
* \return 0 on success.

View File

@ -381,24 +381,6 @@ const char *ast_tos2str(unsigned int tos);
*/
struct ast_ha *ast_named_acl_find(const char *name, int *is_realtime, int *is_undefined);
/*!
* \brief Initialize and configure the named ACL system.
*
* \details
* This function will prepare the named ACL system for use.
* For this reason, it needs to be called before other things that use ACLs are initialized.
*/
int ast_named_acl_init(void);
/*!
* \brief reload/reconfigure the named ACL system.
*
* \details
* This function is designed to trigger an event upon a successful reload that may update
* ACL consumers.
*/
int ast_named_acl_reload(void);
/*!
* \brief a \ref stasis_message_type for changes against a named ACL or the set of all named ACLs
* \since 12

View File

@ -1618,15 +1618,4 @@ typedef void (*ast_cc_callback_fn)(struct ast_channel *chan, struct ast_cc_confi
*/
int ast_cc_callback(struct ast_channel *inbound, const char * const tech, const char * const dest, ast_cc_callback_fn callback);
/*!
* \since 1.8
* \brief Initialize CCSS
*
* Performs startup routines necessary for CC operation.
*
* \retval 0 Success
* \retval nonzero Failure
*/
int ast_cc_init(void);
#endif /* _ASTERISK_CCSS_H */

View File

@ -581,12 +581,6 @@ const char *ast_cdr_disp2str(int disposition);
*/
void ast_cdr_setuserfield(const char *channel_name, const char *userfield);
/*! \brief Reload the configuration file cdr.conf and start/stop CDR scheduling thread */
int ast_cdr_engine_reload(void);
/*! \brief Load the configuration file cdr.conf and possibly start the CDR scheduling thread */
int ast_cdr_engine_init(void);
/*! Submit any remaining CDRs and prepare for shutdown */
void ast_cdr_engine_term(void);

View File

@ -784,15 +784,6 @@ int ast_realtime_append_mapping(const char *name, const char *driver, const char
*/
int register_config_cli(void);
/*!
* \brief Exposed re-initialization method for core process
*
* \details
* This method is intended for use only with the core re-initialization and is
* not designed to be called from any user applications.
*/
int read_config_maps(void);
/*! \brief Create a new base configuration structure */
struct ast_config *ast_config_new(void);

View File

@ -193,16 +193,4 @@ int ast_dsp_get_tcount(struct ast_dsp *dsp);
*/
int ast_dsp_get_threshold_from_settings(enum threshold which);
/*!
* \brief Reloads dsp settings from dsp.conf
* \since 1.6.1
*/
int ast_dsp_reload(void);
/*!
* \brief Load dsp settings from dsp.conf
* \since 1.6.1
*/
int ast_dsp_init(void);
#endif /* _ASTERISK_DSP_H */

View File

@ -97,7 +97,4 @@ int ast_get_enum(struct ast_channel *chan, const char *number, char *location, i
*/
int ast_get_txt(struct ast_channel *chan, const char *number, char *txt, int maxtxt, char *suffix);
int ast_enum_init(void);
int ast_enum_reload(void);
#endif /* _ASTERISK_ENUM_H */

View File

@ -265,10 +265,4 @@ struct ast_applicationmap_item {
*/
struct ao2_container *ast_get_chan_applicationmap(struct ast_channel *chan);
void ast_features_config_shutdown(void);
int ast_features_config_reload(void);
int ast_features_config_init(void);
#endif /* _FEATURES_CONFIG_H */

View File

@ -133,9 +133,6 @@ int ast_logger_remove_channel(const char *log_channel);
*/
void ast_log_backtrace(void);
/*! \brief Reload logger without rotating log files */
int logger_reload(void);
/*! \brief Reload logger while rotating log files */
int ast_logger_rotate(void);

View File

@ -356,12 +356,6 @@ void __attribute__((format(printf, 2, 3))) astman_append(struct mansession *s, c
/*! \brief Determinie if a manager session ident is authenticated */
int astman_is_authed(uint32_t ident);
/*! \brief Called by Asterisk initialization */
int init_manager(void);
/*! \brief Called by Asterisk module functions and the CLI command */
int reload_manager(void);
/*!
* \brief Add a datastore to a session
*

View File

@ -292,13 +292,14 @@ enum ast_module_load_priority {
AST_MODPRI_REALTIME_DEPEND = 10, /*!< Dependency for a realtime driver */
AST_MODPRI_REALTIME_DEPEND2 = 20, /*!< Second level dependency for a realtime driver (func_curl needs res_curl, but is needed by res_config_curl) */
AST_MODPRI_REALTIME_DRIVER = 30, /*!< A realtime driver, which provides configuration services for other modules */
AST_MODPRI_TIMING = 40, /*!< Dependency for a channel (MOH needs timing interfaces to be fully loaded) */
AST_MODPRI_CHANNEL_DEPEND = 50, /*!< Channel driver dependency (may depend upon realtime, e.g. MOH) */
AST_MODPRI_CHANNEL_DRIVER = 60, /*!< Channel drivers (provide devicestate) */
AST_MODPRI_APP_DEPEND = 70, /*!< Dependency for an application */
AST_MODPRI_DEVSTATE_PROVIDER = 80, /*!< Applications and other modules that _provide_ devicestate (e.g. meetme) */
AST_MODPRI_DEVSTATE_PLUGIN = 90, /*!< Plugin for a module that provides devstate (e.g. res_calendar_*) */
AST_MODPRI_CDR_DRIVER = 100, /*!< CDR or CEL backend */
AST_MODPRI_CORE = 40, /*!< A core module originally meant to start between preload and load. */
AST_MODPRI_TIMING = 50, /*!< Dependency for a channel (MOH needs timing interfaces to be fully loaded) */
AST_MODPRI_CHANNEL_DEPEND = 60, /*!< Channel driver dependency (may depend upon realtime, e.g. MOH) */
AST_MODPRI_CHANNEL_DRIVER = 70, /*!< Channel drivers (provide devicestate) */
AST_MODPRI_APP_DEPEND = 80, /*!< Dependency for an application */
AST_MODPRI_DEVSTATE_PROVIDER = 90, /*!< Applications and other modules that _provide_ devicestate (e.g. meetme) */
AST_MODPRI_DEVSTATE_PLUGIN = 100, /*!< Plugin for a module that provides devstate (e.g. res_calendar_*) */
AST_MODPRI_CDR_DRIVER = 110, /*!< CDR or CEL backend */
AST_MODPRI_DEFAULT = 128, /*!< Modules not otherwise defined (such as most apps) will load here */
AST_MODPRI_DEVSTATE_CONSUMER = 150, /*!< Certain modules, which consume devstate, need to load after all others (e.g. app_queue) */
};

View File

@ -32,14 +32,6 @@ extern "C" {
*/
struct ast_media_index;
/*!
* \brief Reload the sounds index
*
* \retval zero on success
* \retval non-zero on failure
*/
int ast_sounds_reindex(void);
/*!
* \brief Get the sounds index
*

View File

@ -126,13 +126,6 @@ void ast_udptl_setnat(struct ast_udptl *udptl, int nat);
void ast_udptl_stop(struct ast_udptl *udptl);
void ast_udptl_init(void);
/*!
* \version 1.6.1 return changed to int
*/
int ast_udptl_reload(void);
#if defined(__cplusplus) || defined(c_plusplus)
}
#endif

View File

@ -17,9 +17,9 @@ all: asterisk
include $(ASTTOPDIR)/Makefile.moddir_rules
# Can the MODSRC list be automated without needing built-in modules to be
# in a different directory? Would a different directory be better?
MOD_SRC:=
MOD_SRC:=cdr.c cel.c config.c ccss.c dnsmgr.c dsp.c enum.c features.c http.c indications.c logger.c manager.c named_acl.c plc.c sounds.c udptl.c
# Allow deletion of built-in modules without needing to modify this source.
MOD_SRC:=$(wildcard $(MOD_SRC))
MOD_OBJS:=$(sort $(MOD_SRC:.c=.o))
# Must include the extra ast_expr2.c, ast_expr2f.c, in case they need to be regenerated (because to force regeneration, we delete them)

View File

@ -199,7 +199,6 @@ int daemon(int, int); /* defined in libresolv of all places */
#include "asterisk/channel.h"
#include "asterisk/translate.h"
#include "asterisk/pickup.h"
#include "asterisk/features.h"
#include "asterisk/acl.h"
#include "asterisk/ulaw.h"
#include "asterisk/alaw.h"
@ -209,11 +208,7 @@ int daemon(int, int); /* defined in libresolv of all places */
#include "asterisk/term.h"
#include "asterisk/manager.h"
#include "asterisk/cdr.h"
#include "asterisk/cel.h"
#include "asterisk/pbx.h"
#include "asterisk/enum.h"
#include "asterisk/http.h"
#include "asterisk/udptl.h"
#include "asterisk/app.h"
#include "asterisk/lock.h"
#include "asterisk/utils.h"
@ -225,11 +220,9 @@ int daemon(int, int); /* defined in libresolv of all places */
#include "asterisk/devicestate.h"
#include "asterisk/presencestate.h"
#include "asterisk/module.h"
#include "asterisk/dsp.h"
#include "asterisk/buildinfo.h"
#include "asterisk/xmldoc.h"
#include "asterisk/poll-compat.h"
#include "asterisk/ccss.h"
#include "asterisk/test.h"
#include "asterisk/rtp_engine.h"
#include "asterisk/format.h"
@ -4445,12 +4438,7 @@ static void asterisk_daemon(int isroot, const char *runuser, const char *rungrou
print_intro_message(runuser, rungroup);
if (ast_opt_console) {
ast_verb(0, "[ Initializing Custom Configuration Options ]\n");
}
/* custom config setup */
register_config_cli();
read_config_maps();
check_init(astobj2_init(), "AO2");
check_init(ast_named_locks_init(), "Named Locks");
@ -4565,31 +4553,9 @@ static void asterisk_daemon(int isroot, const char *runuser, const char *rungrou
/* We should avoid most config loads before this point as they can't use realtime. */
check_init(load_modules(1), "Module Preload");
/* Initialize core modules that have config files. These should be converted to
* built-in modules with load priority after realtime, that way users will not
* need to 'preload' realtime modules. */
check_init(ast_features_init(), "Call Features");
check_init(dnsmgr_init(), "DNS manager");
check_init(ast_named_acl_init(), "Named ACL system");
ast_http_init();
check_init(ast_indications_init(), "Indication Tone Handling");
check_init(ast_cdr_engine_init(), "CDR Engine");
ast_dsp_init();
ast_udptl_init();
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");
/* Load remaining modules */
check_init(load_modules(0), "Module");
/*
* This is initialized after the dynamic modules load to avoid repeatedly
* reindexing sounds for every format module load.
*/
check_init(ast_sounds_index_init(), "Sounds Indexer");
/*
* This has to load after the dynamic modules load, as items in the media
* cache can't be constructed from items in the AstDB without their

View File

@ -4615,7 +4615,7 @@ static struct ast_cli_entry cc_cli[] = {
AST_CLI_DEFINE(handle_cc_kill, "Kill a CC transaction"),
};
static void cc_shutdown(void)
static int unload_module(void)
{
ast_devstate_prov_del("ccss");
ast_cc_agent_unregister(&generic_agent_callbacks);
@ -4641,30 +4641,32 @@ static void cc_shutdown(void)
ao2_t_ref(generic_monitors, -1, "Unref generic_monitor container in cc_shutdown");
generic_monitors = NULL;
}
return 0;
}
int ast_cc_init(void)
static int load_module(void)
{
int res;
if (!(cc_core_instances = ao2_t_container_alloc(CC_CORE_INSTANCES_BUCKETS,
cc_core_instance_hash_fn, cc_core_instance_cmp_fn,
"Create core instance container"))) {
return -1;
return AST_MODULE_LOAD_FAILURE;
}
if (!(generic_monitors = ao2_t_container_alloc(CC_CORE_INSTANCES_BUCKETS,
generic_monitor_instance_list_hash_fn, generic_monitor_instance_list_cmp_fn,
"Create generic monitor container"))) {
return -1;
return AST_MODULE_LOAD_FAILURE;
}
if (!(cc_core_taskprocessor = ast_taskprocessor_get("CCSS_core", TPS_REF_DEFAULT))) {
return -1;
return AST_MODULE_LOAD_FAILURE;
}
if (!(cc_sched_context = ast_sched_context_create())) {
return -1;
return AST_MODULE_LOAD_FAILURE;
}
if (ast_sched_start_thread(cc_sched_context)) {
return -1;
return AST_MODULE_LOAD_FAILURE;
}
res = ast_register_application2(ccreq_app, ccreq_exec, NULL, NULL, NULL);
res |= ast_register_application2(cccancel_app, cccancel_exec, NULL, NULL, NULL);
@ -4680,7 +4682,12 @@ int ast_cc_init(void)
initialize_cc_devstate_map();
res |= ast_devstate_prov_add("ccss", ccss_device_state);
ast_register_cleanup(cc_shutdown);
return res;
return res ? AST_MODULE_LOAD_FAILURE : AST_MODULE_LOAD_SUCCESS;
}
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER, "Call Completion Supplementary Services",
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_CORE,
);

View File

@ -53,6 +53,7 @@
#include "asterisk/cdr.h"
#include "asterisk/callerid.h"
#include "asterisk/manager.h"
#include "asterisk/module.h"
#include "asterisk/causes.h"
#include "asterisk/linkedlists.h"
#include "asterisk/utils.h"
@ -4363,11 +4364,6 @@ static int process_config(int reload)
return 0;
}
static void cdr_engine_cleanup(void)
{
destroy_subscriptions();
}
static void cdr_engine_shutdown(void)
{
stasis_message_router_unsubscribe_and_join(stasis_router);
@ -4500,26 +4496,33 @@ static int cdr_toggle_runtime_options(void)
return mod_cfg ? 0 : -1;
}
int ast_cdr_engine_init(void)
static int unload_module(void)
{
destroy_subscriptions();
return 0;
}
static int load_module(void)
{
if (process_config(0)) {
return -1;
return AST_MODULE_LOAD_FAILURE;
}
cdr_topic = stasis_topic_create("cdr_engine");
if (!cdr_topic) {
return -1;
return AST_MODULE_LOAD_FAILURE;
}
stasis_router = stasis_message_router_create(cdr_topic);
if (!stasis_router) {
return -1;
return AST_MODULE_LOAD_FAILURE;
}
stasis_message_router_set_congestion_limits(stasis_router, -1,
10 * AST_TASKPROCESSOR_HIGH_WATER_LEVEL);
if (STASIS_MESSAGE_TYPE_INIT(cdr_sync_message_type)) {
return -1;
return AST_MODULE_LOAD_FAILURE;
}
stasis_message_router_add_cache_update(stasis_router, ast_channel_snapshot_type(), handle_channel_cache_message, NULL);
@ -4532,28 +4535,27 @@ int ast_cdr_engine_init(void)
active_cdrs_master = ao2_container_alloc_hash(AO2_ALLOC_OPT_LOCK_MUTEX, 0,
NUM_CDR_BUCKETS, cdr_master_hash_fn, NULL, cdr_master_cmp_fn);
if (!active_cdrs_master) {
return -1;
return AST_MODULE_LOAD_FAILURE;
}
ao2_container_register("cdrs_master", active_cdrs_master, cdr_master_print_fn);
active_cdrs_all = ao2_container_alloc_hash(AO2_ALLOC_OPT_LOCK_MUTEX, 0,
NUM_CDR_BUCKETS, cdr_all_hash_fn, NULL, cdr_all_cmp_fn);
if (!active_cdrs_all) {
return -1;
return AST_MODULE_LOAD_FAILURE;
}
ao2_container_register("cdrs_all", active_cdrs_all, cdr_all_print_fn);
sched = ast_sched_context_create();
if (!sched) {
ast_log(LOG_ERROR, "Unable to create schedule context.\n");
return -1;
return AST_MODULE_LOAD_FAILURE;
}
ast_cli_register_multiple(cli_commands, ARRAY_LEN(cli_commands));
ast_register_cleanup(cdr_engine_cleanup);
ast_register_atexit(cdr_engine_shutdown);
return cdr_toggle_runtime_options();
return cdr_toggle_runtime_options() ? AST_MODULE_LOAD_FAILURE : AST_MODULE_LOAD_SUCCESS;
}
void ast_cdr_engine_term(void)
@ -4596,7 +4598,7 @@ void ast_cdr_engine_term(void)
}
}
int ast_cdr_engine_reload(void)
static int reload_module(void)
{
struct module_config *old_mod_cfg;
struct module_config *mod_cfg;
@ -4622,3 +4624,11 @@ int ast_cdr_engine_reload(void)
ao2_cleanup(old_mod_cfg);
return cdr_toggle_runtime_options();
}
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER, "CDR Engine",
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
.reload = reload_module,
.load_pri = AST_MODPRI_CORE,
);

View File

@ -38,7 +38,7 @@
#include "asterisk.h"
#include "asterisk/_private.h"
#include "asterisk/module.h"
#include "asterisk/channel.h"
#include "asterisk/pbx.h"
@ -1421,7 +1421,7 @@ static void destroy_subscriptions(void)
cel_cel_forwarder = stasis_forward_cancel(cel_cel_forwarder);
}
static void cel_engine_cleanup(void)
static int unload_module(void)
{
destroy_routes();
destroy_subscriptions();
@ -1433,6 +1433,8 @@ static void cel_engine_cleanup(void)
ao2_global_obj_release(cel_dialstatus_store);
ao2_global_obj_release(cel_linkedids);
ao2_global_obj_release(cel_backends);
return 0;
}
/*!
@ -1555,7 +1557,7 @@ static int create_routes(void)
AO2_STRING_FIELD_HASH_FN(cel_linkedid, id)
AO2_STRING_FIELD_CMP_FN(cel_linkedid, id)
int ast_cel_engine_init(void)
static int load_module(void)
{
struct ao2_container *container;
@ -1563,7 +1565,7 @@ int ast_cel_engine_init(void)
ao2_global_obj_replace_unref(cel_linkedids, container);
ao2_cleanup(container);
if (!container) {
return -1;
return AST_MODULE_LOAD_FAILURE;
}
container = ao2_container_alloc(NUM_DIALSTATUS_BUCKETS,
@ -1571,26 +1573,26 @@ int ast_cel_engine_init(void)
ao2_global_obj_replace_unref(cel_dialstatus_store, container);
ao2_cleanup(container);
if (!container) {
return -1;
return AST_MODULE_LOAD_FAILURE;
}
if (STASIS_MESSAGE_TYPE_INIT(cel_generic_type)) {
return -1;
return AST_MODULE_LOAD_FAILURE;
}
if (ast_cli_register(&cli_status)) {
return -1;
return AST_MODULE_LOAD_FAILURE;
}
container = ao2_container_alloc(BACKEND_BUCKETS, cel_backend_hash_fn, cel_backend_cmp_fn);
ao2_global_obj_replace_unref(cel_backends, container);
ao2_cleanup(container);
if (!container) {
return -1;
return AST_MODULE_LOAD_FAILURE;
}
if (aco_info_init(&cel_cfg_info)) {
return -1;
return AST_MODULE_LOAD_FAILURE;
}
aco_option_register(&cel_cfg_info, "enable", ACO_EXACT, general_options, "no", OPT_BOOL_T, 1, FLDSET(struct ast_cel_general_config, enable));
@ -1602,7 +1604,7 @@ int ast_cel_engine_init(void)
struct cel_config *cel_cfg = cel_config_alloc();
if (!cel_cfg) {
return -1;
return AST_MODULE_LOAD_FAILURE;
}
/* We couldn't process the configuration so create a default config. */
@ -1614,18 +1616,17 @@ int ast_cel_engine_init(void)
}
if (create_subscriptions()) {
return -1;
return AST_MODULE_LOAD_FAILURE;
}
if (ast_cel_check_enabled() && create_routes()) {
return -1;
return AST_MODULE_LOAD_FAILURE;
}
ast_register_cleanup(cel_engine_cleanup);
return 0;
return AST_MODULE_LOAD_SUCCESS;
}
int ast_cel_engine_reload(void)
static int reload_module(void)
{
unsigned int was_enabled = ast_cel_check_enabled();
unsigned int is_enabled;
@ -1745,3 +1746,11 @@ int ast_cel_backend_register(const char *name, ast_cel_backend_cb backend_callba
ao2_ref(backend, -1);
return 0;
}
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER, "CEL Engine",
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
.reload = reload_module,
.load_pri = AST_MODPRI_CORE,
);

View File

@ -7581,22 +7581,6 @@ static int ast_channel_hash_cb(const void *obj, const int flags)
return ast_str_case_hash(name);
}
int ast_plc_reload(void)
{
struct ast_variable *var;
struct ast_flags config_flags = { 0 };
struct ast_config *cfg = ast_config_load("codecs.conf", config_flags);
if (cfg == CONFIG_STATUS_FILEMISSING || cfg == CONFIG_STATUS_FILEUNCHANGED || cfg == CONFIG_STATUS_FILEINVALID)
return 0;
for (var = ast_variable_browse(cfg, "plc"); var; var = var->next) {
if (!strcasecmp(var->name, "genericplc")) {
ast_set2_flag(&ast_options, ast_true(var->value), AST_OPT_FLAG_GENERIC_PLC);
}
}
ast_config_destroy(cfg);
return 0;
}
/*!
* \internal
* \brief Print channel object key (name).
@ -7820,8 +7804,6 @@ int ast_channels_init(void)
ast_cli_register_multiple(cli_channel, ARRAY_LEN(cli_channel));
ast_plc_reload();
ast_register_cleanup(channels_shutdown);
AST_RWLIST_HEAD_INIT(&ami_vars);

View File

@ -30,6 +30,11 @@
<support_level>core</support_level>
***/
/* This maintains the original "module reload extconfig" CLI command instead
* of replacing it with "module reload config". */
#undef AST_MODULE
#define AST_MODULE "extconfig"
#include "asterisk.h"
#include "asterisk/paths.h" /* use ast_config_AST_CONFIG_DIR */
@ -54,6 +59,7 @@
#include "asterisk/astobj2.h"
#include "asterisk/strings.h" /* for the ast_str_*() API */
#include "asterisk/netsock2.h"
#include "asterisk/module.h"
#define MAX_NESTED_COMMENTS 128
#define COMMENT_START ";--"
@ -2875,7 +2881,7 @@ static int ast_realtime_append_mapping(const char *name, const char *driver, con
return 0;
}
int read_config_maps(void)
static int reload_module(void)
{
struct ast_config *config, *configtmp;
struct ast_variable *v;
@ -4034,6 +4040,7 @@ static void config_shutdown(void)
int register_config_cli(void)
{
ast_cli_register_multiple(cli_config, ARRAY_LEN(cli_config));
/* This is separate from the module load so cleanup can happen very late. */
ast_register_cleanup(config_shutdown);
return 0;
}
@ -4120,3 +4127,26 @@ int ast_config_hook_register(const char *name,
ao2_ref(hook, -1);
return 0;
}
static int unload_module(void)
{
return 0;
}
static int load_module(void)
{
if (ast_opt_console) {
ast_verb(0, "[ Initializing Custom Configuration Options ]\n");
}
return reload_module() ? AST_MODULE_LOAD_FAILURE : AST_MODULE_LOAD_SUCCESS;
}
/* This module explicitly loads before realtime drivers. */
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER, "Configuration",
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
.reload = reload_module,
.load_pri = 0,
);

View File

@ -49,6 +49,7 @@
#include <regex.h>
#include <signal.h>
#include "asterisk/module.h"
#include "asterisk/dnsmgr.h"
#include "asterisk/linkedlists.h"
#include "asterisk/utils.h"
@ -406,7 +407,7 @@ static struct ast_cli_entry cli_reload = AST_CLI_DEFINE(handle_cli_reload, "Relo
static struct ast_cli_entry cli_refresh = AST_CLI_DEFINE(handle_cli_refresh, "Performs an immediate refresh");
static struct ast_cli_entry cli_status = AST_CLI_DEFINE(handle_cli_status, "Display the DNS manager status");
static void dnsmgr_shutdown(void)
static int unload_module(void)
{
ast_cli_unregister(&cli_reload);
ast_cli_unregister(&cli_status);
@ -424,24 +425,24 @@ static void dnsmgr_shutdown(void)
ast_mutex_unlock(&refresh_lock);
ast_sched_context_destroy(sched);
return 0;
}
int dnsmgr_init(void)
static int load_module(void)
{
if (!(sched = ast_sched_context_create())) {
ast_log(LOG_ERROR, "Unable to create schedule context.\n");
return -1;
return AST_MODULE_LOAD_FAILURE;
}
ast_cli_register(&cli_reload);
ast_cli_register(&cli_status);
ast_cli_register(&cli_refresh);
ast_register_cleanup(dnsmgr_shutdown);
return do_reload(1);
return do_reload(1) ? AST_MODULE_LOAD_FAILURE : AST_MODULE_LOAD_SUCCESS;
}
int dnsmgr_reload(void)
static int reload_module(void)
{
return do_reload(0);
}
@ -515,3 +516,11 @@ static int do_reload(int loading)
return 0;
}
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER, "DNS Manager",
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
.reload = reload_module,
.load_pri = AST_MODPRI_CORE,
);

View File

@ -57,6 +57,7 @@
#include <math.h>
#include "asterisk/module.h"
#include "asterisk/frame.h"
#include "asterisk/format_cache.h"
#include "asterisk/channel.h"
@ -1331,10 +1332,11 @@ int ast_dsp_busydetect(struct ast_dsp *dsp)
#ifndef BUSYDETECT_TONEONLY
if ((hittone >= dsp->busycount - 1) && (hitsilence >= dsp->busycount - 1) &&
(avgtone >= BUSY_MIN && avgtone <= BUSY_MAX) &&
(avgsilence >= BUSY_MIN && avgsilence <= BUSY_MAX)) {
(avgsilence >= BUSY_MIN && avgsilence <= BUSY_MAX))
#else
if ((hittone >= dsp->busycount - 1) && (avgtone >= BUSY_MIN && avgtone <= BUSY_MAX)) {
if ((hittone >= dsp->busycount - 1) && (avgtone >= BUSY_MIN && avgtone <= BUSY_MAX))
#endif
{
#ifdef BUSYDETECT_COMPARE_TONE_AND_SILENCE
if (avgtone > avgsilence) {
if (avgtone - avgtone*BUSY_PERCENT/100 <= avgsilence) {
@ -2392,31 +2394,35 @@ AST_TEST_DEFINE(test_dsp_dtmf_detect)
}
#endif
#ifdef TEST_FRAMEWORK
static void test_dsp_shutdown(void)
static int unload_module(void)
{
AST_TEST_UNREGISTER(test_dsp_fax_detect);
AST_TEST_UNREGISTER(test_dsp_dtmf_detect);
}
#endif
int ast_dsp_init(void)
{
if (_dsp_init(0)) {
return -1;
}
#ifdef TEST_FRAMEWORK
AST_TEST_REGISTER(test_dsp_fax_detect);
AST_TEST_REGISTER(test_dsp_dtmf_detect);
ast_register_cleanup(test_dsp_shutdown);
#endif
return 0;
}
int ast_dsp_reload(void)
static int load_module(void)
{
if (_dsp_init(0)) {
return AST_MODULE_LOAD_FAILURE;
}
AST_TEST_REGISTER(test_dsp_fax_detect);
AST_TEST_REGISTER(test_dsp_dtmf_detect);
return AST_MODULE_LOAD_SUCCESS;
}
static int reload_module(void)
{
return _dsp_init(1);
}
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER, "DSP",
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
.reload = reload_module,
.load_pri = AST_MODPRI_CORE,
);

View File

@ -70,6 +70,7 @@
#include <ctype.h>
#include <regex.h>
#include "asterisk/module.h"
#include "asterisk/enum.h"
#include "asterisk/dns.h"
#include "asterisk/channel.h"
@ -1008,12 +1009,25 @@ static int private_enum_init(int reload)
return 0;
}
int ast_enum_init(void)
static int load_module(void)
{
return private_enum_init(0);
return private_enum_init(0) ? AST_MODULE_LOAD_FAILURE : AST_MODULE_LOAD_SUCCESS;
}
int ast_enum_reload(void)
static int unload_module(void)
{
return 0;
}
static int reload_module(void)
{
return private_enum_init(1);
}
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER, "ENUM Support",
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
.reload = reload_module,
.load_pri = AST_MODPRI_CORE,
);

View File

@ -40,6 +40,7 @@
#include "asterisk.h"
#include "asterisk/_private.h"
#include "features_config.h"
#include <pthread.h>
#include <signal.h>
@ -1145,29 +1146,32 @@ done:
return 0;
}
/*!
* \internal
* \brief Clean up resources on Asterisk shutdown
*/
static void features_shutdown(void)
static int unload_module(void)
{
ast_features_config_shutdown();
unload_features_config();
ast_manager_unregister("Bridge");
ast_unregister_application(app_bridge);
return 0;
}
int ast_features_init(void)
static int load_module(void)
{
int res;
res = ast_features_config_init();
res = load_features_config();
res |= ast_register_application2(app_bridge, bridge_exec, NULL, NULL, NULL);
res |= ast_manager_register_xml_core("Bridge", EVENT_FLAG_CALL, action_bridge);
ast_register_cleanup(features_shutdown);
return res;
return res ? AST_MODULE_LOAD_FAILURE : AST_MODULE_LOAD_SUCCESS;
}
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER, "Call Features",
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
.reload = reload_features_config,
.load_pri = AST_MODPRI_CORE,
);

View File

@ -26,6 +26,8 @@
#include "asterisk/app.h"
#include "asterisk/cli.h"
#include "features_config.h"
/*** DOCUMENTATION
<configInfo name="features" language="en_US">
<synopsis>Features Configuration</synopsis>
@ -1971,7 +1973,7 @@ static struct ast_cli_entry cli_features_config[] = {
AST_CLI_DEFINE(handle_feature_show, "Lists configured features"),
};
void ast_features_config_shutdown(void)
void unload_features_config(void)
{
ast_custom_function_unregister(&featuremap_function);
ast_custom_function_unregister(&feature_function);
@ -1980,7 +1982,7 @@ void ast_features_config_shutdown(void)
ao2_global_obj_release(globals);
}
int ast_features_config_reload(void)
int reload_features_config(void)
{
/* Rearm the parking config options have moved warning. */
parking_warning = 0;
@ -1991,7 +1993,7 @@ int ast_features_config_reload(void)
return 0;
}
int ast_features_config_init(void)
int load_features_config(void)
{
int res;

28
main/features_config.h Normal file
View File

@ -0,0 +1,28 @@
/*
* Asterisk -- An open source telephony toolkit.
*
* Copyright (C) 2018, CFWare, LLC.
*
* Corey Farrell <git@cfware.com>
*
* See http://www.asterisk.org for more information about
* the Asterisk project. Please do not directly contact
* any of the maintainers of this project for assistance;
* the project provides a web site, mailing lists and IRC
* channels for your use.
*
* This program is free software, distributed under the terms of
* the GNU General Public License Version 2. See the LICENSE file
* at the top of the source tree.
*/
#ifndef FEATURES_CONFIG_H_
#define FEATURES_CONFIG_H_
int load_features_config(void);
int reload_features_config(void);
void unload_features_config(void);
#endif /* FEATURES_CONFIG_H_ */

View File

@ -60,7 +60,7 @@
#include "asterisk/stringfields.h"
#include "asterisk/ast_version.h"
#include "asterisk/manager.h"
#include "asterisk/_private.h"
#include "asterisk/module.h"
#include "asterisk/astobj2.h"
#include "asterisk/netsock2.h"
#include "asterisk/json.h"
@ -2264,7 +2264,7 @@ static char *handle_show_http(struct ast_cli_entry *e, int cmd, struct ast_cli_a
return CLI_SUCCESS;
}
int ast_http_reload(void)
static int reload_module(void)
{
return __ast_http_load(1);
}
@ -2273,7 +2273,7 @@ static struct ast_cli_entry cli_http[] = {
AST_CLI_DEFINE(handle_show_http, "Display HTTP server status"),
};
static void http_shutdown(void)
static int unload_module(void)
{
struct http_uri_redirect *redirect;
ast_cli_unregister_multiple(cli_http, ARRAY_LEN(cli_http));
@ -2295,14 +2295,23 @@ static void http_shutdown(void)
ast_free(redirect);
}
AST_RWLIST_UNLOCK(&uri_redirects);
return 0;
}
int ast_http_init(void)
static int load_module(void)
{
ast_http_uri_link(&statusuri);
ast_http_uri_link(&staticuri);
ast_cli_register_multiple(cli_http, ARRAY_LEN(cli_http));
ast_register_cleanup(http_shutdown);
return __ast_http_load(0);
return __ast_http_load(0) ? AST_MODULE_LOAD_FAILURE : AST_MODULE_LOAD_SUCCESS;
}
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER, "Built-in HTTP Server",
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
.reload = reload_module,
.load_pri = AST_MODPRI_CORE,
);

View File

@ -1114,7 +1114,7 @@ static int ast_tone_zone_cmp(void *obj, void *arg, int flags)
* \internal
* \brief Clean up resources on Asterisk shutdown
*/
static void indications_shutdown(void)
static int unload_module(void)
{
ast_cli_unregister_multiple(cli_indications, ARRAY_LEN(cli_indications));
if (default_tone_zone) {
@ -1125,29 +1125,38 @@ static void indications_shutdown(void)
ao2_ref(ast_tone_zones, -1);
ast_tone_zones = NULL;
}
return 0;
}
/*! \brief Load indications module */
int ast_indications_init(void)
static int load_module(void)
{
ast_tone_zones = ao2_container_alloc(NUM_TONE_ZONE_BUCKETS,
ast_tone_zone_hash, ast_tone_zone_cmp);
if (!ast_tone_zones) {
return -1;
return AST_MODULE_LOAD_FAILURE;
}
if (load_indications(0)) {
return -1;
return AST_MODULE_LOAD_FAILURE;
}
ast_cli_register_multiple(cli_indications, ARRAY_LEN(cli_indications));
ast_register_cleanup(indications_shutdown);
return 0;
return AST_MODULE_LOAD_SUCCESS;
}
/*! \brief Reload indications module */
int ast_indications_reload(void)
static int reload_module(void)
{
return load_indications(1);
}
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER, "Indication Tone Handling",
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
.reload = reload_module,
.load_pri = AST_MODPRI_CORE,
);

View File

@ -42,19 +42,12 @@
#include "asterisk/config.h"
#include "asterisk/channel.h"
#include "asterisk/term.h"
#include "asterisk/acl.h"
#include "asterisk/manager.h"
#include "asterisk/cdr.h"
#include "asterisk/enum.h"
#include "asterisk/http.h"
#include "asterisk/io.h"
#include "asterisk/lock.h"
#include "asterisk/features_config.h"
#include "asterisk/dsp.h"
#include "asterisk/udptl.h"
#include "asterisk/vector.h"
#include "asterisk/app.h"
#include "asterisk/test.h"
#include "asterisk/sounds_index.h"
#include "asterisk/cli.h"
#include <dlfcn.h>
@ -513,10 +506,11 @@ void ast_module_register(const struct ast_module_info *info)
struct ast_module *mod;
if (!loader_ready) {
mod = ast_calloc(1, sizeof(*mod) + strlen(info->name) + 1);
mod = ast_std_calloc(1, sizeof(*mod) + strlen(info->name) + 1);
if (!mod) {
/* We haven't even reached main() yet, if we can't
* allocate memory at this point just give up. */
fprintf(stderr, "Allocation failure during startup.\n");
exit(2);
}
strcpy(mod->resource, info->name); /* safe */
@ -580,7 +574,11 @@ static void module_destroy(struct ast_module *mod)
AST_LIST_HEAD_DESTROY(&mod->users);
ao2_cleanup(mod->ref_debug);
ast_free(mod);
if (mod->flags.builtin) {
ast_std_free(mod);
} else {
ast_free(mod);
}
}
void ast_module_unregister(const struct ast_module_info *info)
@ -690,33 +688,6 @@ void __ast_module_user_hangup_all(struct ast_module *mod)
ast_update_use_count();
}
/*! \note
* In addition to modules, the reload command handles some extra keywords
* which are listed here together with the corresponding handlers.
* This table is also used by the command completion code.
*/
static struct reload_classes {
const char *name;
int (*reload_fn)(void);
} reload_classes[] = { /* list in alpha order, longest match first for cli completion */
{ "acl", ast_named_acl_reload },
{ "cdr", ast_cdr_engine_reload },
{ "cel", ast_cel_engine_reload },
{ "dnsmgr", dnsmgr_reload },
{ "dsp", ast_dsp_reload},
{ "extconfig", read_config_maps },
{ "enum", ast_enum_reload },
{ "features", ast_features_config_reload },
{ "http", ast_http_reload },
{ "indications", ast_indications_reload },
{ "logger", logger_reload },
{ "manager", reload_manager },
{ "plc", ast_plc_reload },
{ "sounds", ast_sounds_reindex },
{ "udptl", ast_udptl_reload },
{ NULL, NULL }
};
static int printdigest(const unsigned char *d)
{
int x, pos;
@ -1160,16 +1131,6 @@ char *ast_module_helper(const char *line, const char *word, int pos, int state,
return NULL;
}
if (type == AST_MODULE_HELPER_RELOAD) {
int idx;
for (idx = 0; reload_classes[idx].name; idx++) {
if (!strncasecmp(word, reload_classes[idx].name, wordlen) && ++which > state) {
return ast_strdup(reload_classes[idx].name);
}
}
}
AST_DLLIST_LOCK(&module_list);
AST_DLLIST_TRAVERSE(&module_list, mod, entry) {
if (!module_matches_helper_type(mod, type)) {
@ -1345,7 +1306,6 @@ enum ast_module_reload_result ast_module_reload(const char *name)
{
struct ast_module *cur;
enum ast_module_reload_result res = AST_MODULE_RELOAD_NOT_FOUND;
int i;
size_t name_baselen = name ? resource_name_baselen(name) : 0;
/* If we aren't fully booted, we just pretend we reloaded but we queue this
@ -1380,22 +1340,6 @@ enum ast_module_reload_result ast_module_reload(const char *name)
}
}
/* Call "predefined" reload here first */
for (i = 0; reload_classes[i].name; i++) {
if (!name || !strcasecmp(name, reload_classes[i].name)) {
if (reload_classes[i].reload_fn() == AST_MODULE_LOAD_SUCCESS) {
res = AST_MODULE_RELOAD_SUCCESS;
}
}
}
if (name && res == AST_MODULE_RELOAD_SUCCESS) {
if (ast_opt_lock_confdir) {
ast_unlock_path(ast_config_AST_CONFIG_DIR);
}
goto module_reload_done;
}
AST_DLLIST_LOCK(&module_list);
AST_DLLIST_TRAVERSE(&module_list, cur, entry) {
const struct ast_module_info *info = cur->info;
@ -1516,6 +1460,10 @@ static enum ast_module_load_result start_resource(struct ast_module *mod)
}
mod->flags.running = 1;
if (mod->flags.builtin) {
/* Built-in modules cannot be unloaded. */
ast_module_shutdown_ref(mod);
}
ast_update_use_count();
break;
@ -1881,6 +1829,19 @@ int load_modules(unsigned int preload_only)
ast_module_register(resource_being_loaded->info);
}
if (!preload_only) {
struct ast_module *mod;
/* Add all built-in modules to the load order. */
AST_DLLIST_TRAVERSE(&module_list, mod, entry) {
if (!mod->flags.builtin) {
continue;
}
add_to_load_order(mod->resource, &load_order, 0);
}
}
cfg = ast_config_load2(AST_MODULE_CONFIG, "" /* core, can't reload */, config_flags);
if (cfg == CONFIG_STATUS_FILEMISSING || cfg == CONFIG_STATUS_FILEINVALID) {
ast_log(LOG_WARNING, "No '%s' found, no modules will be loaded.\n", AST_MODULE_CONFIG);

View File

@ -49,6 +49,7 @@
#include <fcntl.h>
#include "asterisk/_private.h"
#include "asterisk/module.h"
#include "asterisk/paths.h" /* use ast_config_AST_LOG_DIR */
#include "asterisk/logger.h"
#include "asterisk/lock.h"
@ -1125,16 +1126,6 @@ static int reload_logger(int rotate, const char *altconf)
return res;
}
/*! \brief Reload the logger module without rotating log files (also used from loader.c during
a full Asterisk reload) */
int logger_reload(void)
{
if (reload_logger(0, NULL)) {
return RESULT_FAILURE;
}
return RESULT_SUCCESS;
}
static char *handle_logger_reload(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
{
switch (cmd) {
@ -2369,3 +2360,27 @@ int ast_logger_get_queue_limit(void)
{
return logger_queue_limit;
}
static int reload_module(void)
{
return reload_logger(0, NULL);
}
static int unload_module(void)
{
return 0;
}
static int load_module(void)
{
return AST_MODULE_LOAD_SUCCESS;
}
/* Logger is initialized separate from the module loader, only reload_module does anything. */
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER, "Logger",
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
.reload = reload_module,
.load_pri = 0,
);

View File

@ -2710,6 +2710,8 @@ static char *handle_showmaneventq(struct ast_cli_entry *e, int cmd, struct ast_c
return CLI_SUCCESS;
}
static int reload_module(void);
/*! \brief CLI command manager reload */
static char *handle_manager_reload(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
{
@ -2726,7 +2728,7 @@ static char *handle_manager_reload(struct ast_cli_entry *e, int cmd, struct ast_
if (a->argc > 2) {
return CLI_SHOWUSAGE;
}
reload_manager();
reload_module();
return CLI_SUCCESS;
}
@ -8971,8 +8973,6 @@ static int __init_manager(int reload, int by_external_config)
#endif
int res;
ast_register_cleanup(manager_shutdown);
res = STASIS_MESSAGE_TYPE_INIT(ast_manager_get_generic_type);
if (res != 0) {
return -1;
@ -9455,12 +9455,19 @@ static void acl_change_stasis_cb(void *data, struct stasis_subscription *sub,
__init_manager(1, 1);
}
int init_manager(void)
static int unload_module(void)
{
return __init_manager(0, 0);
return 0;
}
int reload_manager(void)
static int load_module(void)
{
ast_register_cleanup(manager_shutdown);
return __init_manager(0, 0) ? AST_MODULE_LOAD_FAILURE : AST_MODULE_LOAD_SUCCESS;
}
static int reload_module(void)
{
return __init_manager(1, 0);
}
@ -9557,3 +9564,12 @@ ast_manager_event_blob_create(
return ev;
}
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER, "Asterisk Manager Interface",
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
.reload = reload_module,
.load_pri = AST_MODPRI_CORE,
.requires = "http",
);

View File

@ -27,6 +27,11 @@
* Olle E. Johansson <oej@edvina.net>
*/
/* This maintains the original "module reload acl" CLI command instead
* of replacing it with "module reload named_acl". */
#undef AST_MODULE
#define AST_MODULE "acl"
#include "asterisk.h"
#include "asterisk/config.h"
@ -395,36 +400,6 @@ publish_failure:
return -1;
}
/*!
* \internal
* \brief reload configuration for named ACLs
*
* \param fd file descriptor for CLI client
*/
int ast_named_acl_reload(void)
{
enum aco_process_status status;
status = aco_process_config(&cfg_info, 1);
if (status == ACO_PROCESS_ERROR) {
ast_log(LOG_WARNING, "Could not reload ACL config\n");
return 0;
}
if (status == ACO_PROCESS_UNCHANGED) {
/* We don't actually log anything if the config was unchanged,
* but we don't need to send a config change event either.
*/
return 0;
}
/* We need to push an ACL change event with no ACL name so that all subscribers update with all ACLs */
publish_acl_change("");
return 0;
}
/*!
* \internal
* \brief secondary handler for the 'acl show <name>' command (with arg)
@ -552,32 +527,64 @@ static struct ast_cli_entry cli_named_acl[] = {
AST_CLI_DEFINE(handle_show_named_acl_cmd, "Show a named ACL or list all named ACLs"),
};
static void named_acl_cleanup(void)
static int reload_module(void)
{
enum aco_process_status status;
status = aco_process_config(&cfg_info, 1);
if (status == ACO_PROCESS_ERROR) {
ast_log(LOG_WARNING, "Could not reload ACL config\n");
return 0;
}
if (status == ACO_PROCESS_UNCHANGED) {
/* We don't actually log anything if the config was unchanged,
* but we don't need to send a config change event either.
*/
return 0;
}
/* We need to push an ACL change event with no ACL name so that all subscribers update with all ACLs */
publish_acl_change("");
return 0;
}
static int unload_module(void)
{
ast_cli_unregister_multiple(cli_named_acl, ARRAY_LEN(cli_named_acl));
STASIS_MESSAGE_TYPE_CLEANUP(ast_named_acl_change_type);
aco_info_destroy(&cfg_info);
ao2_global_obj_release(globals);
return 0;
}
int ast_named_acl_init()
static int load_module(void)
{
ast_cli_register_multiple(cli_named_acl, ARRAY_LEN(cli_named_acl));
if (aco_info_init(&cfg_info)) {
return AST_MODULE_LOAD_FAILURE;
}
STASIS_MESSAGE_TYPE_INIT(ast_named_acl_change_type);
ast_register_cleanup(named_acl_cleanup);
if (aco_info_init(&cfg_info)) {
return 0;
}
/* Register the per level options. */
aco_option_register(&cfg_info, "permit", ACO_EXACT, named_acl_types, NULL, OPT_ACL_T, 1, FLDSET(struct named_acl, ha));
aco_option_register(&cfg_info, "deny", ACO_EXACT, named_acl_types, NULL, OPT_ACL_T, 0, FLDSET(struct named_acl, ha));
aco_process_config(&cfg_info, 0);
return 0;
ast_cli_register_multiple(cli_named_acl, ARRAY_LEN(cli_named_acl));
return AST_MODULE_LOAD_SUCCESS;
}
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER, "Named ACL system",
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
.reload = reload_module,
.load_pri = AST_MODPRI_CORE,
);

View File

@ -38,6 +38,8 @@
#include <math.h>
#include "asterisk/config.h"
#include "asterisk/module.h"
#include "asterisk/plc.h"
#if !defined(FALSE)
@ -246,3 +248,43 @@ plc_state_t *plc_init(plc_state_t *s)
}
/*- End of function --------------------------------------------------------*/
/*- End of file ------------------------------------------------------------*/
static int reload_module(void)
{
struct ast_variable *var;
struct ast_flags config_flags = { 0 };
struct ast_config *cfg = ast_config_load("codecs.conf", config_flags);
if (cfg == CONFIG_STATUS_FILEMISSING || cfg == CONFIG_STATUS_FILEUNCHANGED || cfg == CONFIG_STATUS_FILEINVALID) {
return 0;
}
for (var = ast_variable_browse(cfg, "plc"); var; var = var->next) {
if (!strcasecmp(var->name, "genericplc")) {
ast_set2_flag(&ast_options, ast_true(var->value), AST_OPT_FLAG_GENERIC_PLC);
}
}
ast_config_destroy(cfg);
return 0;
}
static int load_module(void)
{
reload_module();
return AST_MODULE_LOAD_SUCCESS;
}
static int unload_module(void)
{
return 0;
}
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER, "PLC",
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
.reload = reload_module,
.load_pri = AST_MODPRI_CORE,
);

View File

@ -34,7 +34,7 @@
#include "asterisk/sounds_index.h"
#include "asterisk/file.h"
#include "asterisk/cli.h"
#include "asterisk/_private.h"
#include "asterisk/module.h"
#include "asterisk/stasis_message_router.h"
#include "asterisk/stasis_system.h"
@ -111,7 +111,7 @@ static int update_index_cb(void *obj, void *arg, int flags)
AST_MUTEX_DEFINE_STATIC(reload_lock);
int ast_sounds_reindex(void)
static int reload_module(void)
{
RAII_VAR(struct ast_str *, sounds_dir, NULL, ast_free);
RAII_VAR(struct ao2_container *, languages, NULL, ao2_cleanup);
@ -273,13 +273,15 @@ static struct ast_cli_entry cli_sounds[] = {
AST_CLI_DEFINE(handle_cli_sound_show, "Shows details about a specific sound"),
};
static void sounds_cleanup(void)
static int unload_module(void)
{
stasis_message_router_unsubscribe_and_join(sounds_system_router);
sounds_system_router = NULL;
ast_cli_unregister_multiple(cli_sounds, ARRAY_LEN(cli_sounds));
ao2_cleanup(sounds_index);
sounds_index = NULL;
return 0;
}
static void format_update_cb(void *data, struct stasis_subscription *sub,
@ -287,21 +289,21 @@ static void format_update_cb(void *data, struct stasis_subscription *sub,
{
/* Reindexing during shutdown is pointless. */
if (!ast_shutting_down()) {
ast_sounds_reindex();
reload_module();
}
}
int ast_sounds_index_init(void)
static int load_module(void)
{
int res = 0;
if (ast_sounds_reindex()) {
return -1;
if (reload_module()) {
return AST_MODULE_LOAD_FAILURE;
}
res |= ast_cli_register_multiple(cli_sounds, ARRAY_LEN(cli_sounds));
sounds_system_router = stasis_message_router_create(ast_system_topic());
if (!sounds_system_router) {
return -1;
return AST_MODULE_LOAD_FAILURE;
}
if (ast_format_register_type()) {
@ -320,15 +322,19 @@ int ast_sounds_index_init(void)
NULL);
}
if (res) {
return -1;
}
ast_register_cleanup(sounds_cleanup);
return 0;
return res ? AST_MODULE_LOAD_FAILURE : AST_MODULE_LOAD_SUCCESS;
}
struct ast_media_index *ast_sounds_get_index(void)
{
return ao2_bump(sounds_index);
}
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER, "Sounds Index",
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
.reload = reload_module,
/* Load after the format modules to reduce processing during startup. */
.load_pri = AST_MODPRI_APP_DEPEND + 1,
);

View File

@ -67,6 +67,7 @@
#include <signal.h>
#include <fcntl.h>
#include "asterisk/module.h"
#include "asterisk/udptl.h"
#include "asterisk/frame.h"
#include "asterisk/channel.h"
@ -1355,9 +1356,10 @@ static int udptl_pre_apply_config(void) {
return 0;
}
int ast_udptl_reload(void)
static int reload_module(void)
{
__ast_udptl_reload(1);
return 0;
}
@ -1365,17 +1367,19 @@ int ast_udptl_reload(void)
* \internal
* \brief Clean up resources on Asterisk shutdown
*/
static void udptl_shutdown(void)
static int unload_module(void)
{
ast_cli_unregister_multiple(cli_udptl, ARRAY_LEN(cli_udptl));
ao2_t_global_obj_release(globals, "Unref udptl global container in shutdown");
aco_info_destroy(&cfg_info);
return 0;
}
void ast_udptl_init(void)
static int load_module(void)
{
if (aco_info_init(&cfg_info)) {
return;
return AST_MODULE_LOAD_FAILURE;
}
aco_option_register(&cfg_info, "udptlstart", ACO_EXACT, general_options, __stringify(DEFAULT_UDPTLSTART),
@ -1407,5 +1411,13 @@ void ast_udptl_init(void)
ast_cli_register_multiple(cli_udptl, ARRAY_LEN(cli_udptl));
ast_register_cleanup(udptl_shutdown);
return AST_MODULE_LOAD_SUCCESS;
}
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER, "UDPTL",
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
.reload = reload_module,
.load_pri = AST_MODPRI_CORE,
);

View File

@ -1196,6 +1196,6 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_
.unload = unload_module,
.reload = reload_module,
.optional_modules = "res_http_websocket",
.requires = "res_stasis",
.requires = "http,res_stasis",
.load_pri = AST_MODPRI_APP_DEPEND,
);

View File

@ -650,5 +650,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Realtime Curl configu
.unload = unload_module,
.reload = reload_module,
.load_pri = AST_MODPRI_REALTIME_DRIVER,
.requires = "res_curl,func_curl",
.requires = "extconfig,res_curl,func_curl",
);

View File

@ -1999,4 +1999,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "LDAP realtime interfa
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_REALTIME_DRIVER,
.requires = "extconfig",
);

View File

@ -1238,4 +1238,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Realtime ODBC configu
.unload = unload_module,
.reload = reload_module,
.load_pri = AST_MODPRI_REALTIME_DRIVER,
.requires = "extconfig,res_odbc",
);

View File

@ -1720,4 +1720,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "PostgreSQL RealTime C
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_REALTIME_DRIVER,
.requires = "extconfig",
);

View File

@ -1772,9 +1772,16 @@ static int load_module(void)
return AST_MODULE_LOAD_SUCCESS;
}
/*
* This module should require "cdr" to enforce startup/shutdown ordering but it
* loads at REALTIME_DRIVER priority which would cause "cdr" to load too early.
*
* ast_cdr_register / ast_cdr_unregister is safe for use while "cdr" is not running.
*/
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Realtime SQLite configuration",
.support_level = AST_MODULE_SUPPORT_DEPRECATED,
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_REALTIME_DRIVER,
.requires = "extconfig",
);

View File

@ -1393,4 +1393,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "SQLite 3 realtime con
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_REALTIME_DRIVER,
.requires = "extconfig",
);

View File

@ -513,4 +513,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "HTTP POST support",
.load = load_module,
.unload = unload_module,
.reload = reload,
.requires = "http",
);

View File

@ -1478,4 +1478,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_CHANNEL_DEPEND,
.requires = "http",
);

View File

@ -1498,6 +1498,7 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_CHANNEL_DEPEND,
.requires = "http",
);
/**** Public API for register/unregister, set defaults, and add extension. ****/

View File

@ -5213,6 +5213,6 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_
.unload = unload_module,
.reload = reload_module,
.load_pri = AST_MODPRI_CHANNEL_DEPEND - 5,
.requires = "res_pjproject",
.requires = "dnsmgr,res_pjproject",
.optional_modules = "res_statsd",
);

View File

@ -1048,5 +1048,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "PJSIP T.38 UDPTL Supp
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_CHANNEL_DRIVER,
.requires = "res_pjsip,res_pjsip_session",
.requires = "res_pjsip,res_pjsip_session,udptl",
);