Add a special dialplan variable to chan_sip which will cause an audio file to be...
authorJoshua Colp <jcolp@digium.com>
Tue, 25 Mar 2008 15:18:41 +0000 (15:18 +0000)
committerJoshua Colp <jcolp@digium.com>
Tue, 25 Mar 2008 15:18:41 +0000 (15:18 +0000)
(closes issue #9239)
Reported by: sunder

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

CHANGES
channels/chan_sip.c
configs/sip.conf.sample
main/channel.c

diff --git a/CHANGES b/CHANGES
index ba0ede2..bc224b4 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -26,6 +26,11 @@ Application Changes
    of how many names are in your company.  For large companies, this should be
    quite helpful.
 
+SIP Changes
+-----------
+ * The ATTENDED_TRANSFER_COMPLETE_SOUND can now be set using setvar to cause a given
+   audio file to be played upon completion of an attended transfer.
+
 ------------------------------------------------------------------------------
 --- Functionality changes from Asterisk 1.4.X to Asterisk 1.6.0  -------------
 ------------------------------------------------------------------------------
index a6e6b4b..1281752 100644 (file)
@@ -16869,6 +16869,17 @@ static int local_attended_transfer(struct sip_pvt *transferer, struct sip_dual *
 
        ast_set_flag(&transferer->flags[0], SIP_DEFER_BYE_ON_TRANSFER); /* Delay hangup */
 
+       /* If we are performing an attended transfer and we have two channels involved then copy sound file information to play upon attended transfer completion */
+       if (target.chan2) {
+               const char *chan1_attended_sound = pbx_builtin_getvar_helper(target.chan1, "ATTENDED_TRANSFER_COMPLETE_SOUND"), *chan2_attended_sound = pbx_builtin_getvar_helper(target.chan2, "ATTENDED_TRANSFER_COMPLETE_SOUND");
+               if (!ast_strlen_zero(chan1_attended_sound)) {
+                       pbx_builtin_setvar_helper(target.chan1, "BRIDGE_PLAY_SOUND", chan1_attended_sound);
+               }
+               if (!ast_strlen_zero(chan2_attended_sound)) {
+                       pbx_builtin_setvar_helper(target.chan2, "BRIDGE_PLAY_SOUND", chan2_attended_sound);
+               }
+       }
+
        /* Perform the transfer */
        manager_event(EVENT_FLAG_CALL, "Transfer", "TransferMethod: SIP\r\nTransferType: Attended\r\nChannel: %s\r\nUniqueid: %s\r\nSIP-Callid: %s\r\nTargetChannel: %s\r\nTargetUniqueid: %s\r\n",
                transferer->owner->name,
index baabc9b..1080777 100644 (file)
@@ -930,6 +930,8 @@ srvlookup=yes                       ; Enable DNS SRV lookups on outbound calls
 ;defaultuser=goran             ; Username to use when calling this device before registration
                                ; Normally you do NOT need to set this parameter
 ;setvar=CUSTID=5678            ; Channel variable to be set for all calls from this device
+;setvar=ATTENDED_TRANSFER_COMPLETE_SOUND=beep ; This channel variable will cause the given audio file to be played
+                                              ; upon completion of an attended transfer
 
 ;[pre14-asterisk]
 ;type=friend
index 920ee37..005f76f 100644 (file)
@@ -4355,6 +4355,7 @@ enum ast_bridge_result ast_channel_bridge(struct ast_channel *c0, struct ast_cha
        for (/* ever */;;) {
                struct timeval now = { 0, };
                int to;
+               const char *bridge_play_sound = NULL;
 
                to = -1;
 
@@ -4438,6 +4439,16 @@ enum ast_bridge_result ast_channel_bridge(struct ast_channel *c0, struct ast_cha
                        pbx_builtin_setvar_helper(c1, "BRIDGEPVTCALLID", c0->tech->get_pvt_uniqueid(c0));
                if (c1->tech->get_pvt_uniqueid)
                        pbx_builtin_setvar_helper(c0, "BRIDGEPVTCALLID", c1->tech->get_pvt_uniqueid(c1));
+
+               /* See if we need to play an audio file to any side of the bridge */
+               if ((bridge_play_sound = pbx_builtin_getvar_helper(c0, "BRIDGE_PLAY_SOUND"))) {
+                       bridge_playfile(c0, c1, bridge_play_sound, 0);
+                       pbx_builtin_setvar_helper(c0, "BRIDGE_PLAY_SOUND", NULL);
+               }
+               if ((bridge_play_sound = pbx_builtin_getvar_helper(c1, "BRIDGE_PLAY_SOUND"))) {
+                       bridge_playfile(c1, c0, bridge_play_sound, 0);
+                       pbx_builtin_setvar_helper(c1, "BRIDGE_PLAY_SOUND", NULL);
+               }
                
                if (c0->tech->bridge &&
                    (c0->tech->bridge == c1->tech->bridge) &&