]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
res_pjsip_session: Preserve label on incoming re-INVITE.
authorJoshua C. Colp <jcolp@sangoma.com>
Wed, 17 Jun 2020 08:58:44 +0000 (05:58 -0300)
committerJoshua Colp <jcolp@sangoma.com>
Wed, 17 Jun 2020 08:59:53 +0000 (03:59 -0500)
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

res/res_pjsip_session.c

index 1bbc6fa0bc539ec5dd793d05dc0dfb3c1936e3af..d05f2c57f55a5be4c8765deb987d48d57ccc5bee 100644 (file)
@@ -760,6 +760,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)) {
@@ -1964,6 +1972,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;