aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xREADME.variables1
-rwxr-xr-xcdr.c2
-rwxr-xr-xcdr/cdr_csv.c8
-rwxr-xr-xchannel.c2
-rwxr-xr-xcli.c3
-rwxr-xr-xdoc/README.variables1
-rwxr-xr-xinclude/asterisk/cdr.h2
-rwxr-xr-xinclude/asterisk/channel.h3
-rwxr-xr-xpbx.c2
9 files changed, 22 insertions, 2 deletions
diff --git a/README.variables b/README.variables
index 8c2d83cb9..8a6a3e201 100755
--- a/README.variables
+++ b/README.variables
@@ -39,6 +39,7 @@ ${CHANNEL} Current channel name
${ENV(VAR)} Environmental variable VAR
${EPOCH} Current unix style epoch
${DATETIME} Current date time in the format: YYYY-MM-DD_HH:MM:SS
+${UNIQUEID} Current call unique identifier
There are two reference modes - reference by value and reference by name.
To refer to a variable with its name (as an argument to a function that
diff --git a/cdr.c b/cdr.c
index a06c88f99..6be19f260 100755
--- a/cdr.c
+++ b/cdr.c
@@ -250,6 +250,8 @@ int ast_cdr_init(struct ast_cdr *cdr, struct ast_channel *c)
/* Destination information */
strncpy(cdr->dst, c->exten, sizeof(cdr->dst) - 1);
strncpy(cdr->dcontext, c->context, sizeof(cdr->dcontext) - 1);
+ /* Unique call identifier */
+ strncpy(cdr->uniqueid, c->uniqueid, sizeof(cdr->uniqueid) - 1);
}
return 0;
}
diff --git a/cdr/cdr_csv.c b/cdr/cdr_csv.c
index 8031b4abe..4531aab59 100755
--- a/cdr/cdr_csv.c
+++ b/cdr/cdr_csv.c
@@ -27,6 +27,8 @@
#define DATE_FORMAT "%Y-%m-%d %T"
+/* #define CSV_LOGUNIQUEID 1 */
+
#include <stdio.h>
#include <string.h>
@@ -57,7 +59,7 @@
// "end time" minus "answer time"
"disposition", // ANSWERED, NO ANSWER, BUSY
"amaflags", // DOCUMENTATION, BILL, IGNORE etc, specified on a per channel basis like accountcode.
-
+ "uniqueid", // unique call identifier
*/
static char *desc = "Comma Separated Values CDR Backend";
@@ -158,6 +160,10 @@ static int build_csv_record(char *buf, int len, struct ast_cdr *cdr)
/* AMA Flags */
append_string(buf, ast_cdr_flags2str(cdr->amaflags), len);
+#ifdef CSV_LOGUNIQUEID
+ /* Unique ID */
+ append_string(buf, cdr->uniqueid, len);
+#endif
/* If we hit the end of our buffer, log an error */
if (strlen(buf) < len - 5) {
/* Trim off trailing comma */
diff --git a/channel.c b/channel.c
index 7ceb7a78b..275eb2fe5 100755
--- a/channel.c
+++ b/channel.c
@@ -41,6 +41,7 @@
static int shutting_down = 0;
+static int uniqueint = 0;
/* XXX Lock appropriately in more functions XXX */
@@ -322,6 +323,7 @@ struct ast_channel *ast_channel_alloc(int needqueue)
tmp->data = NULL;
tmp->fin = 0;
tmp->fout = 0;
+ snprintf(tmp->uniqueid, sizeof(tmp->uniqueid), "%li.%d", time(NULL), uniqueint++);
headp=&tmp->varshead;
ast_pthread_mutex_init(&tmp->lock);
AST_LIST_HEAD_INIT(headp);
diff --git a/cli.c b/cli.c
index 2c17a5d57..0254e4af8 100755
--- a/cli.c
+++ b/cli.c
@@ -476,6 +476,7 @@ static int handle_showchan(int fd, int argc, char *argv[])
" -- General --\n"
" Name: %s\n"
" Type: %s\n"
+ " UniqueID: %s\n"
" Caller ID: %s\n"
" DNID Digits: %s\n"
" State: %s (%d)\n"
@@ -497,7 +498,7 @@ static int handle_showchan(int fd, int argc, char *argv[])
" Data: %s\n"
" Stack: %d\n"
" Blocking in: %s\n",
- c->name, c->type,
+ c->name, c->type, c->uniqueid,
(c->callerid ? c->callerid : "(N/A)"),
(c->dnid ? c->dnid : "(N/A)" ), ast_state2str(c->_state), c->_state, c->rings, c->nativeformats, c->writeformat, c->readformat,
c->fds[0], c->fin & 0x7fffffff, (c->fin & 0x80000000) ? " (DEBUGGED)" : "",
diff --git a/doc/README.variables b/doc/README.variables
index 8c2d83cb9..8a6a3e201 100755
--- a/doc/README.variables
+++ b/doc/README.variables
@@ -39,6 +39,7 @@ ${CHANNEL} Current channel name
${ENV(VAR)} Environmental variable VAR
${EPOCH} Current unix style epoch
${DATETIME} Current date time in the format: YYYY-MM-DD_HH:MM:SS
+${UNIQUEID} Current call unique identifier
There are two reference modes - reference by value and reference by name.
To refer to a variable with its name (as an argument to a function that
diff --git a/include/asterisk/cdr.h b/include/asterisk/cdr.h
index 213671631..0b9681035 100755
--- a/include/asterisk/cdr.h
+++ b/include/asterisk/cdr.h
@@ -67,6 +67,8 @@ struct ast_cdr {
char accountcode[20];
/*! Whether or not the record has been posted */
int posted;
+ /* Unique Channel Identifier */
+ char uniqueid[32];
};
typedef int (*ast_cdrbe)(struct ast_cdr *cdr);
diff --git a/include/asterisk/channel.h b/include/asterisk/channel.h
index e40a5378f..03b1fa448 100755
--- a/include/asterisk/channel.h
+++ b/include/asterisk/channel.h
@@ -188,6 +188,9 @@ struct ast_channel {
unsigned int fin;
unsigned int fout;
+ /* Unique Channel Identifier */
+ char uniqueid[32];
+
/* A linked list for variables */
struct ast_var_t *vars;
AST_LIST_HEAD(varshead,ast_var_t) varshead;
diff --git a/pbx.c b/pbx.c
index 2d2f92692..f3a362254 100755
--- a/pbx.c
+++ b/pbx.c
@@ -849,6 +849,8 @@ static void pbx_substitute_variables_temp(struct ast_channel *c,const char *var,
brokentime.tm_sec
);
*ret = workspace;
+ } else if (!strcmp(var, "UNIQUEID")) {
+ snprintf(workspace, workspacelen -1, "%s", c->uniqueid);
} else {
AST_LIST_TRAVERSE(headp,variables,entries) {
#if 0