Sound confirmation of call pickup success.
authorTilghman Lesher <tilghman@meg.abyt.es>
Thu, 26 Feb 2009 18:41:28 +0000 (18:41 +0000)
committerTilghman Lesher <tilghman@meg.abyt.es>
Thu, 26 Feb 2009 18:41:28 +0000 (18:41 +0000)
(closes issue #13826)
 Reported by: azielke
 Patches:
       pickupsound2-trunk.patch uploaded by azielke (license 548)
       __20081124_bug_13826_updated.patch uploaded by lmadsen (license 10)
 Tested by: lmadsen

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@178919 65c4cc65-6c06-0410-ace0-fbb531ad65f3

CHANGES
configs/features.conf.sample
main/features.c

diff --git a/CHANGES b/CHANGES
index 9bbccb6..8da30aa 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -149,6 +149,8 @@ Miscellaneous
    externhost and localnet settings.
  * The Asterisk core now supports ITU G.722.1 and G.722.1C media streams, and
    can connect calls in passthrough mode, as well as record and play back files.
+ * Successful and unsuccessful call pickup can now be alerted through sounds, by
+   using pickupsound and pickupfailsound in features.conf.
 
 Asterisk Manager Interface
 --------------------------
index 361923f..0a621c3 100644 (file)
@@ -39,6 +39,8 @@ context => parkedcalls                ; Which context parked calls are in (default parking lot
 ;xfersound = beep              ; to indicate an attended transfer is complete
 ;xferfailsound = beeperr       ; to indicate a failed transfer
 ;pickupexten = *8              ; Configure the pickup extension. (default is *8)
+;pickupsound = beep            ; to indicate a successful pickup (default: no sound)
+;pickupfailsound = beeperr     ; to indicate that the pickup failed (default: no sound)
 ;featuredigittimeout = 2000    ; Max time (ms) between digits for 
                                ; feature activation  (default is 2000 ms)
 ;atxfernoanswertimeout = 15 ; Timeout for answer on attended transfer default is 15 seconds.
index e910973..cbb49f1 100644 (file)
@@ -238,6 +238,8 @@ static char courtesytone[256];                             /*!< Courtesy tone */
 static int parkedplay = 0;                                 /*!< Who to play the courtesy tone to */
 static char xfersound[256];                                /*!< Call transfer sound */
 static char xferfailsound[256];                            /*!< Call transfer failure sound */
+static char pickupsound[256];                              /*!< Pickup sound */
+static char pickupfailsound[256];                          /*!< Pickup failure sound */
 
 static int adsipark;
 
@@ -3634,6 +3636,8 @@ static int load_config(void)
        courtesytone[0] = '\0';
        strcpy(xfersound, "beep");
        strcpy(xferfailsound, "pbx-invalid");
+       pickupsound[0] = '\0';
+       pickupfailsound[0] = '\0';
        adsipark = 0;
        comebacktoorigin = 1;
 
@@ -3754,6 +3758,10 @@ static int load_config(void)
                        ast_copy_string(xferfailsound, var->value, sizeof(xferfailsound));
                } else if (!strcasecmp(var->name, "pickupexten")) {
                        ast_copy_string(pickup_ext, var->value, sizeof(pickup_ext));
+               } else if (!strcasecmp(var->name, "pickupsound")) {
+                       ast_copy_string(pickupsound, var->value, sizeof(pickupsound));
+               } else if (!strcasecmp(var->name, "pickupfailsound")) {
+                       ast_copy_string(pickupfailsound, var->value, sizeof(pickupfailsound));
                } else if (!strcasecmp(var->name, "comebacktoorigin")) {
                        comebacktoorigin = ast_true(var->value);
                } else if (!strcasecmp(var->name, "parkedmusicclass")) {
@@ -4395,10 +4403,16 @@ int ast_pickup_call(struct ast_channel *chan)
                res = ast_channel_masquerade(cur, chan);
                if (res)
                        ast_log(LOG_WARNING, "Unable to masquerade '%s' into '%s'\n", chan->name, cur->name);           /* Done */
+               if (!ast_strlen_zero(pickupsound)) {
+                       ast_stream_and_wait(cur, pickupsound, "");
+               }
                ast_channel_unlock(cur);
                return res;
        } else  {
                ast_debug(1, "No call pickup possible...\n");
+               if (!ast_strlen_zero(pickupfailsound)) {
+                       ast_stream_and_wait(chan, pickupfailsound, "");
+               }
        }
        return -1;
 }