diff options
author | file <file@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-03-25 15:18:41 +0000 |
---|---|---|
committer | file <file@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-03-25 15:18:41 +0000 |
commit | 663b7622ce7cca5e48eff848c4f3ed9f30adc205 (patch) | |
tree | b4442a43ce0035f8b86c6c864e171fcf650fca3c | |
parent | 3eb4aac76561fe4d339ae3573604258a95ce7b6f (diff) |
Add a special dialplan variable to chan_sip which will cause an audio file to be played upon completion of an attended transfer.
(closes issue #9239)
Reported by: sunder
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@110631 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r-- | CHANGES | 5 | ||||
-rw-r--r-- | channels/chan_sip.c | 11 | ||||
-rw-r--r-- | configs/sip.conf.sample | 2 | ||||
-rw-r--r-- | main/channel.c | 11 |
4 files changed, 29 insertions, 0 deletions
@@ -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 ------------- ------------------------------------------------------------------------------ diff --git a/channels/chan_sip.c b/channels/chan_sip.c index a6e6b4bb5..128175234 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -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, diff --git a/configs/sip.conf.sample b/configs/sip.conf.sample index baabc9b6e..1080777aa 100644 --- a/configs/sip.conf.sample +++ b/configs/sip.conf.sample @@ -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 diff --git a/main/channel.c b/main/channel.c index 920ee37dd..005f76ff1 100644 --- a/main/channel.c +++ b/main/channel.c @@ -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) && |