Skip to content
Snippets Groups Projects
Commit 6233e146 authored by Joshua Colp's avatar Joshua Colp
Browse files

res_pjsip_sdp_rtp: Limit number of formats to defined maximum.

The res_pjsip_sdp_rtp module did not restrict the number of
formats added to a media stream in the SDP to the defined
limit. If allow=all was used with additional loaded codecs this
could result in the next media stream being overwritten some.

This change restricts the module to limit it to the defined
maximum and also increases the maximum in our bundled pjproject.

ASTERISK-26541 #close

Change-Id: I0dc5f59d3891246cafa2f3df5ec406f088559ee8
parent 1648ca06
No related branches found
No related tags found
No related merge requests found
......@@ -1183,10 +1183,14 @@ static int create_outgoing_sdp_stream(struct ast_sip_session *session, struct as
max_packet_size = ast_format_get_maximum_ms(format);
}
ao2_ref(format, -1);
if (media->desc.fmt_count == PJMEDIA_MAX_SDP_FMT) {
break;
}
}
/* Add non-codec formats */
if (media_type != AST_MEDIA_TYPE_VIDEO) {
if (media_type != AST_MEDIA_TYPE_VIDEO && media->desc.fmt_count < PJMEDIA_MAX_SDP_FMT) {
for (index = 1LL; index <= AST_RTP_MAX; index <<= 1) {
if (!(noncodec & index)) {
continue;
......@@ -1208,6 +1212,10 @@ static int create_outgoing_sdp_stream(struct ast_sip_session *session, struct as
attr = pjmedia_sdp_attr_create(pool, "fmtp", pj_cstr(&stmp, tmp));
media->attr[media->attr_count++] = attr;
}
if (media->desc.fmt_count == PJMEDIA_MAX_SDP_FMT) {
break;
}
}
}
......
......@@ -57,3 +57,9 @@
/* Defaults too low for WebRTC */
#define PJ_ICE_MAX_CAND 32
#define PJ_ICE_MAX_CHECKS (PJ_ICE_MAX_CAND * 2)
/* Increase limits to allow more formats */
#define PJMEDIA_MAX_SDP_FMT 64
#define PJMEDIA_MAX_SDP_BANDW 4
#define PJMEDIA_MAX_SDP_ATTR (PJMEDIA_MAX_SDP_FMT*2 + 4)
#define PJMEDIA_MAX_SDP_MEDIA 16
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment