Add new 'p' flag to Dial for preserve callerid (bug #3490)
authorMark Spencer <markster@digium.com>
Wed, 2 Feb 2005 20:35:25 +0000 (20:35 +0000)
committerMark Spencer <markster@digium.com>
Wed, 2 Feb 2005 20:35:25 +0000 (20:35 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@4954 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_dial.c

index 2e82647..98522ab 100755 (executable)
@@ -71,6 +71,8 @@ static char *descrip =
 "             making/redirecting the outgoing call. For example, some PSTNs\n"
 "             don't allow callerids from other extensions then the ones\n"
 "             that are assigned to you.\n"
+"      'p' -- Preserve the incoming Caller*ID on the outbound leg of the call (old style\n"
+"             asterisk behavior)\n"
 "      'r' -- indicate ringing to the calling party, pass no audio until answered.\n"
 "      'm[(class)]' -- provide hold music to the calling party until answered (optionally\n"
 "                      with the specified class.\n"
@@ -145,6 +147,7 @@ static char *rdescrip =
 #define DIAL_MONITOR_OUT                       (1 << 9)
 #define DIAL_GO_ON                                     (1 << 10)
 #define DIAL_HALT_ON_DTMF                      (1 << 11)
+#define DIAL_PRESERVE_CALLERID         (1 << 12)
 
 struct localuser {
        struct ast_channel *chan;
@@ -403,7 +406,8 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in, struct localu
                                                        numnochan++;
                                                } else {
                                                        /* After calling, set callerid to extension */
-                                                       ast_set_callerid(o->chan, ast_strlen_zero(in->macroexten) ? in->exten : in->macroexten, get_cid_name(cidname, sizeof(cidname), in), NULL);
+                                                       if (!ast_test_flag(peerflags, DIAL_PRESERVE_CALLERID))
+                                                               ast_set_callerid(o->chan, ast_strlen_zero(in->macroexten) ? in->exten : in->macroexten, get_cid_name(cidname, sizeof(cidname), in), NULL);
                                                }
                                        }
                                        /* Hangup the original channel now, in case we needed it */
@@ -890,6 +894,7 @@ static int dial_exec_full(struct ast_channel *chan, void *data, struct ast_flags
                        ast_set2_flag(peerflags, strchr(transfer, 'W'), DIAL_MONITOR_OUT);      
                        ast_set2_flag(peerflags, strchr(transfer, 'd'), DIAL_HALT_ON_DTMF);     
                        ast_set2_flag(peerflags, strchr(transfer, 'g'), DIAL_GO_ON);    
+                       ast_set2_flag(peerflags, strchr(transfer, 'p'), DIAL_PRESERVE_CALLERID);        
                }
                strncpy(numsubst, number, sizeof(numsubst)-1);
                /* If we're dialing by extension, look at the extension to know what to dial */
@@ -1013,7 +1018,8 @@ static int dial_exec_full(struct ast_channel *chan, void *data, struct ast_flags
                } else {
                        if (option_verbose > 2)
                                ast_verbose(VERBOSE_PREFIX_3 "Called %s\n", numsubst);
-                       ast_set_callerid(tmp->chan, ast_strlen_zero(chan->macroexten) ? chan->exten : chan->macroexten, get_cid_name(cidname, sizeof(cidname), chan), NULL);
+                       if (!ast_test_flag(peerflags, DIAL_PRESERVE_CALLERID))
+                               ast_set_callerid(tmp->chan, ast_strlen_zero(chan->macroexten) ? chan->exten : chan->macroexten, get_cid_name(cidname, sizeof(cidname), chan), NULL);
                }
                /* Put them in the list of outgoing thingies...  We're ready now. 
                   XXX If we're forcibly removed, these outgoing calls won't get