From: Joshua Colp Date: Sun, 1 Jun 2014 15:31:22 +0000 (+0000) Subject: bridge_native_rtp: Take the bridge type choice of both channels into account. X-Git-Tag: 12.4.0-rc1~86 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=13d26b19a68a43d3e2bf48353dbf1122de199e6b;p=thirdparty%2Fasterisk.git bridge_native_rtp: Take the bridge type choice of both channels into account. The bridge_native_rtp module currently uses the bridge result of the first channel that joins a bridge as the ultimate result. This means that if the first channel has direct media enabled but the second does not a direct media bridge will still occur. This change makes it so that both sides are taken into account. If either side forbids the bridge or responds with a local bridge result then either a generic or local bridge occurs. ASTERISK-23541 #close Reported by: Justin E Review: https://reviewboard.asterisk.org/r/3577/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/12@414975 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/bridges/bridge_native_rtp.c b/bridges/bridge_native_rtp.c index 7e48ab92f2..2be2dbf421 100644 --- a/bridges/bridge_native_rtp.c +++ b/bridges/bridge_native_rtp.c @@ -103,13 +103,17 @@ static enum ast_rtp_glue_result native_rtp_bridge_get(struct ast_channel *c0, st audio_glue1_res = AST_RTP_GLUE_RESULT_FORBID; } - /* If any sort of bridge is forbidden just completely bail out and go back to generic bridging */ - if (audio_glue0_res == AST_RTP_GLUE_RESULT_FORBID - || audio_glue1_res == AST_RTP_GLUE_RESULT_FORBID) { + /* The order of preference is: forbid, local, and remote. */ + if (audio_glue0_res == AST_RTP_GLUE_RESULT_FORBID || + audio_glue1_res == AST_RTP_GLUE_RESULT_FORBID) { + /* If any sort of bridge is forbidden just completely bail out and go back to generic bridging */ return AST_RTP_GLUE_RESULT_FORBID; + } else if (audio_glue0_res == AST_RTP_GLUE_RESULT_LOCAL || + audio_glue1_res == AST_RTP_GLUE_RESULT_LOCAL) { + return AST_RTP_GLUE_RESULT_LOCAL; + } else { + return AST_RTP_GLUE_RESULT_REMOTE; } - - return audio_glue0_res; } /*!