]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 284610 via svnmerge from
authorTilghman Lesher <tilghman@meg.abyt.es>
Thu, 2 Sep 2010 05:27:53 +0000 (05:27 +0000)
committerTilghman Lesher <tilghman@meg.abyt.es>
Thu, 2 Sep 2010 05:27:53 +0000 (05:27 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.8

........
  r284610 | tilghman | 2010-09-02 00:20:59 -0500 (Thu, 02 Sep 2010) | 10 lines

  When optional_api is non-optional, force dependent modules to be loaded.

  (closes issue #17707)
   Reported by: ira
   Patches:
         20100819__issue17707__asterisk1.8.diff.txt uploaded by tilghman (license 14)
   Tested by: tilghman

  Review: https://reviewboard.asterisk.org/r/876/
........

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@284628 65c4cc65-6c06-0410-ace0-fbb531ad65f3

18 files changed:
apps/app_adsiprog.c
apps/app_followme.c
apps/app_getcpeid.c
apps/app_queue.c
apps/app_speech_utils.c
apps/app_stack.c
apps/app_voicemail.c
channels/chan_agent.c
channels/chan_dahdi.c
channels/chan_iax2.c
channels/chan_mgcp.c
channels/chan_sip.c
funcs/func_aes.c
include/asterisk/module.h
main/loader.c
pbx/pbx_dundi.c
pbx/pbx_loopback.c
pbx/pbx_realtime.c

index 8af1473d1e4b7ee3b1cec600fa64ae9f3878f172..c138f04296291cc20664a7c5c5e1588d726cd5cd 100644 (file)
@@ -1591,4 +1591,8 @@ static int load_module(void)
        return AST_MODULE_LOAD_SUCCESS;
 }
 
-AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Asterisk ADSI Programming Application");
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Asterisk ADSI Programming Application",
+               .load = load_module,
+               .unload = unload_module,
+               .nonoptreq = "res_adsi",
+               );
index fcab992d390788f95b26fbf00984ec8383f8da1f..b17d5252bb837453102ff2cb7f1b4080d34756c1 100644 (file)
@@ -51,7 +51,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 #include "asterisk/cli.h"
 #include "asterisk/manager.h"
 #include "asterisk/config.h"
-#include "asterisk/monitor.h"
 #include "asterisk/utils.h"
 #include "asterisk/causes.h"
 #include "asterisk/astdb.h"
index 93df1623ad87278886355441b23aeb4344b8f88a..2207081568375fa6509b5bdc93fa5643b5c4d853 100644 (file)
@@ -132,4 +132,8 @@ static int load_module(void)
        return ast_register_application_xml(app, cpeid_exec);
 }
 
-AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Get ADSI CPE ID");
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Get ADSI CPE ID",
+               .load = load_module,
+               .unload = unload_module,
+               .nonoptreq = "res_adsi",
+               );
index ccdee7fb314cd21d780a1b3553b65ad39151ed4b..08167b46301d2d4d48758fd36cb97393723265bc 100644 (file)
@@ -57,7 +57,7 @@
  */
 
 /*** MODULEINFO
-       <depend>res_monitor</depend>
+       <use>res_monitor</use>
  ***/
 
 #include "asterisk.h"
@@ -8197,5 +8197,6 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "True Call Queueing",
                .unload = unload_module,
                .reload = reload,
                .load_pri = AST_MODPRI_DEVSTATE_CONSUMER,
+               .nonoptreq = "res_monitor",
               );
 
index 60af43640e805d4543df36c19ab5710bc5f63065..0323f7c47100d709a1fb0611fed4627c51e5fe75 100644 (file)
@@ -955,4 +955,8 @@ static int load_module(void)
        return res;
 }
 
-AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Dialplan Speech Applications");
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Dialplan Speech Applications",
+               .load = load_module,
+               .unload = unload_module,
+               .nonoptreq = "res_speech",
+               );
index dcf13a00dffc233fe35646bbeb3d62ab0298e914..29c37a20b078acb32c3705fdbdbf030dd94015fb 100644 (file)
@@ -704,4 +704,8 @@ static int load_module(void)
        return 0;
 }
 
-AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Dialplan subroutines (Gosub, Return, etc)");
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Dialplan subroutines (Gosub, Return, etc)",
+               .load = load_module,
+               .unload = unload_module,
+               .nonoptreq = "res_agi",
+               );
index 4ff67e3714fe9c2fe92e173c843363b2ae53da88..5b050e99dfaf3d41062c08ebf7c5b03e1aa7edac 100644 (file)
@@ -38,7 +38,8 @@
  */
 
 /*** MODULEINFO
-       <depend>res_smdi</depend>
+       <use>res_adsi</use>
+       <use>res_smdi</use>
  ***/
 
 /*** MAKEOPTS
@@ -13085,4 +13086,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, tdesc,
                .load = load_module,
                .unload = unload_module,
                .reload = reload,
+               .nonoptreq = "res_adsi,res_smdi",
                );
index b8e142d0469e0430ac678b59d9bd63be7f3a80cd..37a6688d79168101f1863b833d4f69dd7cc74c79 100644 (file)
@@ -32,6 +32,7 @@
  */
 /*** MODULEINFO
         <depend>chan_local</depend>
+        <depend>res_monitor</depend>
  ***/
 
 #include "asterisk.h"
@@ -2484,4 +2485,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Agent Proxy Channel",
                .unload = unload_module,
                .reload = reload,
                .load_pri = AST_MODPRI_CHANNEL_DRIVER,
+               .nonoptreq = "res_monitor,chan_local",
               );
