[asterisk-commits] file: branch 1.6.2 r193503 - in /branches/1.6.2: ./ main/bridging.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Sun May 10 12:08:56 CDT 2009
Author: file
Date: Sun May 10 12:08:53 2009
New Revision: 193503
URL: http://svn.asterisk.org/svn-view/asterisk?view=rev&rev=193503
Log:
Merged revisions 193502 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk
........
r193502 | file | 2009-05-10 14:07:46 -0300 (Sun, 10 May 2009) | 2 lines
Fix a bug where receiving a control frame of subclass -1 would cause certain channels to get hung up.
........
Modified:
branches/1.6.2/ (props changed)
branches/1.6.2/main/bridging.c
Propchange: branches/1.6.2/
------------------------------------------------------------------------------
Binary property 'trunk-merged' - no diff available.
Modified: branches/1.6.2/main/bridging.c
URL: http://svn.asterisk.org/svn-view/asterisk/branches/1.6.2/main/bridging.c?view=diff&rev=193503&r1=193502&r2=193503
==============================================================================
--- branches/1.6.2/main/bridging.c (original)
+++ branches/1.6.2/main/bridging.c Sun May 10 12:08:53 2009
@@ -261,6 +261,18 @@
return frame;
}
+/*! \brief Internal function used to determine whether a control frame should be dropped or not */
+static int bridge_drop_control_frame(int subclass)
+{
+ switch (subclass) {
+ case AST_CONTROL_ANSWER:
+ case -1:
+ return 1;
+ default:
+ return 0;
+ }
+}
+
void ast_bridge_handle_trip(struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel, struct ast_channel *chan, int outfd)
{
/* If no bridge channel has been provided and the actual channel has been provided find it */
@@ -276,8 +288,8 @@
if (!frame || (frame->frametype == AST_FRAME_CONTROL && frame->subclass == AST_CONTROL_HANGUP)) {
/* Signal the thread that is handling the bridged channel that it should be ended */
ast_bridge_change_state(bridge_channel, AST_BRIDGE_CHANNEL_STATE_END);
- } else if (frame->frametype == AST_FRAME_CONTROL && frame->subclass == AST_CONTROL_ANSWER) {
- ast_debug(1, "Dropping answer frame from bridge channel %p\n", bridge_channel);
+ } else if (frame->frametype == AST_FRAME_CONTROL && bridge_drop_control_frame(frame->subclass)) {
+ ast_debug(1, "Dropping control frame from bridge channel %p\n", bridge_channel);
} else {
if (frame->frametype == AST_FRAME_DTMF_BEGIN) {
frame = bridge_handle_dtmf(bridge, bridge_channel, frame);
More information about the asterisk-commits
mailing list