diff options
author | rmudgett <rmudgett@f38db490-d61c-443f-a65b-d21fe96a405b> | 2010-11-03 18:31:57 +0000 |
---|---|---|
committer | rmudgett <rmudgett@f38db490-d61c-443f-a65b-d21fe96a405b> | 2010-11-03 18:31:57 +0000 |
commit | 339c64a39419583d721a761782f72fc06a9b5fe1 (patch) | |
tree | b762487ec704cb7ab0ccd247ee579be2d024625d | |
parent | b51a2b459706e6d3498107d4caa5f88aa1039836 (diff) |
Merged revisions 293805 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r293805 | rmudgett | 2010-11-03 13:23:04 -0500 (Wed, 03 Nov 2010) | 20 lines
Party A in an analog 3-way call would continue to hear ringback after party C answers.
All parties are analog FXS ports.
1) A calls B.
2) A flash hooks to call C.
3) A flash hooks to bring C into 3-way call before C answers. (A and B hear ringback)
4) C answers
5) A continues to hear ringback during the 3-way call. (All parties can hear each other.)
* Fixed use of wrong variable in dahdi_bridge() that stopped ringback on
the wrong subchannel.
* Made several debug messages have more information.
A similar issue happens if B and C are SIP channels. B continues to hear
ringback. For some reason this only affects v1.8 and trunk.
* Don't start ringback on the real and 3-way subchannels when creating the
3-way conference. Removing this code is benign on v1.6.2 and earlier.
........
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.2@293806 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r-- | channels/chan_dahdi.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c index e200ee17c..c01ddc765 100644 --- a/channels/chan_dahdi.c +++ b/channels/chan_dahdi.c @@ -5426,11 +5426,14 @@ static enum ast_bridge_result dahdi_bridge(struct ast_channel *c0, struct ast_ch p1->subs[SUB_REAL].owner && p1->subs[SUB_REAL].inthreeway && (p1->subs[SUB_REAL].owner->_state == AST_STATE_RINGING)) { - ast_debug(1, "Playing ringback on %s since %s is in a ringing three-way\n", c0->name, c1->name); + ast_debug(1, + "Playing ringback on %d/%d(%s) since %d/%d(%s) is in a ringing three-way\n", + p0->channel, oi0, c0->name, p1->channel, oi1, c1->name); tone_zone_play_tone(p0->subs[oi0].dfd, DAHDI_TONE_RINGTONE); os1 = p1->subs[SUB_REAL].owner->_state; } else { - ast_debug(1, "Stopping tones on %d/%d talking to %d/%d\n", p0->channel, oi0, p1->channel, oi1); + ast_debug(1, "Stopping tones on %d/%d(%s) talking to %d/%d(%s)\n", + p0->channel, oi0, c0->name, p1->channel, oi1, c1->name); tone_zone_play_tone(p0->subs[oi0].dfd, -1); } if ((oi0 == SUB_THREEWAY) && @@ -5438,12 +5441,15 @@ static enum ast_bridge_result dahdi_bridge(struct ast_channel *c0, struct ast_ch p0->subs[SUB_REAL].owner && p0->subs[SUB_REAL].inthreeway && (p0->subs[SUB_REAL].owner->_state == AST_STATE_RINGING)) { - ast_debug(1, "Playing ringback on %s since %s is in a ringing three-way\n", c1->name, c0->name); + ast_debug(1, + "Playing ringback on %d/%d(%s) since %d/%d(%s) is in a ringing three-way\n", + p1->channel, oi1, c1->name, p0->channel, oi0, c0->name); tone_zone_play_tone(p1->subs[oi1].dfd, DAHDI_TONE_RINGTONE); os0 = p0->subs[SUB_REAL].owner->_state; } else { - ast_debug(1, "Stopping tones on %d/%d talking to %d/%d\n", p1->channel, oi1, p0->channel, oi0); - tone_zone_play_tone(p1->subs[oi0].dfd, -1); + ast_debug(1, "Stopping tones on %d/%d(%s) talking to %d/%d(%s)\n", + p1->channel, oi1, c1->name, p0->channel, oi0, c0->name); + tone_zone_play_tone(p1->subs[oi1].dfd, -1); } if ((oi0 == SUB_REAL) && (oi1 == SUB_REAL)) { if (!p0->echocanbridged || !p1->echocanbridged) { @@ -6582,7 +6588,9 @@ static struct ast_frame *dahdi_handle_event(struct ast_channel *ast) /* Lets see what we're up to */ if (((ast->pbx) || (ast->_state == AST_STATE_UP)) && (p->transfertobusy || (ast->_state != AST_STATE_BUSY))) { - ast_verb(3, "Building conference on call on %s and %s\n", p->subs[SUB_THREEWAY].owner->name, p->subs[SUB_REAL].owner->name); + ast_verb(3, "Building conference call with %s and %s\n", + p->subs[SUB_THREEWAY].owner->name, + p->subs[SUB_REAL].owner->name); /* Put them in the threeway, and flip */ p->subs[SUB_THREEWAY].inthreeway = 1; p->subs[SUB_REAL].inthreeway = 1; @@ -6595,11 +6603,6 @@ static struct ast_frame *dahdi_handle_event(struct ast_channel *ast) } p->subs[orig_3way_sub].needunhold = 1; p->owner = p->subs[SUB_REAL].owner; - if (ast->_state == AST_STATE_RINGING) { - ast_debug(1, "Enabling ringtone on real and threeway\n"); - res = tone_zone_play_tone(p->subs[SUB_REAL].dfd, DAHDI_TONE_RINGTONE); - res = tone_zone_play_tone(p->subs[SUB_THREEWAY].dfd, DAHDI_TONE_RINGTONE); - } } else { ast_verb(3, "Dumping incomplete call on %s\n", p->subs[SUB_THREEWAY].owner->name); swap_subs(p, SUB_THREEWAY, SUB_REAL); |