diff --git a/bridges/bridge_native_rtp.c b/bridges/bridge_native_rtp.c index 122c132..124599e 100644 --- a/bridges/bridge_native_rtp.c +++ b/bridges/bridge_native_rtp.c @@ -542,6 +542,7 @@ static struct ast_frame *native_rtp_framehook(struct ast_channel *chan, struct ast_frame *f, enum ast_framehook_event event, void *data) { struct ast_bridge *bridge; + struct ast_bridge_channel *bc0, *bc1; struct native_rtp_framehook_data *native_data = data; if (!f @@ -567,10 +568,21 @@ static struct ast_frame *native_rtp_framehook(struct ast_channel *chan, if (!native_data->detached) { switch (f->subclass.integer) { case AST_CONTROL_HOLD: - native_rtp_bridge_stop(bridge, chan); + native_rtp_bridge_stop(bridge, NULL); break; case AST_CONTROL_UNHOLD: + native_rtp_bridge_start(bridge, NULL); + break; case AST_CONTROL_UPDATE_RTP_PEER: + bc0 = AST_LIST_FIRST(&bridge->channels); + bc1 = AST_LIST_LAST(&bridge->channels); + + if (bc0 && ast_channel_hold_state(bc0->chan) == AST_CONTROL_HOLD) + break; + + if (bc1 && ast_channel_hold_state(bc1->chan) == AST_CONTROL_HOLD) + break; + native_rtp_bridge_start(bridge, chan); break; default: