[Asterisk-cvs] asterisk/apps app_setcdruserfield.c,1.2,1.3

citats at lists.digium.com citats at lists.digium.com
Fri Mar 26 01:31:46 CST 2004


Update of /usr/cvsroot/asterisk/apps
In directory mongoose.digium.com:/tmp/cvs-serv28088/apps

Modified Files:
	app_setcdruserfield.c 
Log Message:
Add manager action 'SetCDRUserField' (bug #1298)



Index: app_setcdruserfield.c
===================================================================
RCS file: /usr/cvsroot/asterisk/apps/app_setcdruserfield.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- app_setcdruserfield.c	11 Jan 2004 18:37:59 -0000	1.2
+++ app_setcdruserfield.c	26 Mar 2004 06:28:56 -0000	1.3
@@ -17,6 +17,8 @@
 #include <asterisk/module.h>
 #include <asterisk/pbx.h>
 #include <asterisk/logger.h>
+#include <asterisk/config.h>
+#include <asterisk/manager.h>
 
 #include <stdlib.h>
 #include <string.h>
@@ -59,6 +61,39 @@
 
 LOCAL_USER_DECL;
 
+static int action_setcdruserfield(struct mansession *s, struct message *m)
+{
+	struct ast_channel *c = NULL;
+	char *userfield = astman_get_header(m, "UserField");
+	char *channel = astman_get_header(m, "Channel");
+	char *append = astman_get_header(m, "Append");
+
+	if (!strlen(channel)) {
+		astman_send_error(s, m, "No Channel specified");
+		return 0;
+	}
+	if (!strlen(userfield)) {
+		astman_send_error(s, m, "No UserField specified");
+		return 0;
+	}
+	c = ast_channel_walk(NULL);
+	while (c) {
+		if (!strcasecmp(c->name, channel))
+			break;
+		c = ast_channel_walk(c);
+	}
+	if (!c) {
+		astman_send_error(s, m, "No such channel");
+		return 0;
+	}
+	if (ast_true(append))
+		ast_cdr_appenduserfield(c, userfield);
+	else
+		ast_cdr_setuserfield(c, userfield);
+	astman_send_ack(s, m, "CDR Userfield Set");
+	return 0;
+}
+
 static int setcdruserfield_exec(struct ast_channel *chan, void *data)
 {
 	struct localuser *u;
@@ -97,6 +132,7 @@
 	STANDARD_HANGUP_LOCALUSERS;
 	res = ast_unregister_application(setcdruserfield_app);
 	res |= ast_unregister_application(appendcdruserfield_app);
+	ast_manager_unregister("SetCDRUserField");
 	return res;
 }
 
@@ -105,7 +141,7 @@
 	int res;
 	res = ast_register_application(setcdruserfield_app, setcdruserfield_exec, setcdruserfield_synopsis, setcdruserfield_descrip);
 	res |= ast_register_application(appendcdruserfield_app, appendcdruserfield_exec, appendcdruserfield_synopsis, appendcdruserfield_descrip);
-
+	ast_manager_register("SetCDRUserField", EVENT_FLAG_CALL, action_setcdruserfield, "Set the CDR UserField");
 	return res;
 }
 




More information about the svn-commits mailing list