Add application to set callerid presentation (bug #2078)
authorMark Spencer <markster@digium.com>
Sat, 7 Aug 2004 15:51:11 +0000 (15:51 +0000)
committerMark Spencer <markster@digium.com>
Sat, 7 Aug 2004 15:51:11 +0000 (15:51 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3591 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_setcallerid.c
include/asterisk/callerid.h

index a84c7a0..069c2af 100755 (executable)
 #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 @@ static char *descrip =
 "  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 @@ static int setcallerid_exec(struct ast_channel *chan, void *data)
 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);
 }
 
index 8f8df45..486c810 100755 (executable)
@@ -168,6 +168,16 @@ static inline float callerid_getcarrier(float *cr, float *ci, int bit)
        return *cr;
 }      
 
+#define AST_PRES_ALLOWED_USER_NUMBER_NOT_SCREENED      0x00
+#define AST_PRES_ALLOWED_USER_NUMBER_PASSED_SCREEN     0x01
+#define AST_PRES_ALLOWED_USER_NUMBER_FAILED_SCREEN     0x02
+#define AST_PRES_ALLOWED_NETWORK_NUMBER                                0x03
+#define AST_PRES_PROHIB_USER_NUMBER_NOT_SCREENED       0x20
+#define AST_PRES_PROHIB_USER_NUMBER_PASSED_SCREEN      0x21
+#define AST_PRES_PROHIB_USER_NUMBER_FAILED_SCREEN      0x22
+#define AST_PRES_PROHIB_NETWORK_NUMBER                         0x23
+#define AST_PRES_NUMBER_NOT_AVAILABLE                          0x43
+
 #define PUT_BYTE(a) do { \
        *(buf++) = (a); \
        bytes++; \