--- res/res_musiconhold.c 2007-02-01 16:11:28.000000000 -0500 +++ res/res_musiconhold.moo 2007-07-06 14:55:12.000000000 -0400 @@ -73,6 +73,7 @@ #include "asterisk/linkedlists.h" #define INITIAL_NUM_FILES 8 +#define DEFAULT_CLASS "default" static char *app0 = "MusicOnHold"; static char *app1 = "WaitMusicOnHold"; @@ -914,6 +915,31 @@ } } +static struct mohclass *moh_getclass(const char *class) +{ + struct mohclass *moh = NULL; + + AST_LIST_LOCK(&mohclasses); + moh = get_mohbyname(class); + AST_LIST_UNLOCK(&mohclasses); + + return moh; +} + +static int moh_classexist(const char *class) +{ + if (!ast_strlen_zero(class)) { + if (!moh_getclass(class)) { + ast_log(LOG_WARNING, "No Class: %s\n", class); + return 0; + } + else + return 1; + } + else + return 0; +} + static int local_ast_moh_start(struct ast_channel *chan, const char *mclass, const char *interpclass) { struct mohclass *mohclass; @@ -930,24 +956,21 @@ * option. * 4) The default class. */ - if (!ast_strlen_zero(chan->musicclass)) + if (moh_classexist(chan->musicclass)) class = chan->musicclass; - else if (!ast_strlen_zero(mclass)) + else if (moh_classexist(mclass)) class = mclass; - else if (!ast_strlen_zero(interpclass)) + else if (moh_classexist(interpclass)) class = interpclass; - else - class = "default"; - - AST_LIST_LOCK(&mohclasses); - mohclass = get_mohbyname(class); - AST_LIST_UNLOCK(&mohclasses); - - if (!mohclass) { - ast_log(LOG_WARNING, "No class: %s\n", class); + else if (moh_classexist(DEFAULT_CLASS)) + class = DEFAULT_CLASS; + else { + ast_log(LOG_WARNING, "Could not find acceptable Music On Hold Class, ending Music On Hold"); return -1; } + mohclass = moh_getclass(class); + ast_set_flag(chan, AST_FLAG_MOH); if (mohclass->total_files) { return ast_activate_generator(chan, &moh_file_stream, mohclass);