From: Joshua C. Colp Date: Wed, 17 Jun 2020 08:58:44 +0000 (-0300) Subject: res_pjsip_session: Preserve label on incoming re-INVITE. X-Git-Tag: 17.6.0-rc1~17 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9589f97c9e1ceaec5d47e7782c14ba6edb6697ef;p=thirdparty%2Fasterisk.git res_pjsip_session: Preserve label on incoming re-INVITE. When a re-INVITE is received we create a new set of streams that are then swapped in as the active streams. We did not preserve the SDP label from the previous streams, resulting in the label getting lost. This change ensures that if an SDP label is present on the previous stream then it is set on the new stream. ASTERISK-28953 Change-Id: I9dd63b88b562fe96ce5c791a3dae5bcaca258445 --- diff --git a/res/res_pjsip_session.c b/res/res_pjsip_session.c index dbeb004eff..2bf69f17ab 100644 --- a/res/res_pjsip_session.c +++ b/res/res_pjsip_session.c @@ -761,6 +761,14 @@ static int handle_incoming_sdp(struct ast_sip_session *session, const pjmedia_sd ast_stream_free(stream); return -1; } + if (existing_stream) { + const char *stream_label = ast_stream_get_metadata(existing_stream, "SDP:LABEL"); + + if (!ast_strlen_zero(stream_label)) { + ast_stream_set_metadata(stream, "SDP:LABEL", stream_label); + } + } + /* For backwards compatibility with the core the default audio stream is always sendrecv */ if (!ast_sip_session_is_pending_stream_default(session, stream) || strcmp(media, "audio")) { if (pjmedia_sdp_media_find_attr2(remote_stream, "sendonly", NULL)) { @@ -1967,6 +1975,14 @@ static int sdp_requires_deferral(struct ast_sip_session *session, const pjmedia_ return -1; } + if (existing_stream) { + const char *stream_label = ast_stream_get_metadata(existing_stream, "SDP:LABEL"); + + if (!ast_strlen_zero(stream_label)) { + ast_stream_set_metadata(stream, "SDP:LABEL", stream_label); + } + } + session_media = ast_sip_session_media_state_add(session, session->pending_media_state, ast_media_type_from_str(media), i); if (!session_media) { return -1;