[asterisk-bugs] [JIRA] (ASTERISK-22043) Handle DTMF wrap up operations and Hold wrap up operations when a channel is pulled from the bridge

Richard Mudgett (JIRA) noreply at issues.asterisk.org
Mon Jul 22 15:27:03 CDT 2013


     [ https://issues.asterisk.org/jira/browse/ASTERISK-22043?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Richard Mudgett reassigned ASTERISK-22043:
------------------------------------------

    Assignee: Richard Mudgett
    
> Handle DTMF wrap up operations and Hold wrap up operations when a channel is pulled from the bridge
> ---------------------------------------------------------------------------------------------------
>
>                 Key: ASTERISK-22043
>                 URL: https://issues.asterisk.org/jira/browse/ASTERISK-22043
>             Project: Asterisk
>          Issue Type: Bug
>      Security Level: None
>          Components: Core/Bridging
>    Affects Versions: 12
>            Reporter: Matt Jordan
>            Assignee: Richard Mudgett
>              Labels: Asterisk12
>      Target Release: 12
>
>
> If a channel is pulled from the bridge and a DTMF digit is currently being played on it, or if it currently in a Hold state, we need to end the DTMF digit and take the channel of hold, respectively.
> This addresses the BUGBUG in bridging.c:
> {noformat}
> static void bridge_channel_pull(struct ast_bridge_channel *bridge_channel)
> {
> 	struct ast_bridge *bridge = bridge_channel->bridge;
> 	if (!bridge_channel->in_bridge) {
> 		return;
> 	}
> 	bridge_channel->in_bridge = 0;
> 	ast_debug(1, "Bridge %s: pulling %p(%s)\n",
> 		bridge->uniqueid, bridge_channel, ast_channel_name(bridge_channel->chan));
> /* BUGBUG This is where incoming HOLD/UNHOLD memory should write UNHOLD into bridge. (if not local optimizing) */
> /* BUGBUG This is where incoming DTMF begin/end memory should write DTMF end into bridge. (if not local optimizing) */
> 	if (!bridge_channel->just_joined) {
> 		/* Tell the bridge technology we are leaving so they tear us down */
> 		ast_debug(1, "Bridge %s: %p(%s) is leaving %s technology\n",
> 			bridge->uniqueid, bridge_channel, ast_channel_name(bridge_channel->chan),
> 			bridge->technology->name);
> 		if (bridge->technology->leave) {
> 			bridge->technology->leave(bridge, bridge_channel);
> 		}
> 	}
> {noformat}
> And here:
> {noformat}
> 	case AST_FRAME_CONTROL:
> 		switch (frame->subclass.integer) {
> 		case AST_CONTROL_HANGUP:
> 			bridge_handle_hangup(bridge_channel);
> 			ast_frfree(frame);
> 			return;
> /* BUGBUG This is where incoming HOLD/UNHOLD memory should register.  Write UNHOLD into bridge when this channel is pulled. */
> 		default:
> 			break;
> 		}
> 		break;
> 	case AST_FRAME_DTMF_BEGIN:
> 		frame = bridge_handle_dtmf(bridge_channel, frame);
> 		if (!frame) {
> 			return;
> 		}
> 		/* Fall through */
> 	case AST_FRAME_DTMF_END:
> 		if (!bridge_channel->features->dtmf_passthrough) {
> 			ast_frfree(frame);
> 			return;
> 		}
> /* BUGBUG This is where incoming DTMF begin/end memory should register.  Write DTMF end into bridge when this channel is pulled. */
> {noformat}
> And lastly here:
> {noformat}
> /* BUGBUG This is where outgoing HOLD/UNHOLD memory should write UNHOLD to channel. */
> 	/* Complete any partial DTMF digit before exiting the bridge. */
> 	if (ast_channel_sending_dtmf_digit(bridge_channel->chan)) {
> 		ast_bridge_end_dtmf(bridge_channel->chan,
> 			ast_channel_sending_dtmf_digit(bridge_channel->chan),
> 			ast_channel_sending_dtmf_tv(bridge_channel->chan), "bridge end");
> 	}
> {noformat}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.asterisk.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira



More information about the asterisk-bugs mailing list