mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-29 02:57:23 +00:00
Merged revisions 314017 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.8 ........ r314017 | dvossel | 2011-04-18 08:41:06 -0500 (Mon, 18 Apr 2011) | 17 lines sip codec negotiation of dynamic rtp payloads error fix This patch fixes how chan_sip handles dynamic rtp payload types it does not understand. At the moment if a dynamic payload's mime type does not match one we understand, the payload does not get removed from our payload table. As a result of this, the payload is set to whatever dynamic codec we use internally for that payload number on outgoing INVITES. This is incorrect. This patch fixes this by properly checking the rtpmap set function's return code to make sure it was found. The function can return both -1 and -2 depending on the source of the mismatch. We were just checking -1 explicitly. Review: https://reviewboard.asterisk.org/r/1169/ ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@314018 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -9092,8 +9092,8 @@ static int process_sdp_a_audio(const char *a, struct sip_pvt *p, struct ast_rtp_
|
||||
} else if (sscanf(a, "rtpmap: %30u %127[^/]/%30u", &codec, mimeSubtype, &sample_rate) == 3) {
|
||||
/* We have a rtpmap to handle */
|
||||
if (*last_rtpmap_codec < SDP_MAX_RTPMAP_CODECS) {
|
||||
if (ast_rtp_codecs_payloads_set_rtpmap_type_rate(newaudiortp, NULL, codec, "audio", mimeSubtype,
|
||||
ast_test_flag(&p->flags[0], SIP_G726_NONSTANDARD) ? AST_RTP_OPT_G726_NONSTANDARD : 0, sample_rate) != -1) {
|
||||
if (!(ast_rtp_codecs_payloads_set_rtpmap_type_rate(newaudiortp, NULL, codec, "audio", mimeSubtype,
|
||||
ast_test_flag(&p->flags[0], SIP_G726_NONSTANDARD) ? AST_RTP_OPT_G726_NONSTANDARD : 0, sample_rate))) {
|
||||
if (debug)
|
||||
ast_verbose("Found audio description format %s for ID %d\n", mimeSubtype, codec);
|
||||
//found_rtpmap_codecs[last_rtpmap_codec] = codec;
|
||||
@@ -9179,7 +9179,7 @@ static int process_sdp_a_video(const char *a, struct sip_pvt *p, struct ast_rtp_
|
||||
if (*last_rtpmap_codec < SDP_MAX_RTPMAP_CODECS) {
|
||||
/* Note: should really look at the '#chans' params too */
|
||||
if (!strncasecmp(mimeSubtype, "H26", 3) || !strncasecmp(mimeSubtype, "MP4", 3)) {
|
||||
if (ast_rtp_codecs_payloads_set_rtpmap_type_rate(newvideortp, NULL, codec, "video", mimeSubtype, 0, sample_rate) != -1) {
|
||||
if (!(ast_rtp_codecs_payloads_set_rtpmap_type_rate(newvideortp, NULL, codec, "video", mimeSubtype, 0, sample_rate))) {
|
||||
if (debug)
|
||||
ast_verbose("Found video description format %s for ID %d\n", mimeSubtype, codec);
|
||||
//found_rtpmap_codecs[last_rtpmap_codec] = codec;
|
||||
|
Reference in New Issue
Block a user