? asterisk/core.4904 Index: asterisk/res/res_musiconhold.c =================================================================== RCS file: /usr/cvsroot/asterisk/res/res_musiconhold.c,v retrieving revision 1.36 diff -u -r1.36 res_musiconhold.c --- asterisk/res/res_musiconhold.c 17 Jul 2004 20:12:28 -0000 1.36 +++ asterisk/res/res_musiconhold.c 17 Aug 2004 08:46:00 -0000 @@ -71,6 +71,8 @@ "music on hold is activated, this class will be used to select which\n" "music is played.\n"; +static int respawn_time = 20; + struct mohclass { char class[80]; char dir[256]; @@ -98,6 +100,7 @@ static struct mohclass *mohclasses; + AST_MUTEX_DEFINE_STATIC(moh_lock); #define LOCAL_MPG_123 "/usr/local/bin/mpg123" @@ -116,7 +119,7 @@ DIR *dir; struct dirent *de; dir = opendir(class->dir); - if (!dir) { + if (!dir && !strstr(class->dir,"http://") && !strstr(class->dir,"HTTP://")) { ast_log(LOG_WARNING, "%s is not a valid directory\n", class->dir); return -1; } @@ -167,11 +170,20 @@ } files = 0; - while((de = readdir(dir)) && (files < MAX_MP3S)) { - if ((strlen(de->d_name) > 3) && !strcasecmp(de->d_name + strlen(de->d_name) - 4, ".mp3")) { - strncpy(fns[files], de->d_name, sizeof(fns[files]) - 1); - argv[argc++] = fns[files]; - files++; + if (strstr(class->dir,"http://") || strstr(class->dir,"HTTP://")) + { + strncpy(fns[files], class->dir, sizeof(fns[files]) - 1); + argv[argc++] = fns[files]; + files++; + } + else + { + while((de = readdir(dir)) && (files < MAX_MP3S)) { + if ((strlen(de->d_name) > 3) && !strcasecmp(de->d_name + strlen(de->d_name) - 4, ".mp3")) { + strncpy(fns[files], de->d_name, sizeof(fns[files]) - 1); + argv[argc++] = fns[files]; + files++; + } } } argv[argc] = NULL; @@ -194,6 +206,7 @@ close(fds[1]); return -1; } + sleep(respawn_time); class->pid = fork(); if (class->pid < 0) { close(fds[0]);