diff options
author | Jonathan Rose <jrose@digium.com> | 2014-05-22 15:52:30 +0000 |
---|---|---|
committer | Jonathan Rose <jrose@digium.com> | 2014-05-22 15:52:30 +0000 |
commit | d00882108fabd3798aa6566aa5697d82459e753e (patch) | |
tree | 0cb38a4b41e85b73f89486b8492a0fc3078e3ba9 /channels | |
parent | 912bbdd1ddf98b4e6d99b3cb258f103c09ee132f (diff) |
res_pjsip_refer: Fix bugs involving Parking/PJSIP/transfers
PJSIP would never send the final 200 Notify for a blind transfer
when transferring to parking. This patch fixes that. In addition,
it fixes a reference leak when performing blind transfers to
non-bridging extensions.
Review: https://reviewboard.asterisk.org/r/3485/
........
Merged revisions 414400 from http://svn.asterisk.org/svn/asterisk/branches/12
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@414403 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels')
-rw-r--r-- | channels/chan_dahdi.c | 2 | ||||
-rw-r--r-- | channels/chan_mgcp.c | 2 | ||||
-rw-r--r-- | channels/chan_sip.c | 4 | ||||
-rw-r--r-- | channels/sig_analog.c | 2 |
4 files changed, 5 insertions, 5 deletions
diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c index b4c8ec366..71e5831e0 100644 --- a/channels/chan_dahdi.c +++ b/channels/chan_dahdi.c @@ -9741,7 +9741,7 @@ static void *analog_ss_thread(void *data) bridge_channel = ast_channel_get_bridge_channel(p->subs[SUB_THREEWAY].owner); ast_channel_unlock(p->subs[SUB_THREEWAY].owner); if (bridge_channel) { - if (!ast_parking_blind_transfer_park(bridge_channel, ast_channel_context(chan), exten)) { + if (!ast_parking_blind_transfer_park(bridge_channel, ast_channel_context(chan), exten, NULL, NULL)) { /* * Swap things around between the three-way and real call so we * can hear where the channel got parked. diff --git a/channels/chan_mgcp.c b/channels/chan_mgcp.c index 1955edaea..2d0afe29d 100644 --- a/channels/chan_mgcp.c +++ b/channels/chan_mgcp.c @@ -3167,7 +3167,7 @@ static void *mgcp_ss(void *data) ast_channel_lock(chan); bridge_channel = ast_channel_get_bridge_channel(chan); ast_channel_unlock(chan); - if (bridge_channel && !ast_parking_blind_transfer_park(bridge_channel, ast_channel_context(chan), p->dtmf_buf)) { + if (bridge_channel && !ast_parking_blind_transfer_park(bridge_channel, ast_channel_context(chan), p->dtmf_buf, NULL, NULL)) { ast_verb(3, "Parking call to '%s'\n", ast_channel_name(chan)); } break; diff --git a/channels/chan_sip.c b/channels/chan_sip.c index a9a13790c..6c49236ce 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -26081,10 +26081,10 @@ struct blind_transfer_cb_data { * \param user_data A blind_transfer_cb_data struct * \param transfer_type Unused */ -static void blind_transfer_cb(struct ast_channel *chan, void *user_data, +static void blind_transfer_cb(struct ast_channel *chan, struct transfer_channel_data *user_data_wrapper, enum ast_transfer_type transfer_type) { - struct blind_transfer_cb_data *cb_data = user_data; + struct blind_transfer_cb_data *cb_data = user_data_wrapper->data; pbx_builtin_setvar_helper(chan, "SIPTRANSFER", "yes"); pbx_builtin_setvar_helper(chan, "SIPTRANSFER_REFERER", cb_data->referred_by); diff --git a/channels/sig_analog.c b/channels/sig_analog.c index 21b832164..9957074d1 100644 --- a/channels/sig_analog.c +++ b/channels/sig_analog.c @@ -2259,7 +2259,7 @@ static void *__analog_ss_thread(void *data) bridge_channel = ast_channel_get_bridge_channel(p->subs[ANALOG_SUB_THREEWAY].owner); ast_channel_unlock(p->subs[ANALOG_SUB_THREEWAY].owner); if (bridge_channel) { - if (!ast_parking_blind_transfer_park(bridge_channel, ast_channel_context(chan), exten)) { + if (!ast_parking_blind_transfer_park(bridge_channel, ast_channel_context(chan), exten, NULL, NULL)) { /* * Swap things around between the three-way and real call so we * can hear where the channel got parked. |