[Asterisk-code-review] app_mixmonitor: Set MIXMONITOR_FILENAME to correct value when wav49 i... (asterisk[13])
Sean Bright
asteriskteam at digium.com
Mon Feb 17 08:23:22 CST 2020
Sean Bright has uploaded this change for review. ( https://gerrit.asterisk.org/c/asterisk/+/13808 )
Change subject: app_mixmonitor: Set MIXMONITOR_FILENAME to correct value when wav49 is used
......................................................................
app_mixmonitor: Set MIXMONITOR_FILENAME to correct value when wav49 is used
When opening a file for writing, Asterisk silently converts filenames
ending with 'wav49' to 'WAV.' We aren't taking that in to account when
setting the MIXMONITOR_FILENAME variable in MixMonitor.
* If the user wants to write to a wav49 file, make sure that it is
reflected properly in MIXMONITOR_FILENAME.
* Add a note to the documentation describing this behavior.
ASTERISK-24695 #close
Reported by: xrobau
Change-Id: I384691ce624eb55c80a125b9ca206d2d691c574c
---
M apps/app_mixmonitor.c
1 file changed, 26 insertions(+), 3 deletions(-)
git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/08/13808/1
diff --git a/apps/app_mixmonitor.c b/apps/app_mixmonitor.c
index ecb0830..ad3ac99 100644
--- a/apps/app_mixmonitor.c
+++ b/apps/app_mixmonitor.c
@@ -156,6 +156,11 @@
<para>This application does not automatically answer and should be preceeded by
an application such as Answer or Progress().</para>
<note><para>MixMonitor runs as an audiohook.</para></note>
+ <note><para>If a filename passed to MixMonitor ends with
+ <literal>.wav49</literal>, Asterisk will silently convert the extension to
+ <literal>.WAV</literal> for legacy reasons. <variable>MIXMONITOR_FILENAME</variable>
+ will contain the actual filename that Asterisk is writing to, not necessarily the
+ value that was passed in.</para></note>
<variablelist>
<variable name="MIXMONITOR_FILENAME">
<para>Will contain the filename used to record.</para>
@@ -1003,17 +1008,35 @@
static char *filename_parse(char *filename, char *buffer, size_t len)
{
char *slash;
+ char *ext;
+
+ ast_assert(len > 0);
+
if (ast_strlen_zero(filename)) {
ast_log(LOG_WARNING, "No file name was provided for a file save option.\n");
- } else if (filename[0] != '/') {
- char *build;
- build = ast_alloca(strlen(ast_config_AST_MONITOR_DIR) + strlen(filename) + 3);
+ buffer[0] = 0;
+ return buffer;
+ }
+
+ /* If we don't have an absolute path, make one */
+ if (*filename != '/') {
+ char *build = ast_alloca(strlen(ast_config_AST_MONITOR_DIR) + strlen(filename) + 3);
sprintf(build, "%s/%s", ast_config_AST_MONITOR_DIR, filename);
filename = build;
}
ast_copy_string(buffer, filename, len);
+ /* If the provided filename has a .wav49 extension, we need to convert it to .WAV to
+ match the behavior of build_filename in main/file.c. Otherwise MIXMONITOR_FILENAME
+ ends up referring to a file that does not/will not exist */
+ ext = strrchr(buffer, '.');
+ if (ext && !strcmp(ext, ".wav49")) {
+ /* Change to WAV - we know we have at least 6 writeable bytes where 'ext' points,
+ * so this is safe */
+ memcpy(ext, ".WAV", sizeof(".WAV"));
+ }
+
if ((slash = strrchr(filename, '/'))) {
*slash = '\0';
}
--
To view, visit https://gerrit.asterisk.org/c/asterisk/+/13808
To unsubscribe, or for help writing mail filters, visit https://gerrit.asterisk.org/settings
Gerrit-Project: asterisk
Gerrit-Branch: 13
Gerrit-Change-Id: I384691ce624eb55c80a125b9ca206d2d691c574c
Gerrit-Change-Number: 13808
Gerrit-PatchSet: 1
Gerrit-Owner: Sean Bright <sean.bright at gmail.com>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-code-review/attachments/20200217/00e74159/attachment.html>
More information about the asterisk-code-review
mailing list