[Asterisk-code-review] res pjsip session: Preserve stream name during renegotiation. (asterisk[15])

Joshua Colp asteriskteam at digium.com
Tue Sep 5 08:40:32 CDT 2017


Joshua Colp has uploaded this change for review. ( https://gerrit.asterisk.org/6392


Change subject: res_pjsip_session: Preserve stream name during renegotiation.
......................................................................

res_pjsip_session: Preserve stream name during renegotiation.

Stream names within Asterisk can have meaning so when an externally
initiated renegotiation occurs we need to preserve the name of
the stream if it already exists.

Change-Id: I29f50d0cc7f3238287d6d647777e76e1bdf8c596
---
M res/res_pjsip_session.c
1 file changed, 15 insertions(+), 2 deletions(-)



  git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/92/6392/1

diff --git a/res/res_pjsip_session.c b/res/res_pjsip_session.c
index f6b3b93..7d0724d 100644
--- a/res/res_pjsip_session.c
+++ b/res/res_pjsip_session.c
@@ -588,7 +588,14 @@
 			stream = ast_stream_topology_get_stream(session->pending_media_state->topology, i);
 		}
 		if (!stream) {
-			stream = ast_stream_alloc(ast_codec_media_type2str(type), type);
+			struct ast_stream *existing_stream = NULL;
+
+			if (session->active_media_state->topology &&
+				(i < ast_stream_topology_get_count(session->active_media_state->topology))) {
+				existing_stream = ast_stream_topology_get_stream(session->active_media_state->topology, i);
+			}
+
+			stream = ast_stream_alloc(existing_stream ? ast_stream_get_name(existing_stream) : ast_codec_media_type2str(type), type);
 			if (!stream) {
 				return -1;
 			}
@@ -1626,6 +1633,7 @@
 		char media[20];
 		struct ast_sip_session_sdp_handler *handler;
 		RAII_VAR(struct sdp_handler_list *, handler_list, NULL, ao2_cleanup);
+		struct ast_stream *existing_stream = NULL;
 		struct ast_stream *stream;
 		enum ast_media_type type;
 		struct ast_sip_session_media *session_media = NULL;
@@ -1634,8 +1642,13 @@
 		/* We need a null-terminated version of the media string */
 		ast_copy_pj_str(media, &sdp->media[i]->desc.media, sizeof(media));
 
+		if (session->active_media_state->topology &&
+			(i < ast_stream_topology_get_count(session->active_media_state->topology))) {
+			existing_stream = ast_stream_topology_get_stream(session->active_media_state->topology, i);
+		}
+
 		type = ast_media_type_from_str(media);
-		stream = ast_stream_alloc(ast_codec_media_type2str(type), type);
+		stream = ast_stream_alloc(existing_stream ? ast_stream_get_name(existing_stream) : ast_codec_media_type2str(type), type);
 		if (!stream) {
 			return -1;
 		}

-- 
To view, visit https://gerrit.asterisk.org/6392
To unsubscribe, visit https://gerrit.asterisk.org/settings

Gerrit-Project: asterisk
Gerrit-Branch: 15
Gerrit-MessageType: newchange
Gerrit-Change-Id: I29f50d0cc7f3238287d6d647777e76e1bdf8c596
Gerrit-Change-Number: 6392
Gerrit-PatchSet: 1
Gerrit-Owner: Joshua Colp <jcolp at digium.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-code-review/attachments/20170905/301c733b/attachment-0001.html>


More information about the asterisk-code-review mailing list