]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
musiconhold: Only warn if music class is not found in memory and database. 56/2456/1
authorWalter Doekes <walter+asterisk@wjd.nu>
Thu, 24 Mar 2016 12:45:06 +0000 (13:45 +0100)
committerWalter Doekes <walter+asterisk@wjd.nu>
Thu, 24 Mar 2016 12:45:06 +0000 (13:45 +0100)
The log message when a MusicOnHold music class was not found was changed
from debug level to WARNING level in Asterisk 11.19 and 13.5.  For those
using realtime musiconhold, this message is wrong because it warns
before checking the database.

This changeset delays the warning until after the database has been
checked.

Reported-by: Conrad de Wet
ASTERISK-25444 #close

Change-Id: I6cfb2db2f9cfbd2bb3d30566ecae361c4abf6dbf

res/res_musiconhold.c

index 669fb9bc9abb0b3aef41c3f484b90ff2ff5cd6b5..6f51820724aafe0b50840c85fd8be73e3b022d21 100644 (file)
@@ -1349,6 +1349,18 @@ static struct mohclass *_moh_class_malloc(const char *file, int line, const char
        return class;
 }
 
+static struct ast_variable *load_realtime_musiconhold(const char *name)
+{
+       struct ast_variable *var = ast_load_realtime("musiconhold", "name", name, SENTINEL);
+       if (!var) {
+               ast_log(LOG_WARNING,
+                       "Music on Hold class '%s' not found in memory/database. "
+                       "Verify your configuration.\n",
+                       name);
+       }
+       return var;
+}
+
 static int local_ast_moh_start(struct ast_channel *chan, const char *mclass, const char *interpclass)
 {
        struct mohclass *mohclass = NULL;
@@ -1356,6 +1368,7 @@ static int local_ast_moh_start(struct ast_channel *chan, const char *mclass, con
        struct ast_variable *var = NULL;
        int res = 0;
        int realtime_possible = ast_check_realtime("musiconhold");
+       int warn_if_not_in_memory = !realtime_possible;
 
        /* The following is the order of preference for which class to use:
         * 1) The channels explicitly set musicclass, which should *only* be
@@ -1369,28 +1382,28 @@ static int local_ast_moh_start(struct ast_channel *chan, const char *mclass, con
         * 4) The default class.
         */
        if (!ast_strlen_zero(ast_channel_musicclass(chan))) {
-               mohclass = get_mohbyname(ast_channel_musicclass(chan), 1, 0);
+               mohclass = get_mohbyname(ast_channel_musicclass(chan), warn_if_not_in_memory, 0);
                if (!mohclass && realtime_possible) {
-                       var = ast_load_realtime("musiconhold", "name", ast_channel_musicclass(chan), SENTINEL);
+                       var = load_realtime_musiconhold(ast_channel_musicclass(chan));
                }
        }
        if (!mohclass && !var && !ast_strlen_zero(mclass)) {
-               mohclass = get_mohbyname(mclass, 1, 0);
+               mohclass = get_mohbyname(mclass, warn_if_not_in_memory, 0);
                if (!mohclass && realtime_possible) {
-                       var = ast_load_realtime("musiconhold", "name", mclass, SENTINEL);
+                       var = load_realtime_musiconhold(mclass);
                }
        }
        if (!mohclass && !var && !ast_strlen_zero(interpclass)) {
-               mohclass = get_mohbyname(interpclass, 1, 0);
+               mohclass = get_mohbyname(interpclass, warn_if_not_in_memory, 0);
                if (!mohclass && realtime_possible) {
-                       var = ast_load_realtime("musiconhold", "name", interpclass, SENTINEL);
+                       var = load_realtime_musiconhold(interpclass);
                }
        }
 
        if (!mohclass && !var) {
-               mohclass = get_mohbyname("default", 1, 0);
+               mohclass = get_mohbyname("default", warn_if_not_in_memory, 0);
                if (!mohclass && realtime_possible) {
-                       var = ast_load_realtime("musiconhold", "name", "default", SENTINEL);
+                       var = load_realtime_musiconhold("default");
                }
        }