diff options
author | Jenkins2 <jenkins2@gerrit.asterisk.org> | 2017-09-21 10:42:11 -0500 |
---|---|---|
committer | Gerrit Code Review <gerrit2@gerrit.digium.api> | 2017-09-21 10:42:11 -0500 |
commit | e5f911519d544d9822da1017c882402fa1c759e0 (patch) | |
tree | fc605e9c3e97ae8d3cadf0d5731c9531f482d78d | |
parent | c97eb951934bfb06f1625afe69185ddc8bf8ff1e (diff) | |
parent | d884871ca7fbd50e67531ea279ff243ed104c403 (diff) |
Merge "bridge : Fix one-way direct-media when early bridging with native_rtp" into 14
-rw-r--r-- | bridges/bridge_native_rtp.c | 3 | ||||
-rw-r--r-- | include/asterisk/bridge_technology.h | 4 | ||||
-rw-r--r-- | main/bridge_channel.c | 4 |
3 files changed, 9 insertions, 2 deletions
diff --git a/bridges/bridge_native_rtp.c b/bridges/bridge_native_rtp.c index a16625892..fc9d70105 100644 --- a/bridges/bridge_native_rtp.c +++ b/bridges/bridge_native_rtp.c @@ -600,7 +600,8 @@ static int native_rtp_framehook_consume(void *data, enum ast_frame_type type) */ static int native_rtp_bridge_capable(struct ast_channel *chan) { - return !ast_channel_has_hook_requiring_audio(chan); + return !ast_channel_has_hook_requiring_audio(chan) + && ast_channel_state(chan) == AST_STATE_UP; } /*! diff --git a/include/asterisk/bridge_technology.h b/include/asterisk/bridge_technology.h index fb275c149..8bac1e3ac 100644 --- a/include/asterisk/bridge_technology.h +++ b/include/asterisk/bridge_technology.h @@ -108,11 +108,13 @@ struct ast_bridge_technology { * * \note On entry, bridge is already locked. * - * \note The bridge technology must tollerate a failed to join channel + * \note The bridge technology must tolerate a failed to join channel * until it can be kicked from the bridge. * * \note A channel may be in a suspended state already when joining a bridge * technology. The technology must handle this case. + * + * \note A channel may not be answered when joining a bridge technology. */ int (*join)(struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel); /*! diff --git a/main/bridge_channel.c b/main/bridge_channel.c index 875d37da7..7ef418ad5 100644 --- a/main/bridge_channel.c +++ b/main/bridge_channel.c @@ -2258,6 +2258,10 @@ static void bridge_channel_handle_control(struct ast_bridge_channel *bridge_chan case AST_CONTROL_ANSWER: if (ast_channel_state(chan) != AST_STATE_UP) { ast_answer(chan); + ast_bridge_channel_lock_bridge(bridge_channel); + bridge_channel->bridge->reconfigured = 1; + bridge_reconfigured(bridge_channel->bridge, 0); + ast_bridge_unlock(bridge_channel->bridge); } else { ast_indicate(chan, -1); } |