diff options
-rwxr-xr-x | README.variables | 1 | ||||
-rwxr-xr-x | cdr.c | 2 | ||||
-rwxr-xr-x | cdr/cdr_csv.c | 8 | ||||
-rwxr-xr-x | channel.c | 2 | ||||
-rwxr-xr-x | cli.c | 3 | ||||
-rwxr-xr-x | doc/README.variables | 1 | ||||
-rwxr-xr-x | include/asterisk/cdr.h | 2 | ||||
-rwxr-xr-x | include/asterisk/channel.h | 3 | ||||
-rwxr-xr-x | pbx.c | 2 |
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 @@ -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 */ @@ -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); @@ -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; @@ -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 |