Author: file
Date: Tue Dec  2 06:20:08 2014
New Revision: 428760

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=428760
Log:
res_pjsip_refer: Fix issue where native bridge may not occur upon completion of 
a transfer.

There are two methods within res_pjsip_refer for keeping track of the state of 
a transfer.
The first is a framehook which looks at frames passing by to determine the 
state. The second
subscribes to know when the channel joins a bridge. In the case when the 
channel joins the
bridge the framehook is *NOT* removed and this prevents the native RTP bridging 
technology
from getting used.

This change gets the channel and if it still exists remove the framehook.

Review: https://reviewboard.asterisk.org/r/4218/

Modified:
    branches/12/res/res_pjsip_refer.c

Modified: branches/12/res/res_pjsip_refer.c
URL: 
http://svnview.digium.com/svn/asterisk/branches/12/res/res_pjsip_refer.c?view=diff&rev=428760&r1=428759&r2=428760
==============================================================================
--- branches/12/res/res_pjsip_refer.c (original)
+++ branches/12/res/res_pjsip_refer.c Tue Dec  2 06:20:08 2014
@@ -149,6 +149,7 @@
        struct refer_progress *progress = data;
        struct ast_bridge_blob *enter_blob;
        struct refer_progress_notification *notification;
+       struct ast_channel *chan;
 
        if (stasis_subscription_final_message(sub, message)) {
                ao2_ref(progress, -1);
@@ -180,6 +181,20 @@
                }
                progress->bridge_sub = stasis_unsubscribe(progress->bridge_sub);
        }
+
+       chan = ast_channel_get_by_name(progress->transferee);
+       if (!chan) {
+               /* The channel is already gone */
+               return;
+       }
+
+       ast_channel_lock(chan);
+       ast_debug(3, "Detaching REFER progress monitoring hook from '%s' as it 
has joined a bridge\n",
+               ast_channel_name(chan));
+       ast_framehook_detach(chan, progress->framehook);
+       ast_channel_unlock(chan);
+
+       ast_channel_unref(chan);
 }
 
 /*! \brief Progress monitoring frame hook - examines frames to determine state 
of transfer */


-- 
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

svn-commits mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/svn-commits

Reply via email to