summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin P. Fleming <kpfleming@digium.com>2008-10-16 08:30:32 +0000
committerKevin P. Fleming <kpfleming@digium.com>2008-10-16 08:30:32 +0000
commit109a17ae797af70f90a6f6a66643ee9dd8ec670b (patch)
treee7630d4b7484a502d07d0a54b79d5036fcc9fe84
parentab2fd439d4959af2a595c20558d24739360f338e (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--CHANGES2
-rw-r--r--configs/musiconhold.conf.sample11
-rw-r--r--res/res_musiconhold.c20
3 files changed, 25 insertions, 8 deletions
diff --git a/CHANGES b/CHANGES
index be399c6cd..37f5ad24b 100644
--- a/CHANGES
+++ b/CHANGES
@@ -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;