* Declare 'requires' and 'enhances' text fields on module info structure.
* Rename 'nonoptreq' to 'optional_modules'.
* Update doxygen comments.
Still need to investigate dependencies among modules I cannot compile.
Change-Id: I3ad9547a0a6442409ff4e352a6d897bef2cc04bf
.support_level = AST_MODULE_SUPPORT_EXTENDED,
.load = load_module,
.unload = unload_module,
- .nonoptreq = "res_adsi",
+ .requires = "res_adsi",
);
.support_level = AST_MODULE_SUPPORT_EXTENDED,
.load = load_module,
.unload = unload_module,
- .nonoptreq = "res_adsi",
+ .requires = "res_adsi",
);
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_DEVSTATE_CONSUMER,
- .nonoptreq = "res_monitor",
+ .optional_modules = "res_monitor",
);
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
- .nonoptreq = "res_speech",
+ .requires = "res_speech",
);
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_APP_DEPEND,
- .nonoptreq = "res_agi",
+ .optional_modules = "res_agi",
);
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
- .nonoptreq = "res_stasis",
+ .requires = "res_stasis",
);
.load = load_module,
.unload = unload_module,
.reload = reload,
- .nonoptreq = "res_adsi,res_smdi",
+ .optional_modules = "res_adsi,res_smdi",
);
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_CHANNEL_DRIVER,
- .nonoptreq = "res_smdi",
+ .optional_modules = "res_smdi",
);
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_CHANNEL_DRIVER,
- .nonoptreq = "res_crypto",
+ .optional_modules = "res_crypto",
);
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_CHANNEL_DRIVER,
- .nonoptreq = "res_pktccops",
+ .optional_modules = "res_pktccops",
);
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_CHANNEL_DRIVER,
+ .requires = "res_xmpp",
);
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_CHANNEL_DRIVER,
+ .requires = "res_pjsip,res_pjsip_session",
);
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_CHANNEL_DRIVER,
+ .requires = "res_rtp_multicast",
);
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_CHANNEL_DRIVER,
- .nonoptreq = "res_crypto,res_http_websocket",
+ .optional_modules = "res_crypto,res_http_websocket",
);
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
- .nonoptreq = "res_crypto",
+ .requires = "res_crypto",
);
return ast_custom_function_register(&pjsip_aor_function);
}
-AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Get information about a PJSIP AOR");
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Get information about a PJSIP AOR",
+ .support_level = AST_MODULE_SUPPORT_CORE,
+ .load = load_module,
+ .unload = unload_module,
+ .requires = "res_pjsip",
+);
return ast_custom_function_register(&pjsip_contact_function);
}
-AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Get information about a PJSIP contact");
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Get information about a PJSIP contact",
+ .support_level = AST_MODULE_SUPPORT_CORE,
+ .load = load_module,
+ .unload = unload_module,
+ .requires = "res_pjsip",
+);
return ast_custom_function_register(&pjsip_endpoint_function);
}
-AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Get information about a PJSIP endpoint");
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Get information about a PJSIP endpoint",
+ .support_level = AST_MODULE_SUPPORT_CORE,
+ .load = load_module,
+ .unload = unload_module,
+ .requires = "res_pjsip",
+);
};
struct ast_module_info {
-
/*!
* The 'self' pointer for a module; it will be set by the loader before
* it calls the module's load_module() entrypoint, and used by various
* other macros that need to identify the module.
*/
-
struct ast_module *self;
- enum ast_module_load_result (*load)(void); /*!< register stuff etc. Optional. */
- int (*reload)(void); /*!< config etc. Optional. */
- int (*unload)(void); /*!< unload. called with the module locked */
- const char *name; /*!< name of the module for loader reference and CLI commands */
- const char *description; /*!< user friendly description of the module. */
+ /*! Register stuff etc. Optional. */
+ enum ast_module_load_result (*load)(void);
+ /*! Config etc. Optional. */
+ int (*reload)(void);
+ /*! Unload. called with the module locked */
+ int (*unload)(void);
+ /*! Name of the module for loader reference and CLI commands */
+ const char *name;
+ /*! User friendly description of the module. */
+ const char *description;
/*!
* This holds the ASTERISK_GPL_KEY, signifiying that you agree to the terms of
* the Asterisk license as stated in the ASTERISK_GPL_KEY. Your module will not
* load if it does not return the EXACT key string.
*/
-
const char *key;
unsigned int flags;
* on load. */
unsigned char load_pri;
- /*! Modules which should be loaded first, in comma-separated string format.
- * These are only required for loading, when the optional_api header file
- * detects that the compiler does not support the optional API featureset. */
- const char *nonoptreq;
+ /*! Modules which must always be started first, in comma-separated string format. */
+ const char *requires;
+
+ /*!
+ * \brief Comma-separated list of optionally required modules.
+ *
+ * The listed modules are optional, but load order is enforced. For example
+ * app_voicemail optionally requires res_adsi. This means that app_voicemail
+ * will happily load without res_adsi, but if both are being loaded the module
+ * loader will force res_adsi to start first.
+ */
+ const char *optional_modules;
+
+ /*!
+ * \brief Modules that we provide enhanced functionality for.
+ *
+ * This is similar to a "requires" but specifies that we add functionality to
+ * the other modules. Any module that requires something we "enhances" will
+ * also require us, but only if we are dlopen'ed.
+ *
+ * Example:
+ * - res_fax_spandsp has .enhances = "res_fax".
+ * - res_my_module has .requires = "res_fax" but has no direct knowledge
+ * of res_fax_spandsp.
+ *
+ * This forces the following startup order among the 3 modules:
+ * 1) res_fax starts.
+ * 2) res_fax_spandsp starts, holds a reference to res_fax.
+ * 3) res_mymod starts, holds a reference to res_fax and res_fax_spandsp.
+ *
+ * If res_fax_spandsp were not being loaded res_mymod would load with
+ * res_fax only. If res_fax_spandsp were later loaded res_mymod would
+ * get a reference to it.
+ */
+ const char *enhances;
+
/*! The support level for the given module */
enum ast_module_support_level support_level;
};
AST_BUILDOPT_SUM, \
load_pri, \
NULL, \
+ NULL, \
+ NULL, \
support_level, \
}; \
static void __attribute__((constructor)) __reg_module(void) \
.load = load_module,
.unload = unload_module,
.reload = reload,
+ .requires = "res_ael_share",
);
#ifdef AAL_ARGCHECK
.load = load_module,
.unload = unload_module,
.reload = reload,
- .nonoptreq = "res_crypto",
+ .optional_modules = "res_crypto",
);
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_APP_DEPEND,
+ .requires = "res_speech",
);
.load = load_module,
.unload = unload_module,
.reload = reload_module,
- .nonoptreq = "res_http_websocket",
+ .optional_modules = "res_http_websocket",
+ .requires = "res_stasis",
.load_pri = AST_MODPRI_APP_DEPEND,
);
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
- .nonoptreq = "res_ari,res_stasis",
+ .requires = "res_ari,res_ari_model,res_stasis",
);
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
- .nonoptreq = "res_ari,res_stasis",
+ .requires = "res_ari,res_ari_model,res_stasis",
);
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
- .nonoptreq = "res_ari,res_stasis",
+ .requires = "res_ari,res_ari_model,res_stasis",
);
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
- .nonoptreq = "res_ari,res_stasis",
+ .requires = "res_ari,res_ari_model,res_stasis",
);
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
- .nonoptreq = "res_ari,res_stasis",
+ .requires = "res_ari,res_ari_model,res_stasis",
);
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
- .nonoptreq = "res_ari,res_stasis",
+ .requires = "res_ari,res_ari_model,res_stasis",
);
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
- .nonoptreq = "res_ari,res_stasis",
+ .requires = "res_ari,res_ari_model,res_stasis",
);
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
- .nonoptreq = "res_ari,res_stasis",
+ .requires = "res_ari,res_ari_model,res_stasis",
);
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
- .nonoptreq = "res_ari,res_stasis",
+ .requires = "res_ari,res_ari_model,res_stasis",
);
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
- .nonoptreq = "res_ari,res_stasis",
+ .requires = "res_ari,res_ari_model,res_stasis",
);
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
- .nonoptreq = "res_ari,res_stasis",
+ .requires = "res_ari,res_ari_model,res_stasis",
);
.support_level = AST_MODULE_SUPPORT_EXTENDED,
.load = load_module,
.unload = unload_module,
- .nonoptreq = "res_statsd"
+ .requires = "res_statsd"
);
.support_level = AST_MODULE_SUPPORT_EXTENDED,
.load = load_module,
.unload = unload_module,
- .nonoptreq = "res_statsd"
+ .requires = "res_statsd"
);
.support_level = AST_MODULE_SUPPORT_EXTENDED,
.load = load_module,
.unload = unload_module,
+ .enhances = "res_fax",
);
.support_level = AST_MODULE_SUPPORT_EXTENDED,
.load = load_module,
.unload = unload_module,
+ .requires = "res_hep,res_pjsip",
);
.support_level = AST_MODULE_SUPPORT_EXTENDED,
.load = load_module,
.unload = unload_module,
+ .requires = "res_hep",
);
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
+ .load_pri = AST_MODPRI_CHANNEL_DEPEND - 5,
+ .requires = "res_mwi_external",
);
.unload = unload_module,
.reload = reload_module,
.load_pri = AST_MODPRI_CHANNEL_DEPEND - 5,
+ .requires = "res_pjproject",
);
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_APP_DEPEND,
+ .requires = "res_pjsip",
);
.unload = unload_module,
.reload = reload_module,
.load_pri = AST_MODPRI_CHANNEL_DEPEND - 5,
+ .requires = "res_pjsip",
);
/*** MODULEINFO
<depend>pjproject</depend>
<depend>res_pjsip</depend>
- <depend>res_pjsip_session</depend>
<support_level>core</support_level>
***/
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_APP_DEPEND,
+ .requires = "res_pjsip",
);
<depend>pjproject</depend>
<depend>res_pjsip</depend>
<depend>res_pjsip_pubsub</depend>
- <depend>res_pjsip_exten_state</depend>
<support_level>core</support_level>
***/
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_CHANNEL_DEPEND,
+ .requires = "res_pjsip,res_pjsip_pubsub",
);
/*** MODULEINFO
<depend>pjproject</depend>
<depend>res_pjsip</depend>
- <depend>res_pjsip_session</depend>
<support_level>core</support_level>
***/
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_APP_DEPEND,
+ .requires = "res_pjsip",
);
/*** MODULEINFO
<depend>pjproject</depend>
<depend>res_pjsip</depend>
- <depend>res_pjsip_session</depend>
<support_level>core</support_level>
***/
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_APP_DEPEND,
+ .requires = "res_pjsip",
);
/*** MODULEINFO
<depend>pjproject</depend>
<depend>res_pjsip</depend>
- <depend>res_pjsip_session</depend>
<support_level>core</support_level>
***/
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_APP_DEPEND,
+ .requires = "res_pjsip",
);
/*** MODULEINFO
<depend>pjproject</depend>
<depend>res_pjsip</depend>
- <depend>res_pjsip_session</depend>
<support_level>core</support_level>
***/
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_APP_DEPEND,
+ .requires = "res_pjsip",
);
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
+ .requires = "res_pjsip",
);
.reload = reload_module,
.unload = unload_module,
.load_pri = AST_MODPRI_CHANNEL_DEPEND - 4,
+ .requires = "res_pjsip",
);
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_CHANNEL_DEPEND - 4,
+ .requires = "res_pjsip",
);
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_CHANNEL_DEPEND + 5,
+ .requires = "res_pjsip,res_pjsip_pubsub,res_pjsip_outbound_publish",
);
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_APP_DEPEND,
+ .requires = "res_pjsip,res_pjsip_session",
);
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_APP_DEPEND,
+ .requires = "res_pjsip",
);
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_APP_DEPEND,
+ .requires = "res_pjsip",
);
/*** MODULEINFO
<depend>pjproject</depend>
<depend>res_pjsip</depend>
- <depend>res_pjsip_session</depend>
<support_level>core</support_level>
***/
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_APP_DEPEND,
+ .requires = "res_pjsip",
);
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_CHANNEL_DEPEND + 5,
+ .requires = "res_pjsip,res_pjsip_pubsub",
);
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_CHANNEL_DEPEND,
+ .requires = "res_pjsip,res_pjsip_pubsub",
);
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_APP_DEPEND,
+ .requires = "res_pjsip",
);
.reload = reload_module,
.unload = unload_module,
.load_pri = AST_MODPRI_APP_DEPEND,
+ .requires = "res_pjsip",
);
/*** MODULEINFO
<depend>pjproject</depend>
<depend>res_pjsip</depend>
- <depend>res_pjsip_session</depend>
<support_level>core</support_level>
***/
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_APP_DEPEND,
+ .requires = "res_pjsip",
);
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_CHANNEL_DEPEND,
+ .requires = "res_pjsip",
);
.reload = reload_module,
.unload = unload_module,
.load_pri = AST_MODPRI_CHANNEL_DEPEND,
+ .requires = "res_pjproject,res_pjsip",
);
.reload = reload_module,
.unload = unload_module,
.load_pri = AST_MODPRI_APP_DEPEND,
+ .requires = "res_pjsip",
);
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_APP_DEPEND,
+ .requires = "res_pjsip",
);
.reload = reload_module,
.unload = unload_module,
.load_pri = AST_MODPRI_APP_DEPEND,
+ .requires = "res_pjsip,res_phoneprov",
);
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_CHANNEL_DEPEND,
+ .requires = "res_pjsip,res_pjsip_pubsub",
);
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_CHANNEL_DEPEND,
+ .requires = "res_pjsip,res_pjsip_pubsub",
);
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_CHANNEL_DEPEND,
+ .requires = "res_pjsip,res_pjsip_pubsub",
);
.reload = reload_module,
.unload = unload_module,
.load_pri = AST_MODPRI_CHANNEL_DEPEND + 5,
+ .requires = "res_pjsip,res_pjsip_outbound_publish,res_pjsip_pubsub",
);
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_CHANNEL_DEPEND,
+ .requires = "res_pjsip",
);
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_APP_DEPEND,
+ .requires = "res_pjsip,res_pjsip_session,res_pjsip_pubsub",
);
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_CHANNEL_DEPEND - 3,
+ .requires = "res_pjproject,res_pjsip",
);
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_APP_DEPEND,
+ .requires = "res_pjsip",
);
/*** MODULEINFO
<depend>pjproject</depend>
<depend>res_pjsip</depend>
- <depend>res_pjsip_session</depend>
<support_level>core</support_level>
***/
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_APP_DEPEND,
+ .requires = "res_pjsip",
);
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_CHANNEL_DRIVER,
+ .requires = "res_pjsip,res_pjsip_session",
);
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_APP_DEPEND,
+ .requires = "res_pjsip,res_pjsip_session",
);
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_APP_DEPEND,
+ .requires = "res_pjsip",
);
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_APP_DEPEND,
+ .requires = "res_pjsip",
);
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_CHANNEL_DRIVER,
+ .requires = "res_pjsip,res_pjsip_session",
);
.reload = reload_module,
.unload = unload_module,
.load_pri = AST_MODPRI_CHANNEL_DEPEND - 4,
+ .requires = "res_pjsip",
);
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_APP_DEPEND,
+ .requires = "res_pjsip,res_http_websocket",
);
<depend>pjproject</depend>
<depend>res_pjsip</depend>
<depend>res_pjsip_pubsub</depend>
- <depend>res_pjsip_exten_state</depend>
<support_level>core</support_level>
***/
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_CHANNEL_DEPEND,
+ .requires = "res_pjsip,res_pjsip_pubsub",
);
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
- .nonoptreq = "res_stasis"
+ .requires = "res_stasis",
);
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
- .nonoptreq = "res_stasis"
+ .requires = "res_stasis",
);
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
- .nonoptreq = "res_stasis,res_mwi_external"
+ .requires = "res_stasis,res_mwi_external"
);
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
- .nonoptreq = "res_stasis,res_stasis_recording"
+ .requires = "res_stasis,res_stasis_recording"
);
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
- .nonoptreq = "res_stasis",
+ .requires = "res_stasis",
.load_pri = AST_MODPRI_APP_DEPEND
);
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
- .nonoptreq = "res_stasis"
+ .requires = "res_stasis",
);
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
- .nonoptreq = "res_ari,res_stasis",
+ .requires = "res_ari,res_ari_model,res_stasis",
);
{{/api_declaration}}
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "ARI testing",
.load = load_module,
.unload = unload_module,
- .nonoptreq = "res_ari",
+ .requires = "res_ari",
);
return AST_MODULE_LOAD_SUCCESS;
}
-AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Skeleton (sample) Test");
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Skeleton (sample) Test",
+ .support_level = AST_MODULE_SUPPORT_CORE,
+ .load = load_module,
+ .unload = unload_module,
+ .requires = "res_ari_model",
+);
return 0;
}
-AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "res_pjsip scheduler test module");
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "res_pjsip scheduler test module",
+ .support_level = AST_MODULE_SUPPORT_CORE,
+ .load = load_module,
+ .unload = unload_module,
+ .requires = "res_pjsip",
+);
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Stasis Core testing",
.load = load_module,
.unload = unload_module,
- .nonoptreq = "res_stasis",
+ .requires = "res_stasis",
);
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Endpoint stasis-related testing",
.load = load_module,
.unload = unload_module,
- .nonoptreq = "res_stasis_test",
+ .requires = "res_stasis_test",
);