diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-07-17 20:12:28 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-07-17 20:12:28 +0000 |
commit | 2cb447cfc6a756bf43ea4748101bb0664ab90064 (patch) | |
tree | 412734d461051447b305c69130fc671d6657a0b1 /res/res_musiconhold.c | |
parent | 2e12cb472384a279a33056b889825cfd64336f10 (diff) |
Merge musiconhold stuff (bug #2027), restructure AGI to eventually support registration
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@3460 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'res/res_musiconhold.c')
-rwxr-xr-x | res/res_musiconhold.c | 90 |
1 files changed, 56 insertions, 34 deletions
diff --git a/res/res_musiconhold.c b/res/res_musiconhold.c index b446551c1..647956532 100755 --- a/res/res_musiconhold.c +++ b/res/res_musiconhold.c @@ -79,6 +79,7 @@ struct mohclass { int pid; /* PID of mpg123 */ int quiet; int single; + int custom; pthread_t thread; struct mohdata *members; /* Source of audio */ @@ -119,34 +120,49 @@ static int spawn_mp3(struct mohclass *class) ast_log(LOG_WARNING, "%s is not a valid directory\n", class->dir); return -1; } - argv[argc++] = "mpg123"; - argv[argc++] = "-q"; - argv[argc++] = "-s"; - argv[argc++] = "--mono"; - argv[argc++] = "-r"; - argv[argc++] = "8000"; - - if (!class->single) { - argv[argc++] = "-b"; - argv[argc++] = "2048"; - } - argv[argc++] = "-f"; - - if (class->quiet) { - argv[argc++] = "4096"; - } else - argv[argc++] = "8192"; - - /* Look for extra arguments and add them to the list */ - strncpy(xargs, class->miscargs, sizeof(xargs) - 1); - argptr = xargs; - while(argptr && !ast_strlen_zero(argptr)) { - argv[argc++] = argptr; - argptr = strchr(argptr, ','); - if (argptr) { - *argptr = '\0'; - argptr++; + if (!class->custom) { + argv[argc++] = "mpg123"; + argv[argc++] = "-q"; + argv[argc++] = "-s"; + argv[argc++] = "--mono"; + argv[argc++] = "-r"; + argv[argc++] = "8000"; + + if (!class->single) { + argv[argc++] = "-b"; + argv[argc++] = "2048"; + } + + argv[argc++] = "-f"; + + if (class->quiet) + argv[argc++] = "4096"; + else + argv[argc++] = "8192"; + + /* Look for extra arguments and add them to the list */ + strncpy(xargs, class->miscargs, sizeof(xargs) - 1); + argptr = xargs; + while(argptr && !ast_strlen_zero(argptr)) { + argv[argc++] = argptr; + argptr = strchr(argptr, ','); + if (argptr) { + *argptr = '\0'; + argptr++; + } + } + } else { + /* Format arguments for argv vector */ + strncpy(xargs, class->miscargs, sizeof(xargs) - 1); + argptr = xargs; + while(argptr && !ast_strlen_zero(argptr)) { + argv[argc++] = argptr; + argptr = strchr(argptr, ' '); + if (argptr) { + *argptr = '\0'; + argptr++; + } } } @@ -195,12 +211,16 @@ static int spawn_mp3(struct mohclass *class) close(x); /* Child */ chdir(class->dir); - /* Default install is /usr/local/bin */ - execv(LOCAL_MPG_123, argv); - /* Many places have it in /usr/bin */ - execv(MPG_123, argv); - /* Check PATH as a last-ditch effort */ - execvp("mpg123", argv); + if(class->custom) { + execv(argv[0], argv); + } else { + /* Default install is /usr/local/bin */ + execv(LOCAL_MPG_123, argv); + /* Many places have it in /usr/bin */ + execv(MPG_123, argv); + /* Check PATH as a last-ditch effort */ + execvp("mpg123", argv); + } ast_log(LOG_WARNING, "Exec failed: %s\n", strerror(errno)); close(fds[1]); exit(1); @@ -506,7 +526,9 @@ static int moh_register(char *classname, char *mode, char *param, char *miscargs strncpy(moh->class, classname, sizeof(moh->class) - 1); if (miscargs) strncpy(moh->miscargs, miscargs, sizeof(moh->miscargs) - 1); - if (!strcasecmp(mode, "mp3") || !strcasecmp(mode, "mp3nb") || !strcasecmp(mode, "quietmp3") || !strcasecmp(mode, "quietmp3nb") || !strcasecmp(mode, "httpmp3")) { + if (!strcasecmp(mode, "mp3") || !strcasecmp(mode, "mp3nb") || !strcasecmp(mode, "quietmp3") || !strcasecmp(mode, "quietmp3nb") || !strcasecmp(mode, "httpmp3") || !strcasecmp(mode, "custom")) { + if (!strcasecmp(mode, "custom")) + moh->custom = 1; if (!strcasecmp(mode, "mp3nb") || !strcasecmp(mode, "quietmp3nb")) moh->single = 1; if (!strcasecmp(mode, "quietmp3") || !strcasecmp(mode, "quietmp3nb")) |