[asterisk-commits] mjordan: trunk r349341 - in /trunk: ./ main/rtp_engine.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Thu Dec 29 09:16:51 CST 2011
Author: mjordan
Date: Thu Dec 29 09:16:46 2011
New Revision: 349341
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=349341
Log:
Handle AST_CONTROL_UPDATE_RTP_PEER frames in local bridge loop
Failing to handle AST_CONTROL_UPDATE_RTP_PEER frames in the local bridge loop
causes the loop to exit prematurely. This causes a variety of negative side
effects, depending on when the loop exits. This patch handles the frame by
essentially swallowing the frame in the local loop, as the current channel
drivers expect the RTP bridge to handle the frame, and, in the case of the
local bridge loop, no additional action is necessary.
(issue ASTERISK-19040)
(issue ASTERISK-19128)
(issue ASTERISK-17725)
(issue ASTERISK-18340)
(closes issue ASTERISK-19095)
Reported by: Stefan Schmidt
Tested by: Matt Jordan
Review: https://reviewboard.asterisk.org/r/1640/
........
Merged revisions 349339 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........
Merged revisions 349340 from http://svn.asterisk.org/svn/asterisk/branches/10
Modified:
trunk/ (props changed)
trunk/main/rtp_engine.c
Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-10-merged' - no diff available.
Modified: trunk/main/rtp_engine.c
URL: http://svnview.digium.com/svn/asterisk/trunk/main/rtp_engine.c?view=diff&rev=349341&r1=349340&r2=349341
==============================================================================
--- trunk/main/rtp_engine.c (original)
+++ trunk/main/rtp_engine.c Thu Dec 29 09:16:46 2011
@@ -889,7 +889,8 @@
(fr->subclass.integer == AST_CONTROL_UNHOLD) ||
(fr->subclass.integer == AST_CONTROL_VIDUPDATE) ||
(fr->subclass.integer == AST_CONTROL_SRCUPDATE) ||
- (fr->subclass.integer == AST_CONTROL_T38_PARAMETERS)) {
+ (fr->subclass.integer == AST_CONTROL_T38_PARAMETERS) ||
+ (fr->subclass.integer == AST_CONTROL_UPDATE_RTP_PEER)) {
/* If we are going on hold, then break callback mode and P2P bridging */
if (fr->subclass.integer == AST_CONTROL_HOLD) {
if (instance0->engine->local_bridge) {
@@ -910,7 +911,10 @@
instance0->bridged = instance1;
instance1->bridged = instance0;
}
- ast_indicate_data(other, fr->subclass.integer, fr->data.ptr, fr->datalen);
+ /* Since UPDATE_BRIDGE_PEER is only used by the bridging code, don't forward it */
+ if (fr->subclass.integer != AST_CONTROL_UPDATE_RTP_PEER) {
+ ast_indicate_data(other, fr->subclass.integer, fr->data.ptr, fr->datalen);
+ }
ast_frfree(fr);
} else if (fr->subclass.integer == AST_CONTROL_CONNECTED_LINE) {
if (ast_channel_connected_line_macro(who, other, fr, other == c0, 1)) {
More information about the asterisk-commits
mailing list