summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Mudgett <rmudgett@digium.com>2017-02-22 23:26:13 -0600
committerRichard Mudgett <rmudgett@digium.com>2017-03-17 10:50:17 -0500
commit60b372a883d97193a98e2eff7a50d1f8762c8dc6 (patch)
treee72e3278bb1b3fa00d241925e48fdf9c23f817fb
parent161fe61a0fe0796b28a70f034a57837b52e45669 (diff)
CHANNEL(callid): Give dialplan access to the callid.
* Added CHANNEL(callid) to retrieve the call identifier log tag associated with the channel. Dialplan now has access to the call log search key associated with the channel so it can be saved in case there is a problem with the call. ASTERISK-26878 Change-Id: I2c97ebd928b6f3c5bc80c5729e4d3c07f453049f
-rw-r--r--CHANGES7
-rw-r--r--funcs/func_channel.c15
2 files changed, 22 insertions, 0 deletions
diff --git a/CHANGES b/CHANGES
index 08c9185b6..a8fd715c9 100644
--- a/CHANGES
+++ b/CHANGES
@@ -41,6 +41,13 @@ app_voicemail
* Added 'fromstring' field to the voicemail boxes. If set, it will override
the global 'fromstring' field on a per-mailbox basis.
+func_channel
+------------------
+ * Added CHANNEL(callid) to retrieve the call log tag associated with the
+ channel. e.g., [C-00000000] Dialplan now has access to the call log
+ search key associated with the channel so it can be saved in case there
+ is a problem with the call.
+
res_pjsip
------------------
* A new transport parameter 'symmetric_transport' has been added.
diff --git a/funcs/func_channel.c b/funcs/func_channel.c
index 673de51d0..3273b78c4 100644
--- a/funcs/func_channel.c
+++ b/funcs/func_channel.c
@@ -232,6 +232,10 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
<enum name="max_forwards">
<para>R/W The maximum number of forwards allowed.</para>
</enum>
+ <enum name="callid">
+ <para>R/O Call identifier log tag associated with the channel
+ e.g., <literal>[C-00000000]</literal>.</para>
+ </enum>
</enumlist>
<xi:include xpointer="xpointer(/docs/info[@name='CHANNEL'])" />
</parameter>
@@ -446,6 +450,17 @@ static int func_channel_read(struct ast_channel *chan, const char *function,
ast_channel_lock(chan);
snprintf(buf, len, "%d", ast_max_forwards_get(chan));
ast_channel_unlock(chan);
+ } else if (!strcasecmp(data, "callid")) {
+ struct ast_callid *callid;
+
+ buf[0] = '\0';
+ ast_channel_lock(chan);
+ callid = ast_channel_callid(chan);
+ if (callid) {
+ ast_callid_strnprint(buf, len, callid);
+ ast_callid_unref(callid);
+ }
+ ast_channel_unlock(chan);
} else if (!ast_channel_tech(chan) || !ast_channel_tech(chan)->func_channel_read || ast_channel_tech(chan)->func_channel_read(chan, function, data, buf, len)) {
ast_log(LOG_WARNING, "Unknown or unavailable item requested: '%s'\n", data);
ret = -1;