Add unique identifier
authorMark Spencer <markster@digium.com>
Fri, 30 May 2003 04:41:18 +0000 (04:41 +0000)
committerMark Spencer <markster@digium.com>
Fri, 30 May 2003 04:41:18 +0000 (04:41 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@1064 65c4cc65-6c06-0410-ace0-fbb531ad65f3

README.variables
cdr.c
cdr/cdr_csv.c
channel.c
cli.c
doc/README.variables
include/asterisk/cdr.h
include/asterisk/channel.h
pbx.c

index 8c2d83c..8a6a3e2 100755 (executable)
@@ -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 a06c88f..6be19f2 100755 (executable)
--- 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;
 }
index 8031b4a..4531aab 100755 (executable)
@@ -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 */
index 7ceb7a7..275eb2f 100755 (executable)
--- 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 2c17a5d..0254e4a 100755 (executable)
--- 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)" : "",
index 8c2d83c..8a6a3e2 100755 (executable)
@@ -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 
index 2136716..0b96810 100755 (executable)
@@ -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);
index e40a537..03b1fa4 100755 (executable)
@@ -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 2d2f926..f3a3622 100755 (executable)
--- 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