diff options
author | Kevin P. Fleming <kpfleming@digium.com> | 2008-10-16 08:30:32 +0000 |
---|---|---|
committer | Kevin P. Fleming <kpfleming@digium.com> | 2008-10-16 08:30:32 +0000 |
commit | 109a17ae797af70f90a6f6a66643ee9dd8ec670b (patch) | |
tree | e7630d4b7484a502d07d0a54b79d5036fcc9fe84 | |
parent | ab2fd439d4959af2a595c20558d24739360f338e (diff) |
support relative paths in musiconhold.conf, which makes moh work by default when Asterisk was configured using --prefix and 'make samples' is run
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@149917 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rw-r--r-- | CHANGES | 2 | ||||
-rw-r--r-- | configs/musiconhold.conf.sample | 11 | ||||
-rw-r--r-- | res/res_musiconhold.c | 20 |
3 files changed, 25 insertions, 8 deletions
@@ -33,6 +33,8 @@ Miscellaneous as previously used on the last "exten" line. For example: exten => 123,1,NoOp(something) same => n,SomethingElse() + * musiconhold.conf classes of type 'files' can now use relative directory paths, + which are interpreted as relative to the astvarlibdir setting in asterisk.conf. ------------------------------------------------------------------------------ --- Functionality changes from Asterisk 1.6.0 to Asterisk 1.6.1 ------------- diff --git a/configs/musiconhold.conf.sample b/configs/musiconhold.conf.sample index 4df1afd4f..8ccc851e4 100644 --- a/configs/musiconhold.conf.sample +++ b/configs/musiconhold.conf.sample @@ -29,6 +29,11 @@ ; Files can be present in as many formats as you wish, and the ; 'best' format will be chosen at playback time. ; +; The path specified can be either an absolute path (starts with '/'), +; or a relative path; relative paths are interpreted as being relative +; to the 'astvarlibdir' in asterisk.conf, which defaults to +; /var/lib/asterisk. +; ; NOTE: ; If you are not using "autoload" in modules.conf, then you ; must ensure that the format modules for any formats you wish @@ -39,11 +44,11 @@ [default] mode=files -directory=/var/lib/asterisk/moh +directory=moh ; ;[native-random] ;mode=files -;directory=/var/lib/asterisk/moh +;directory=moh ;digit=# ; If this option is set for a class, then when callers are ; ; listening to music on hold, they can press this digit, and ; ; they will switch to listening to this music class. @@ -51,7 +56,7 @@ directory=/var/lib/asterisk/moh ;[native-alphabetical] ;mode=files -;directory=/var/lib/asterisk/moh +;directory=moh ;sort=alpha ; Sort the files in alphabetical order. If this option is ; ; not specified, the sort order is undefined. diff --git a/res/res_musiconhold.c b/res/res_musiconhold.c index 9fce79475..004934676 100644 --- a/res/res_musiconhold.c +++ b/res/res_musiconhold.c @@ -65,6 +65,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/stringfields.h" #include "asterisk/linkedlists.h" #include "asterisk/manager.h" +#include "asterisk/paths.h" #define INITIAL_NUM_FILES 8 @@ -906,6 +907,7 @@ static int moh_scan_files(struct mohclass *class) { DIR *files_DIR; struct dirent *files_dirent; + char dir_path[PATH_MAX]; char path[PATH_MAX]; char filepath[PATH_MAX]; char *ext; @@ -913,9 +915,17 @@ static int moh_scan_files(struct mohclass *class) { int dirnamelen; int i; - files_DIR = opendir(class->dir); + if (class->dir[0] != '/') { + ast_copy_string(dir_path, ast_config_AST_VAR_DIR, sizeof(dir_path)); + strncat(dir_path, "/", sizeof(dir_path)); + strncat(dir_path, class->dir, sizeof(dir_path)); + } else { + ast_copy_string(dir_path, class->dir, sizeof(dir_path)); + } + ast_debug(4, "Scanning '%s' for files for class '%s'\n", dir_path, class->name); + files_DIR = opendir(dir_path); if (!files_DIR) { - ast_log(LOG_WARNING, "Cannot open dir %s or dir does not exist\n", class->dir); + ast_log(LOG_WARNING, "Cannot open dir %s or dir does not exist\n", dir_path); return -1; } @@ -923,9 +933,9 @@ static int moh_scan_files(struct mohclass *class) { ast_free(class->filearray[i]); class->total_files = 0; - dirnamelen = strlen(class->dir) + 2; + dirnamelen = strlen(dir_path) + 2; getcwd(path, sizeof(path)); - chdir(class->dir); + chdir(dir_path); while ((files_dirent = readdir(files_DIR))) { /* The file name must be at least long enough to have the file type extension */ if ((strlen(files_dirent->d_name) < 4)) @@ -939,7 +949,7 @@ static int moh_scan_files(struct mohclass *class) { if (!strchr(files_dirent->d_name, '.')) continue; - snprintf(filepath, sizeof(filepath), "%s/%s", class->dir, files_dirent->d_name); + snprintf(filepath, sizeof(filepath), "%s/%s", dir_path, files_dirent->d_name); if (stat(filepath, &statbuf)) continue; |