[asterisk-commits] file: branch 1.4 r58436 -
/branches/1.4/main/rtp.c
asterisk-commits at lists.digium.com
asterisk-commits at lists.digium.com
Thu Mar 8 11:01:01 MST 2007
Author: file
Date: Thu Mar 8 12:01:00 2007
New Revision: 58436
URL: http://svn.digium.com/view/asterisk?view=rev&rev=58436
Log:
Make early SDP seeding even smarter! We have to check codecs in the make_compatible function too. (issue #9221 reported by marcelbarbulescu)
Modified:
branches/1.4/main/rtp.c
Modified: branches/1.4/main/rtp.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/main/rtp.c?view=diff&rev=58436&r1=58435&r2=58436
==============================================================================
--- branches/1.4/main/rtp.c (original)
+++ branches/1.4/main/rtp.c Thu Mar 8 12:01:00 2007
@@ -1533,7 +1533,7 @@
struct ast_rtp_protocol *destpr = NULL, *srcpr = NULL;
enum ast_rtp_get_result audio_dest_res = AST_RTP_GET_FAILED, video_dest_res = AST_RTP_GET_FAILED;
enum ast_rtp_get_result audio_src_res = AST_RTP_GET_FAILED, video_src_res = AST_RTP_GET_FAILED;
- int srccodec;
+ int srccodec, destcodec;
/* Lock channels */
ast_channel_lock(dest);
@@ -1565,8 +1565,18 @@
audio_src_res = srcpr->get_rtp_info(src, &srcp);
video_src_res = srcpr->get_vrtp_info ? srcpr->get_vrtp_info(src, &vsrcp) : AST_RTP_GET_FAILED;
+ /* Ensure we have at least one matching codec */
+ if (srcpr->get_codec)
+ srccodec = srcpr->get_codec(src);
+ else
+ srccodec = 0;
+ if (destpr->get_codec)
+ destcodec = destpr->get_codec(dest);
+ else
+ destcodec = 0;
+
/* Check if bridge is still possible (In SIP canreinvite=no stops this, like NAT) */
- if (audio_dest_res != AST_RTP_TRY_NATIVE || audio_src_res != AST_RTP_TRY_NATIVE) {
+ if (audio_dest_res != AST_RTP_TRY_NATIVE || audio_src_res != AST_RTP_TRY_NATIVE || !(srccodec & destcodec)) {
/* Somebody doesn't want to play... */
ast_channel_unlock(dest);
ast_channel_unlock(src);
@@ -1575,10 +1585,6 @@
ast_rtp_pt_copy(destp, srcp);
if (vdestp && vsrcp)
ast_rtp_pt_copy(vdestp, vsrcp);
- if (srcpr->get_codec)
- srccodec = srcpr->get_codec(src);
- else
- srccodec = 0;
if (media) {
/* Bridge early */
if (destpr->set_rtp_peer(dest, srcp, vsrcp, srccodec, ast_test_flag(srcp, FLAG_NAT_ACTIVE)))
More information about the asterisk-commits
mailing list