[Asterisk-cvs] asterisk/apps app_setcallerid.c,1.3,1.4

markster at lists.digium.com markster at lists.digium.com
Sat Aug 7 12:05:12 CDT 2004


Update of /usr/cvsroot/asterisk/apps
In directory localhost.localdomain:/tmp/cvs-serv32513/apps

Modified Files:
	app_setcallerid.c 
Log Message:
Add application to set callerid presentation (bug #2078)


Index: app_setcallerid.c
===================================================================
RCS file: /usr/cvsroot/asterisk/apps/app_setcallerid.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- app_setcallerid.c	22 Jun 2004 19:32:52 -0000	1.3
+++ app_setcallerid.c	7 Aug 2004 15:51:11 -0000	1.4
@@ -19,9 +19,83 @@
 #include <asterisk/module.h>
 #include <asterisk/translate.h>
 #include <asterisk/image.h>
+#include <asterisk/callerid.h>
 #include <string.h>
 #include <stdlib.h>
 
+static char *app2 = "SetCallerPres";
+
+static char *synopsis2 = "Set CallerID Presentation";
+
+STANDARD_LOCAL_USER;
+
+LOCAL_USER_DECL;
+
+static struct {
+	int val;
+	char *name;
+} preses[] = {
+	{  AST_PRES_ALLOWED_USER_NUMBER_NOT_SCREENED, "allowed_not_screened" },
+	{  AST_PRES_ALLOWED_USER_NUMBER_PASSED_SCREEN, "allowed_passed_screen" },
+	{  AST_PRES_ALLOWED_USER_NUMBER_FAILED_SCREEN, "allowed_failed_screen" },
+	{  AST_PRES_ALLOWED_NETWORK_NUMBER, "allowed" },
+	{  AST_PRES_PROHIB_USER_NUMBER_NOT_SCREENED	, "prohib_not_screened" },
+	{  AST_PRES_PROHIB_USER_NUMBER_PASSED_SCREEN, "prohib_passed_screen" },
+	{  AST_PRES_PROHIB_USER_NUMBER_FAILED_SCREEN, "prohib_failed_screen" },
+	{  AST_PRES_PROHIB_NETWORK_NUMBER, "prohib" },
+	{  AST_PRES_NUMBER_NOT_AVAILABLE, "unavailable" },
+};
+
+static char *descrip2 = 
+"  SetCallerPres(presentation): Set Caller*ID presentation on\n"
+"a call to a new value.  Sets ANI as well if a flag is used.\n"
+"Always returns 0.  Valid presentations are:\n"
+"\n"
+"      allowed_not_screened    : Presentation Allowed, Not Screened\n"
+"      allowed_passed_screen   : Presentation Allowed, Passed Screen\n" 
+"      allowed_failed_screen   : Presentation Allowed, Failed Screen\n" 
+"      allowed                 : Presentation Allowed, Network Number\n"
+"      prohib_not_screened     : Presentation Prohibited, Not Screened\n" 
+"      prohib_passed_screen    : Presentation Prohibited, Passed Screen\n"
+"      prohib_failed_screen    : Presentation Prohibited, Failed Screen\n"
+"      prohib                  : Presentation Prohibited, Network Number\n"
+"      unavailable             : Number Unavailable\n"
+"\n"
+;
+
+static int setcallerid_pres_exec(struct ast_channel *chan, void *data)
+{
+	int res = 0;
+	char tmp[256] = "";
+	struct localuser *u;
+	int x;
+	char *opts;
+	int pres = -1;
+	if (data)
+		strncpy(tmp, (char *)data, sizeof(tmp) - 1);
+	opts = strchr(tmp, '|');
+	if (opts) {
+		*opts = '\0';
+		opts++;
+	}
+	for (x=0;x<sizeof(preses) / sizeof(preses[0]);x++) {
+		if (!strcasecmp(preses[x].name, tmp)) {
+			pres = preses[x].val;
+			break;
+		}
+	}
+	if (pres < 0) {
+		ast_log(LOG_WARNING, "'%s' is not a valid presentation (see 'show application SetCallerPres')\n", tmp);
+		return 0;
+	}
+	LOCAL_USER_ADD(u);
+	chan->callingpres = pres;
+	LOCAL_USER_REMOVE(u);
+	return res;
+}
+
+
+
 static char *tdesc = "Set CallerID Application";
 
 static char *app = "SetCallerID";
@@ -32,10 +106,6 @@
 "  SetCallerID(clid[|a]): Set Caller*ID on a call to a new\n"
 "value.  Sets ANI as well if a flag is used.  Always returns 0\n";
 
-STANDARD_LOCAL_USER;
-
-LOCAL_USER_DECL;
-
 static int setcallerid_exec(struct ast_channel *chan, void *data)
 {
 	int res = 0;
@@ -61,11 +131,13 @@
 int unload_module(void)
 {
 	STANDARD_HANGUP_LOCALUSERS;
+	ast_unregister_application(app2);
 	return ast_unregister_application(app);
 }
 
 int load_module(void)
 {
+	ast_register_application(app2, setcallerid_pres_exec, synopsis2, descrip2);
 	return ast_register_application(app, setcallerid_exec, synopsis, descrip);
 }
 




More information about the svn-commits mailing list