diff --git a/apps/app_mixmonitor.c b/apps/app_mixmonitor.c
index e2b9e8c148..1592c4077a 100644
--- a/apps/app_mixmonitor.c
+++ b/apps/app_mixmonitor.c
@@ -90,6 +90,11 @@
Play a periodic beep while this call is being recorded.
Interval, in seconds. Default is 15.
+
+ Use the real Caller ID from the channel for the voicemail Caller ID.
+ By default, the Connected Line is used. If you want the channel caller's
+ real number, you may need to specify this option.
+
Delete the recording file as soon as MixMonitor is done with it.
For example, if you use the m option to dispatch the recording to a voicemail box,
@@ -413,6 +418,7 @@ enum mixmonitor_flags {
MUXFLAG_DEPRECATED_RWSYNC = (1 << 14),
MUXFLAG_NO_RWSYNC = (1 << 15),
MUXFLAG_AUTO_DELETE = (1 << 16),
+ MUXFLAG_REAL_CALLERID = (1 << 17),
};
enum mixmonitor_args {
@@ -433,6 +439,7 @@ AST_APP_OPTIONS(mixmonitor_opts, {
AST_APP_OPTION('a', MUXFLAG_APPEND),
AST_APP_OPTION('b', MUXFLAG_BRIDGED),
AST_APP_OPTION_ARG('B', MUXFLAG_BEEP, OPT_ARG_BEEP_INTERVAL),
+ AST_APP_OPTION('c', MUXFLAG_REAL_CALLERID),
AST_APP_OPTION('d', MUXFLAG_AUTO_DELETE),
AST_APP_OPTION('p', MUXFLAG_BEEP_START),
AST_APP_OPTION('P', MUXFLAG_BEEP_STOP),
@@ -1035,20 +1042,37 @@ static int launch_monitor_thread(struct ast_channel *chan, const char *filename,
if (!ast_strlen_zero(recipients)) {
char callerid[256];
- struct ast_party_connected_line *connected;
ast_channel_lock(chan);
- /* We use the connected line of the invoking channel for caller ID. */
-
- connected = ast_channel_connected(chan);
- ast_debug(3, "Connected Line CID = %d - %s : %d - %s\n", connected->id.name.valid,
- connected->id.name.str, connected->id.number.valid,
- connected->id.number.str);
- ast_callerid_merge(callerid, sizeof(callerid),
- S_COR(connected->id.name.valid, connected->id.name.str, NULL),
- S_COR(connected->id.number.valid, connected->id.number.str, NULL),
- "Unknown");
+ /* We use the connected line of the invoking channel for caller ID,
+ * unless we've been told to use the Caller ID.
+ * The initial use for this relied on Connected Line to get the
+ * actual number for recording with Digium phones,
+ * but in generic use the Caller ID is likely what people want.
+ */
+
+ if (ast_test_flag(mixmonitor, MUXFLAG_REAL_CALLERID)) {
+ struct ast_party_caller *caller;
+ caller = ast_channel_caller(chan);
+ ast_debug(3, "Caller ID = %d - %s : %d - %s\n", caller->id.name.valid,
+ caller->id.name.str, caller->id.number.valid,
+ caller->id.number.str);
+ ast_callerid_merge(callerid, sizeof(callerid),
+ S_COR(caller->id.name.valid, caller->id.name.str, NULL),
+ S_COR(caller->id.number.valid, caller->id.number.str, NULL),
+ "Unknown");
+ } else {
+ struct ast_party_connected_line *connected;
+ connected = ast_channel_connected(chan);
+ ast_debug(3, "Connected Line CID = %d - %s : %d - %s\n", connected->id.name.valid,
+ connected->id.name.str, connected->id.number.valid,
+ connected->id.number.str);
+ ast_callerid_merge(callerid, sizeof(callerid),
+ S_COR(connected->id.name.valid, connected->id.name.str, NULL),
+ S_COR(connected->id.number.valid, connected->id.number.str, NULL),
+ "Unknown");
+ }
ast_string_field_set(mixmonitor, call_context, ast_channel_context(chan));
ast_string_field_set(mixmonitor, call_macrocontext, ast_channel_macrocontext(chan));
diff --git a/doc/CHANGES-staging/app_mixmonitor_clid.txt b/doc/CHANGES-staging/app_mixmonitor_clid.txt
new file mode 100644
index 0000000000..a8331ec673
--- /dev/null
+++ b/doc/CHANGES-staging/app_mixmonitor_clid.txt
@@ -0,0 +1,5 @@
+Subject: app_mixmonitor
+
+Adds the c option to use the real Caller ID on
+the channel in voicemail recordings as opposed
+to the Connected Line.