[svn-commits] murf: branch group/newcdr r117903 - in /team/group/newcdr: channels/ configs/...

SVN commits to the Digium repositories svn-commits at lists.digium.com
Thu May 22 14:05:32 CDT 2008


Author: murf
Date: Thu May 22 14:05:32 2008
New Revision: 117903

URL: http://svn.digium.com/view/asterisk?view=rev&rev=117903
Log:
Got rid of the CEL function set. Access via CHANNEL and CALLERID() funcs instead. the eventtime/eventtype fields will be channel vars at event handling time. Got the configs updated, things seem to working.

Removed:
    team/group/newcdr/funcs/func_cel.c
Modified:
    team/group/newcdr/channels/chan_skinny.c
    team/group/newcdr/configs/cel_custom.conf.sample
    team/group/newcdr/configs/cel_sqlite3_custom.conf.sample
    team/group/newcdr/funcs/func_channel.c
    team/group/newcdr/include/asterisk/cel.h
    team/group/newcdr/main/cel.c

Modified: team/group/newcdr/channels/chan_skinny.c
URL: http://svn.digium.com/view/asterisk/team/group/newcdr/channels/chan_skinny.c?view=diff&rev=117903&r1=117902&r2=117903
==============================================================================
--- team/group/newcdr/channels/chan_skinny.c (original)
+++ team/group/newcdr/channels/chan_skinny.c Thu May 22 14:05:32 2008
@@ -3122,7 +3122,7 @@
 						strsep(&cfg_context, "@");
 						if (ast_strlen_zero(cfg_context))
 							 cfg_context = "default";
