Merged 349339; updated .version and ChangeLog

git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/1.8.8.1@349390 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Matthew Jordan
2011-12-29 16:31:00 +00:00
parent 5096deb5ba
commit 6ee2daa7e1
3 changed files with 26 additions and 3 deletions

View File

@@ -1 +1 @@
1.8.8.0 1.8.8.1

View File

@@ -1,3 +1,22 @@
2011-12-29 Asterisk Development Team <asteriskteam@digium.com>
* Asterisk 1.8.8.1 Released.
* 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.
(closes issue ASTERISK-19095)
Reported by: Stefan Schmidt
Tested by: Matt Jordan
Review: https://reviewboard.asterisk.org/r/1640/
2011-12-15 Asterisk Development Team <asteriskteam@digium.com> 2011-12-15 Asterisk Development Team <asteriskteam@digium.com>
* Asterisk 1.8.8.0 Released. * Asterisk 1.8.8.0 Released.

View File

@@ -889,7 +889,8 @@ static enum ast_bridge_result local_bridge_loop(struct ast_channel *c0, struct a
(fr->subclass.integer == AST_CONTROL_UNHOLD) || (fr->subclass.integer == AST_CONTROL_UNHOLD) ||
(fr->subclass.integer == AST_CONTROL_VIDUPDATE) || (fr->subclass.integer == AST_CONTROL_VIDUPDATE) ||
(fr->subclass.integer == AST_CONTROL_SRCUPDATE) || (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 we are going on hold, then break callback mode and P2P bridging */
if (fr->subclass.integer == AST_CONTROL_HOLD) { if (fr->subclass.integer == AST_CONTROL_HOLD) {
if (instance0->engine->local_bridge) { if (instance0->engine->local_bridge) {
@@ -910,7 +911,10 @@ static enum ast_bridge_result local_bridge_loop(struct ast_channel *c0, struct a
instance0->bridged = instance1; instance0->bridged = instance1;
instance1->bridged = instance0; 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); ast_frfree(fr);
} else if (fr->subclass.integer == AST_CONTROL_CONNECTED_LINE) { } else if (fr->subclass.integer == AST_CONTROL_CONNECTED_LINE) {
if (ast_channel_connected_line_macro(who, other, fr, other == c0, 1)) { if (ast_channel_connected_line_macro(who, other, fr, other == c0, 1)) {