diff options
author | file <file@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-05-27 19:34:14 +0000 |
---|---|---|
committer | file <file@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-05-27 19:34:14 +0000 |
commit | ddb2d20802fce11364f12b11e42341e367f4972a (patch) | |
tree | 25588f93067d1196c3456ee7d082d20a36e8cb16 /channels | |
parent | 61d09097ddf70f3bc9a5ef96f1df1f0a45f4496d (diff) |
Merged revisions 118558 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r118558 | file | 2008-05-27 16:32:38 -0300 (Tue, 27 May 2008) | 4 lines
Fix an issue where codec preferences were not set on dialogs that were not authenticated via a user or peer and allow framing to work without rtpmap in the SDP.
(closes issue #12501)
Reported by: slimey
........
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@118560 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels')
-rw-r--r-- | channels/chan_sip.c | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c index c7a092eeb..9dbbcfe7b 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -6078,6 +6078,7 @@ static struct sip_pvt *sip_alloc(ast_string_field callid, struct sockaddr_in *si ast_udptl_setqos(p->udptl, global_tos_audio, global_cos_audio); p->maxcallbitrate = default_maxcallbitrate; p->autoframing = global_autoframing; + ast_rtp_codec_setpref(p->rtp, &p->prefs); } if (useglobal_nat && sin) { @@ -6989,23 +6990,20 @@ static int process_sdp(struct sip_pvt *p, struct sip_request *req, int t38action ast_debug(1, "Can't read framing from SDP: %s\n", a); } } - if (framing && last_rtpmap_codec) { - if (p->autoframing) { - struct ast_codec_pref *pref = ast_rtp_codec_getpref(p->rtp); - int codec_n; - int format = 0; - for (codec_n = 0; codec_n < last_rtpmap_codec; codec_n++) { - format = ast_rtp_codec_getformat(found_rtpmap_codecs[codec_n]); - if (!format) /* non-codec or not found */ - continue; - ast_debug(1, "Setting framing for %d to %ld\n", format, framing); - ast_codec_pref_setsize(pref, format, framing); - } - ast_rtp_codec_setpref(p->rtp, pref); + if (framing && p->autoframing) { + struct ast_codec_pref *pref = ast_rtp_codec_getpref(p->rtp); + int codec_n; + int format = 0; + for (codec_n = 0; codec_n < MAX_RTP_PT; codec_n++) { + format = ast_rtp_codec_getformat(codec_n); + if (!format) /* non-codec or not found */ + continue; + if (option_debug) + ast_log(LOG_DEBUG, "Setting framing for %d to %ld\n", format, framing); + ast_codec_pref_setsize(pref, format, framing); } + ast_rtp_codec_setpref(p->rtp, pref); } - memset(&found_rtpmap_codecs, 0, sizeof(found_rtpmap_codecs)); - last_rtpmap_codec = 0; continue; } else if (!strncmp(a, red_fmtp, strlen(red_fmtp))) { |