Modules: Fix issues with CLI completion.
authorCorey Farrell <git@cfware.com>
Mon, 30 Oct 2017 05:32:32 +0000 (01:32 -0400)
committerCorey Farrell <git@cfware.com>
Mon, 30 Oct 2017 05:39:20 +0000 (01:39 -0400)
* Stop using ast_module_helper to check if a module is loaded, use
  ast_module_check instead (app_confbridge and app_meetme).
* Stop ast_module_helper from listing reload classes when needsreload
  was not requested.

ASTERISK-27378

Change-Id: Iaed8c1e4fcbeb242921dbac7929a0fe75ff4b239

apps/app_confbridge.c
apps/app_meetme.c
main/loader.c

index d218d0f..73dff86 100644 (file)
@@ -2386,21 +2386,12 @@ static int confbridge_exec(struct ast_channel *chan, const char *data)
                user.tech_args.drop_silence = 1;
        }
 
-       if (ast_test_flag(&user.u_profile, USER_OPT_JITTERBUFFER)) {
-               char *func_jb;
-               if ((func_jb = ast_module_helper("", "func_jitterbuffer", 0, 0, 0, 0))) {
-                       ast_free(func_jb);
-                       ast_func_write(chan, "JITTERBUFFER(adaptive)", "default");
-               }
+       if (ast_test_flag(&user.u_profile, USER_OPT_JITTERBUFFER) && ast_module_check("func_jitterbuffer.so")) {
+               ast_func_write(chan, "JITTERBUFFER(adaptive)", "default");
        }
 
-       if (ast_test_flag(&user.u_profile, USER_OPT_DENOISE)) {
-               char *mod_speex;
-               /* Reduce background noise from each participant */
-               if ((mod_speex = ast_module_helper("", "codec_speex", 0, 0, 0, 0))) {
-                       ast_free(mod_speex);
-                       ast_func_write(chan, "DENOISE(rx)", "on");
-               }
+       if (ast_test_flag(&user.u_profile, USER_OPT_DENOISE) && ast_module_check("codec_speex.so")) {
+               ast_func_write(chan, "DENOISE(rx)", "on");
        }
 
        /* if this user has a intro, play it before entering */
index 7ca9ba3..5567fe0 100644 (file)
@@ -3198,7 +3198,7 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, struc
        struct timeval now;
        struct ast_dsp *dsp = NULL;
        struct ast_app *agi_app;
-       char *agifile, *mod_speex;
+       char *agifile;
        const char *agifiledefault = "conf-background.agi", *tmpvar;
        char meetmesecs[30] = "";
        char exitcontext[AST_MAX_CONTEXT] = "";
@@ -3588,9 +3588,7 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, struc
        }
 
        /* Reduce background noise from each participant */
-       if (!ast_test_flag64(confflags, CONFFLAG_DONT_DENOISE) &&
-               (mod_speex = ast_module_helper("", "func_speex", 0, 0, 0, 0))) {
-               ast_free(mod_speex);
+       if (!ast_test_flag64(confflags, CONFFLAG_DONT_DENOISE) && ast_module_check("func_speex.so")) {
                ast_func_write(chan, "DENOISE(rx)", "on");
        }
 
index d550007..8250f1f 100644 (file)
@@ -708,8 +708,9 @@ char *ast_module_helper(const char *line, const char *word, int pos, int state,
        int i, which=0, l = strlen(word);
        char *ret = NULL;
 
-       if (pos != rpos)
+       if (pos != rpos) {
                return NULL;
+       }
 
        AST_DLLIST_LOCK(&module_list);
        AST_DLLIST_TRAVERSE(&module_list, cur, entry) {
@@ -722,10 +723,11 @@ char *ast_module_helper(const char *line, const char *word, int pos, int state,
        }
        AST_DLLIST_UNLOCK(&module_list);
 
-       if (!ret) {
+       if (!ret && needsreload) {
                for (i=0; !ret && reload_classes[i].name; i++) {
-                       if (!strncasecmp(word, reload_classes[i].name, l) && ++which > state)
+                       if (!strncasecmp(word, reload_classes[i].name, l) && ++which > state) {
                                ret = ast_strdup(reload_classes[i].name);
+                       }
                }
        }