aboutsummaryrefslogtreecommitdiffstats
path: root/channel.c
diff options
context:
space:
mode:
authorkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2006-05-11 10:37:39 +0000
committerkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2006-05-11 10:37:39 +0000
commit38a6d041dfcfb1f43125f006bfebe804bf943122 (patch)
treed06f06386948c40ad0a766749f5fa5405bae4f05 /channel.c
parent4f86c0eabf4d45a3295a89711479b5201cdde352 (diff)
use the proper method to get out of the bridge loop
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@26851 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channel.c')
-rw-r--r--channel.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/channel.c b/channel.c
index 750f1ffe9..5a2829654 100644
--- a/channel.c
+++ b/channel.c
@@ -3276,7 +3276,7 @@ static enum ast_bridge_result ast_generic_bridge(struct ast_channel *c0, struct
/* Copy voice back and forth between the two channels. */
struct ast_channel *cs[3];
struct ast_frame *f;
- enum ast_bridge_result res = 0;
+ enum ast_bridge_result res = AST_BRIDGE_COMPLETE;
int o0nativeformats;
int o1nativeformats;
int watch_c0_dtmf;
@@ -3328,7 +3328,6 @@ static enum ast_bridge_result ast_generic_bridge(struct ast_channel *c0, struct
if (!f) {
*fo = NULL;
*rc = who;
- res = AST_BRIDGE_COMPLETE;
ast_log(LOG_DEBUG, "Didn't get a frame from channel: %s\n",who->name);
break;
}
@@ -3336,6 +3335,8 @@ static enum ast_bridge_result ast_generic_bridge(struct ast_channel *c0, struct
other = (who == c0) ? c1 : c0; /* the 'other' channel */
if ((f->frametype == AST_FRAME_CONTROL) && !(config->flags & AST_BRIDGE_IGNORE_SIGS)) {
+ int bridge_exit = 0;
+
switch (f->subclass) {
case AST_CONTROL_HOLD:
case AST_CONTROL_UNHOLD:
@@ -3345,11 +3346,11 @@ static enum ast_bridge_result ast_generic_bridge(struct ast_channel *c0, struct
default:
*fo = f;
*rc = who;
- res = AST_BRIDGE_COMPLETE;
+ bridge_exit = 1;
ast_log(LOG_DEBUG, "Got a FRAME_CONTROL (%d) frame on channel %s\n", f->subclass, who->name);
break;
}
- if (res == AST_BRIDGE_COMPLETE)
+ if (bridge_exit)
break;
}
if ((f->frametype == AST_FRAME_VOICE) ||
@@ -3365,7 +3366,6 @@ static enum ast_bridge_result ast_generic_bridge(struct ast_channel *c0, struct
if (f->frametype == AST_FRAME_DTMF && monitored_source) {
*fo = f;
*rc = who;
- res = AST_BRIDGE_COMPLETE;
ast_log(LOG_DEBUG, "Got DTMF on channel (%s)\n", who->name);
break;
}