From c0b9fe8530fa14f707bb4e3fa037f26acccb7149 Mon Sep 17 00:00:00 2001 From: Jonathan Rose Date: Fri, 13 Apr 2012 15:38:08 +0000 Subject: 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 --- apps/app_meetme.c | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) (limited to 'apps') 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); -- cgit v1.2.3