index 14c43f8fac4bfdcd62bbeedf946d245cb42d3e6b..25246cd5664ec9ebd7fb8094a5298f29e0dbe6cc 100644 (file)
@@ -38,7 +38,7 @@
  */
 
 /*** MODULEINFO
-       <depend>res_smdi</depend>
+       <use>res_smdi</use>
        <depend>dahdi</depend>
        <depend>tonezone</depend>
        <use>pri</use>
@@ -17941,4 +17941,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, tdesc,
        .unload = unload_module,
        .reload = reload,
        .load_pri = AST_MODPRI_CHANNEL_DRIVER,
+               .nonoptreq = "res_smdi",
        );
index f038f205e3e633273248c1883368c72d1fdd6f9e..90ae4eef53a1d2a83829bbae5cf30fef05e89808 100644 (file)
@@ -14620,4 +14620,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Inter Asterisk eXchan
                .unload = unload_module,
                .reload = reload,
                .load_pri = AST_MODPRI_CHANNEL_DRIVER,
+               .nonoptreq = "res_crypto",
                );
index a787eab7207e97d2eb6af601deb4937cef9805f9..2f953a9ae599c5d1012d539d877be358ed2d91e5 100644 (file)
@@ -30,7 +30,7 @@
  */
 
 /*** MODULEINFO
-        <depend>res_pktccops</depend>
+        <use>res_pktccops</use>
  ***/
 
 #include "asterisk.h"
@@ -4915,4 +4915,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Media Gateway Control
                .unload = unload_module,
                .reload = reload,
                .load_pri = AST_MODPRI_CHANNEL_DRIVER,
+               .nonoptreq = "res_pktccops",
               );
index 09531f2ad831f4bbc42f42d7ad50b1d3906fed45..432adedfe2caac705aab1760c702789e21b008dd 100644 (file)
  */
 
 /*** MODULEINFO
+       <depend>res_crypto</depend>
        <depend>chan_local</depend>
  ***/
 
@@ -28623,4 +28624,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Session Initiation Pr
                .unload = unload_module,
                .reload = reload,
                .load_pri = AST_MODPRI_CHANNEL_DRIVER,
+               .nonoptreq = "res_crypto,chan_local",
               );
index 21ee244ab9fa46eb17ad6b81dc8a4b75008b4643..7cc8f4d575a164d59ce469507922255b67a00f45 100644 (file)
@@ -163,4 +163,8 @@ static int load_module(void)
        return res ? AST_MODULE_LOAD_DECLINE : AST_MODULE_LOAD_SUCCESS;
 }
 
-AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "AES dialplan functions");
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "AES dialplan functions",
+               .load = load_module,
+               .unload = unload_module,
+               .nonoptreq = "res_crypto",
+       );
index 24f66fc36972b68e17551a765e0093f9506406ec..aaa8cbef324e638702e8d63ee53a64d0167a18a4 100644 (file)
@@ -242,6 +242,11 @@ struct ast_module_info {
         *  this value will never be read and the module will be given the lowest possible priority
         *  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;
 };
 
 void ast_module_register(const struct ast_module_info *);
index 17bb1f8211494df69fe2e243c5eda48e75b643e6..dea236b052b74efb9393afdcd4734caeac924923 100644 (file)
@@ -414,6 +414,26 @@ static struct ast_module *load_dynamic_module(const char *resource_in, unsigned
                return NULL;
        }
 
+       /* This section is a workaround for a gcc 4.1 bug that has already been
+        * fixed in later versions.  Unfortunately, some distributions, such as
+        * RHEL/CentOS 5, distribute gcc 4.1, so we're stuck with having to deal
+        * with this issue.  This basically ensures that optional_api modules are
+        * loaded before any module which requires their functionality. */
+#if !defined(HAVE_ATTRIBUTE_weak_import) && !defined(HAVE_ATTRIBUTE_weakref)
+       if (!ast_strlen_zero(mod->info->nonoptreq)) {
+               /* Force any required dependencies to load */
+               char *each, *required_resource = ast_strdupa(mod->info->nonoptreq);
+               while ((each = strsep(&required_resource, ","))) {
+                       each = ast_strip(each);
+
+                       /* Is it already loaded? */
+                       if (!find_resource(each, 0)) {
+                               load_dynamic_module(each, global_symbols_only);
+                       }
+               }
+       }
+#endif
+
        while (!dlclose(lib));
        resource_being_loaded = NULL;
 
index aaa30da0cb10169e2e9b5984e7a30437bcc47fe3..ef482df2c989debad1ffcb804663a81cb1fb748c 100644 (file)
@@ -4880,5 +4880,6 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Distributed Universal Nu
                .load = load_module,
                .unload = unload_module,
                .reload = reload,
+               .nonoptreq = "res_crypto",
               );
 
index f51ec8204d719b711b1dbcaa0af97e4fb5ac75d2..9ab146398d998c3dda49aff5c6e85063382c738b 100644 (file)
@@ -41,7 +41,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 #include "asterisk/sched.h"
 #include "asterisk/io.h"
 #include "asterisk/utils.h"
-#include "asterisk/crypto.h"
 #include "asterisk/astdb.h"
 
 
index 2697ea0d282f31d93277e86997f24ea760105460..f183c867b07a0986185c7a38f12adcf796b52459 100644 (file)
@@ -46,7 +46,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 #include "asterisk/sched.h"
 #include "asterisk/io.h"
 #include "asterisk/utils.h"
-#include "asterisk/crypto.h"
 #include "asterisk/astdb.h"
 #include "asterisk/app.h"
 #include "asterisk/astobj2.h"