summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Rose <jrose@digium.com>2012-04-13 15:38:08 +0000
committerJonathan Rose <jrose@digium.com>2012-04-13 15:38:08 +0000
commitc0b9fe8530fa14f707bb4e3fa037f26acccb7149 (patch)
tree4c7e852538f831e32449c00dead7df64ff399916
parent05eb51bb2c5c72880d656c90df7e2af846dc8734 (diff)
Send relative path named recordings to the meetme directory instead of sounds
Prior to this patch, no effort was made to parse the path name to determine a proper destination for recordings of MeetMe's r option. This fixes that. Review: https://reviewboard.asterisk.org/r/1846/ ........ Merged revisions 362079 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 362080 from http://svn.asterisk.org/svn/asterisk/branches/10 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@362081 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rw-r--r--apps/app_meetme.c35
1 files changed, 32 insertions, 3 deletions
diff --git a/apps/app_meetme.c b/apps/app_meetme.c
index f5d480de1..14eef5480 100644
--- a/apps/app_meetme.c
+++ b/apps/app_meetme.c
@@ -5058,6 +5058,31 @@ static int action_meetmelistrooms(struct mansession *s, const struct message *m)
return 0;
}
+/*! \internal
+ * \brief creates directory structure and assigns absolute path from relative paths for filenames
+ *
+ * \param filename contains the absolute or relative path to the desired file
+ * \param buffer stores completed filename, absolutely must be a buffer of PATH_MAX length
+ */
+static void filename_parse(char *filename, char *buffer)
+{
+ char *slash;
+ if (ast_strlen_zero(filename)) {
+ ast_log(LOG_WARNING, "No file name was provided for a file save option.\n");
+ } else if (filename[0] != '/') {
+ snprintf(buffer, PATH_MAX, "%s/meetme/%s", ast_config_AST_SPOOL_DIR, filename);
+ } else {
+ ast_copy_string(buffer, filename, PATH_MAX);
+ }
+
+ slash = buffer;
+ if ((slash = strrchr(slash, '/'))) {
+ *slash = '\0';
+ ast_mkdir(buffer, 0777);
+ *slash = '/';
+ }
+}
+
static void *recordthread(void *args)
{
struct ast_conference *cnf = args;
@@ -5067,11 +5092,15 @@ static void *recordthread(void *args)
int res = 0;
int x;
const char *oldrecordingfilename = NULL;
+ char filename_buffer[PATH_MAX];
if (!cnf || !cnf->lchan) {
pthread_exit(0);
}
+ filename_buffer[0] = '\0';
+ filename_parse(cnf->recordingfilename, filename_buffer);
+
ast_stopstream(cnf->lchan);
flags = O_CREAT | O_TRUNC | O_WRONLY;
@@ -5083,9 +5112,9 @@ static void *recordthread(void *args)
AST_LIST_UNLOCK(&confs);
break;
}
- if (!s && cnf->recordingfilename && (cnf->recordingfilename != oldrecordingfilename)) {
- s = ast_writefile(cnf->recordingfilename, cnf->recordingformat, NULL, flags, 0, AST_FILE_MODE);
- oldrecordingfilename = cnf->recordingfilename;
+ if (!s && !(ast_strlen_zero(filename_buffer)) && (filename_buffer != oldrecordingfilename)) {
+ s = ast_writefile(filename_buffer, cnf->recordingformat, NULL, flags, 0, AST_FILE_MODE);
+ oldrecordingfilename = filename_buffer;
}
f = ast_read(cnf->lchan);