-						l->mwi_event_sub = ast_event_subscribe(AST_EVENT_MWI, mwi_event_cb, NULL,
+						l->mwi_event_sub = ast_event_subscribe(AST_EVENT_MWI, mwi_event_cb, "Skinny mbox event", NULL,
 							AST_EVENT_IE_MAILBOX, AST_EVENT_IE_PLTYPE_STR, cfg_mailbox,
 							AST_EVENT_IE_CONTEXT, AST_EVENT_IE_PLTYPE_STR, cfg_context,
 							AST_EVENT_IE_NEWMSGS, AST_EVENT_IE_PLTYPE_EXISTS,

Modified: team/group/newcdr/configs/cel_custom.conf.sample
URL: http://svn.digium.com/view/asterisk/team/group/newcdr/configs/cel_custom.conf.sample?view=diff&rev=117903&r1=117902&r2=117903
==============================================================================
--- team/group/newcdr/configs/cel_custom.conf.sample (original)
+++ team/group/newcdr/configs/cel_custom.conf.sample Thu May 22 14:05:32 2008
@@ -6,4 +6,4 @@
 ; 
 ;
 ;[mappings]
-;Master.csv => "${CEL(eventtype)}","${CEL(eventtime)}","${CEL(cidname)}","${CEL(cidnum)}","${CEL(cidani)}","${CEL(cidrdnis)}","${CEL(ciddnid)}","${CEL(exten)}","${CEL(context)}","${CEL(channame)}","${CEL(appname)}","${CEL(appdata)}","${CEL(amaflags)}","${CEL(accountcode)}","${CEL(uniqueid)},"${CEL(peer)}","${CEL(userfield)}"
+;Master.csv => "${eventtype}","${eventtime}","${CALLERID(name)}","${CALLERID(num)}","${CALLERID(ANI)}","${CALLERID(RDNIS)}","${CALLERID(DNID)}","${CHANNEL(exten)}","${CHANNEL(context)}","${CHANNEL(channame)}","${CHANNEL(appname)}","${CHANNEL(appdata)}","${CHANNEL(amaflags)}","${CHANNEL(accountcode)}","${CHANNEL(uniqueid)},"${CHANNEL(peer)}","${CHANNEL(userfield)}"

Modified: team/group/newcdr/configs/cel_sqlite3_custom.conf.sample
URL: http://svn.digium.com/view/asterisk/team/group/newcdr/configs/cel_sqlite3_custom.conf.sample?view=diff&rev=117903&r1=117902&r2=117903
==============================================================================
--- team/group/newcdr/configs/cel_sqlite3_custom.conf.sample (original)
+++ team/group/newcdr/configs/cel_sqlite3_custom.conf.sample Thu May 22 14:05:32 2008
@@ -4,4 +4,4 @@
 ;[master] ; currently, only file "master.db" is supported, with only one table at a time.
 ;table	=> cel
 ;columns	=> eventtype, eventtime, cidname, cidnum, cidani, cidrdnis, ciddnid, context, exten, channame, appname, appdata, amaflags, accountcode, uniqueid, userfield, peer
-;values	=> '${CEL(eventtype)}','${CEL(eventtime)}','${CEL(cidname)}','${CEL(cidnum)}','${CEL(cidani)}','${CEL(cidrdnis)}','${CEL(ciddnis)}','${CEL(context)}','${CEL(exten)}','${CEL(channame)}','${CEL(appname)}','${CEL(appdata)}','${CEL(amaflags)}','${CEL(accountcode)}','${CEL(uniqueid)}','${CEL(userfield)}','${CEL(peer)}'
+;values	=> '${eventtype}','${eventtime}','${CALLERID(name)}','${CALLERID(num)}','${CALLERID(ANI)}','${CALLERID(DNIS)}','${CALLERID(RDNIS)}','${CHANNEL(context)}','${CHANNEL(exten)}','${CHANNEL(channame)}','${CHANNEL(appname)}','${CHANNEL(appdata)}','${CHANNEL(amaflags)}','${CHANNEL(accountcode)}','${CHANNEL(uniqueid)}','${CHANNEL(userfield)}','${CHANNEL(peer)}'

Modified: team/group/newcdr/funcs/func_channel.c
URL: http://svn.digium.com/view/asterisk/team/group/newcdr/funcs/func_channel.c?view=diff&rev=117903&r1=117902&r2=117903
==============================================================================
--- team/group/newcdr/funcs/func_channel.c (original)
+++ team/group/newcdr/funcs/func_channel.c Thu May 22 14:05:32 2008
@@ -23,6 +23,7 @@
  * \ingroup functions
  */
 
+#include <ctype.h>
 #include "asterisk.h"
 
 ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
@@ -94,6 +95,18 @@
 		locked_copy_string(chan, buf, chan->accountcode, len);
 	else if (!strcasecmp(data, "peeraccount"))
 		locked_copy_string(chan, buf, chan->peeraccount, len);
+	else if (!strcasecmp(data, "appname") && chan->appl)
+		locked_copy_string(chan, buf, chan->appl, len);
+	else if (!strcasecmp(data, "appdata") && chan->data)
+		locked_copy_string(chan, buf, chan->data, len);
+	else if (!strcasecmp(data, "exten") && chan->data)
+		locked_copy_string(chan, buf, chan->exten, len);
+	else if (!strcasecmp(data, "context") && chan->data)
+		locked_copy_string(chan, buf, chan->context, len);
+	else if (!strcasecmp(data, "userfield") && chan->data)
+		locked_copy_string(chan, buf, chan->userfield, len);
+	else if (!strcasecmp(data, "channame") && chan->data)
+		locked_copy_string(chan, buf, chan->name, len);
 	else if (!strcasecmp(data, "linkedid")) {
 		ast_channel_lock(chan);
 		if (ast_strlen_zero(chan->linkedid)) {
@@ -104,12 +117,26 @@
 			ast_copy_string(buf, chan->linkedid, len);
 		}
 		ast_channel_unlock(chan);
-	}
-	else if (!strcasecmp(data, "transfercapability"))
+	} else if (!strcasecmp(data, "peer")) {
+		struct ast_channel *p;
+		ast_channel_lock(chan);
+		p = ast_bridged_channel(chan);
+		if (p || chan->tech || chan->cdr) /* dummy channel? if so, we hid the peer name in the language */
+			ast_copy_string(buf, (p ? p->name : ""), len);
+		else
+			ast_copy_string(buf, chan->language, len); /* a horrible kludge, but... how else? */
+		ast_channel_unlock(chan);
+	} else if (!strcasecmp(data, "uniqueid")) {
+		locked_copy_string(chan, buf, chan->uniqueid, len);
+	} else if (!strcasecmp(data, "transfercapability"))
 		locked_copy_string(chan, buf, transfercapability_table[chan->transfercapability & 0x1f], len);
 	else if (!strcasecmp(data, "callgroup")) {
 		char groupbuf[256];
 		locked_copy_string(chan, buf,  ast_print_group(groupbuf, sizeof(groupbuf), chan->callgroup), len);
+	} else if (!strcasecmp(data, "amaflags")) {
+		char amabuf[256];
+		snprintf(amabuf,sizeof(amabuf), "%d", chan->amaflags);
+		locked_copy_string(chan, buf, amabuf, len);
 	} else if (!chan->tech || !chan->tech->func_channel_read || chan->tech->func_channel_read(chan, function, data, buf, len)) {
 		ast_log(LOG_WARNING, "Unknown or unavailable item requested: '%s'\n", data);
 		ret = -1;
@@ -132,7 +159,22 @@
 		locked_string_field_set(chan, musicclass, value);
 	else if (!strcasecmp(data, "accountcode"))
 		locked_string_field_set(chan, accountcode, value);
-	else if (!strcasecmp(data, "peeraccount"))
+	else if (!strcasecmp(data, "userfield"))
+		locked_string_field_set(chan, userfield, value);
+	else if (!strcasecmp(data, "amaflags")) {
+		ast_channel_lock(chan);
+		if(isdigit(*value)) {
+			
+			sscanf(value, "%d", &chan->amaflags);
+		} else if (!strcasecmp(value,"OMIT")){
+			chan->amaflags = 1;
+		} else if (!strcasecmp(value,"BILLING")){
+			chan->amaflags = 2;
+		} else if (!strcasecmp(value,"DOCUMENTATION")){
+			chan->amaflags = 3;
+		}
+		ast_channel_unlock(chan);
+	} else if (!strcasecmp(data, "peeraccount"))
 		locked_string_field_set(chan, peeraccount, value);
 #ifdef CHANNEL_TRACE
 	else if (!strcasecmp(data, "trace")) {
@@ -188,20 +230,35 @@
 	.desc = "Gets/set various pieces of information about the channel.\n"
 		"Standard items (provided by all channel technologies) are:\n"
 		"R/W	accountcode        account code used for logging in CDRs and CELs\n"
+		"R/W	amaflags           AMA Flags for CDRs and CELs\n"
+	    "                          When Reading, it will return a number:\n"
+	    "                            1=OMIT; 2=BILLING; 3=DOCUMENTATION\n"
+	    "                          When Writing, you can either specify 1,2, or 3,\n"
+	    "                            or OMIT, BILLING, or DOCUMENTATION\n"
+        "                          If other than OMIT, BILLING, or DOCUMENTATION\n"
+        "                            are specified, the value will not be changed.\n"
+		"R/O	appname            The name of a currently running application (dialplan)\n"
+		"R/O	appdata            The arguments supplied for calling the application (dialplan)\n"
 		"R/O	audioreadformat    format currently being read\n"
 		"R/O	audionativeformat  format used natively for audio\n"
 		"R/O	audiowriteformat   format currently being written\n"
 		"R/W	callgroup          call groups for call pickup\n"
+		"R/O	channame           The unique name of the channel\n"
 		"R/O	channeltype        technology used for channel\n"
+		"R/O	context            The current context in the dialplan\n"
+		"R/O	exten              The current extension in the dialplan\n"
 		"R/W	language           language for sounds played\n"
 		"R/O	linkdedid          unique id given to all participating channels in this call\n"
+		"R/O	uniquedid          unique id given to each channel\n"
 		"R/W	musicclass         class (from musiconhold.conf) for hold music\n"
 		"R/W	parkinglot         parkinglot for parking\n"
+		"R/O	peer               Returns the name of the bridged peer, if applicable\n"
 		"R/W	peeraccount        the account code that this channel is talking to\n"
 		"R/W	rxgain             set rxgain level on channel drivers that support it\n"
 		"R/O	state              state for channel\n"
 		"R/W	tonezone           zone for indications played\n"
 		"R/W	txgain             set txgain level on channel drivers that support it\n"
+		"R/W	userfield          get/set the userfield entry in the channel\n"
 		"R/O	videonativeformat  format used natively for video\n"
 #ifdef CHANNEL_TRACE
 		"R/W	trace              whether or not context tracing is enabled\n"

Modified: team/group/newcdr/include/asterisk/cel.h
URL: http://svn.digium.com/view/asterisk/team/group/newcdr/include/asterisk/cel.h?view=diff&rev=117903&r1=117902&r2=117903
==============================================================================
--- team/group/newcdr/include/asterisk/cel.h (original)
+++ team/group/newcdr/include/asterisk/cel.h Thu May 22 14:05:32 2008
@@ -110,9 +110,6 @@
 
 int ast_cel_amaflags2int(const char *flag);
 
-/*! CEL channel variable retrieval */
-void ast_cel_getvar(struct ast_channel *chan, const char *name, char **ret, char *workspace, int workspacelen, int raw) ;
-
 /*! Set a CEL channel variable 
 	\note You can't set the CEL variables that are managed by the PBX
 */

Modified: team/group/newcdr/main/cel.c
URL: http://svn.digium.com/view/asterisk/team/group/newcdr/main/cel.c?view=diff&rev=117903&r1=117902&r2=117903
==============================================================================
--- team/group/newcdr/main/cel.c (original)
+++ team/group/newcdr/main/cel.c Thu May 22 14:05:32 2008
@@ -449,93 +449,6 @@
 	}
 }
 
-/*! CEL channel variable retrieval */
-void ast_cel_getvar(struct ast_channel *chan, const char *name, char **ret, char *workspace, int workspacelen, int raw) 
-{
-	const char *fmt = "%Y-%m-%d %T";
-
-	if (!chan)  /* don't die if the chan is null */
-		return;
-
-	*ret = NULL;
-
-	if (!strcasecmp(name, "cidname"))
-		ast_copy_string(workspace, chan->cid.cid_name, workspacelen);
-	else if (!strcasecmp(name, "cidnum"))
-		ast_copy_string(workspace, chan->cid.cid_num, workspacelen);
-	else if (!strcasecmp(name, "cidani"))
-		ast_copy_string(workspace, chan->cid.cid_ani, workspacelen);
-	else if (!strcasecmp(name, "cidrdnis"))
-		ast_copy_string(workspace, chan->cid.cid_rdnis, workspacelen);
-	else if (!strcasecmp(name, "ciddnid"))
-		ast_copy_string(workspace, chan->cid.cid_dnid, workspacelen);
-	else if (!strcasecmp(name, "exten"))
-		ast_copy_string(workspace, chan->exten, workspacelen);
-	else if (!strcasecmp(name, "context"))
-		ast_copy_string(workspace, chan->context, workspacelen);
-	else if (!strcasecmp(name, "channame"))
-		ast_copy_string(workspace, chan->name, workspacelen);
-	else if (!strcasecmp(name, "appname"))
-		ast_copy_string(workspace, chan->appl, workspacelen);
-	else if (!strcasecmp(name, "userfield"))
-		ast_copy_string(workspace, chan->userfield, workspacelen);
-	else if (!strcasecmp(name, "peer")) {
-		struct ast_channel *p = ast_bridged_channel(chan);
-		if (p || chan->tech || chan->cdr) /* dummy channel? if so, we hid the peer name in the language */
-			ast_copy_string(workspace, (p ? p->name : ""), workspacelen);
-		else
-			ast_copy_string(workspace, chan->language, workspacelen); /* a horrible kludge, but... how else? */
-	} else if (!strcasecmp(name, "appdata"))
-		ast_copy_string(workspace, chan->data, workspacelen);
-	else if (!strcasecmp(name, "eventtype")) { /* only available to the backends, and needs special handling via raw */
-		struct ast_var_t *variables;
-		struct varshead *headp = &chan->varshead;
-		const char *t2=0;
-		
-		AST_LIST_TRAVERSE(headp, variables, entries) {
-			if (!strcasecmp(name, ast_var_name(variables))) {
-				t2 = ast_var_value(variables);
-				break;
-			}
-		}
-		ast_copy_string(workspace, t2 ? t2 : "<none>",  workspacelen);
-	} else if (!strcasecmp(name, "eventtime")) { /* only available to the backends, and needs special handling via raw */
-		struct ast_var_t *variables;
-		struct varshead *headp = &chan->varshead;
-		const char *t2=0;
-		struct timeval tv2={0};
-		
-		AST_LIST_TRAVERSE(headp, variables, entries) {
-			if (!strcasecmp(name, ast_var_name(variables))) {
-				t2 = ast_var_value(variables);
-				break;
-			}
-		}
-		if (raw)
-			ast_copy_string(workspace, t2 ? t2 : "<none>",  workspacelen);
-		else if (!ast_strlen_zero(t2)) {
-			tv2.tv_sec = atoi(t2);
-			cel_get_tv(tv2, fmt, workspace, workspacelen);
-		} else
-			ast_copy_string(workspace,"<none>",workspacelen);
-		
-	} else if (!strcasecmp(name, "amaflags")) {
-		if (raw) {
-			snprintf(workspace, workspacelen, "%d", chan->amaflags);
-		} else {
-			ast_copy_string(workspace, ast_cel_flags2str(chan->amaflags), workspacelen);
-		}
-	} else if (!strcasecmp(name, "accountcode"))
-		ast_copy_string(workspace, chan->accountcode, workspacelen);
-	else if (!strcasecmp(name, "uniqueid"))
-		ast_copy_string(workspace, chan->uniqueid, workspacelen);
-	else
-		workspace[0] = '\0';
-
-	if (!ast_strlen_zero(workspace))
-		*ret = workspace;
-}
-
 /* this routine is only called to populate a dummy channel struct with the data,
    so the CEL func can grab the correct datum and have it substituted, the same as if
    a real channel were being used with the CEL func. What we do for re-use!! */




More information about the svn-commits mailing list