diff options
author | Mark Spencer <markster@digium.com> | 2004-07-17 20:12:28 +0000 |
---|---|---|
committer | Mark Spencer <markster@digium.com> | 2004-07-17 20:12:28 +0000 |
commit | de4188df06a58b20da7da1da0843080548a801c5 (patch) | |
tree | 412734d461051447b305c69130fc671d6657a0b1 /res/res_musiconhold.c | |
parent | f10148d3e30b7c146e52b12e2a0363d71773a449 (diff) |
Merge musiconhold stuff (bug #2027), restructure AGI to eventually support registration
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3460 65c4cc65-6c06-0410-ace0-fbb531ad65f3
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")) |