<p>Jenkins2 <strong>merged</strong> this change.</p><p><a href="https://gerrit.asterisk.org/8305">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Richard Mudgett: Looks good to me, but someone else must approve
  Joshua Colp: Looks good to me, approved
  Jenkins2: Approved for Submit

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">res_pjsip_session: properly handle SDP from a forked call with early media<br><br>In handle_negotiated_sdp(), use session->active_media_state when<br>session->pending_media_state is empty.  The 200's SDP should be fed into<br>handle_negotiated_sdp_session_media() together with the already negotiated<br>state, which is now in session->active_media_state instead.  Only if both<br>the session's pending and active media are empty should<br>handle_negotiated_sdp() abort.<br><br>ASTERISK-27441<br><br>Change-Id: If0d5150ffe6f38d8a854831fef37942258d4629c<br>---<br>M res/res_pjsip_session.c<br>1 file changed, 23 insertions(+), 8 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">diff --git a/res/res_pjsip_session.c b/res/res_pjsip_session.c<br>index 1842d41..aed1592 100644<br>--- a/res/res_pjsip_session.c<br>+++ b/res/res_pjsip_session.c<br>@@ -877,15 +877,30 @@<br>       struct ast_stream_topology *topology;<br>         unsigned int changed = 0;<br> <br>- /* This situation can legitimately happen when an SDP is received in a<br>-        * 183 Session Progress message.  In that case, everything's been done<br>-    * by the time this function is called and there are no more pending<br>-  * streams.<br>-   */<br>   if (!session->pending_media_state->topology) {<br>-         ast_debug(1, "Pending topology was NULL for channel '%s'\n",<br>-                       session->channel ? ast_channel_name(session->channel) : "unknown");<br>-          return 0;<br>+            if (session->active_media_state->topology) {<br>+                   /*<br>+                    * This happens when we have negotiated media after receiving a 183,<br>+                  * and we're now receiving a 200 with a new SDP.  In this case, there<br>+                     * is active_media_state, but the pending_media_state has been reset.<br>+                         */<br>+                  struct ast_sip_session_media_state *active_media_state_clone;<br>+<br>+                     active_media_state_clone =<br>+                           ast_sip_session_media_state_clone(session->active_media_state);<br>+                   if (!active_media_state_clone) {<br>+                             ast_log(LOG_WARNING, "Unable to clone active media state for channel '%s'\n",<br>+                                      session->channel ? ast_channel_name(session->channel) : "unknown");<br>+                          return -1;<br>+                   }<br>+<br>+                 ast_sip_session_media_state_free(session->pending_media_state);<br>+                   session->pending_media_state = active_media_state_clone;<br>+          } else {<br>+                     ast_log(LOG_WARNING, "No pending or active media state for channel '%s'\n",<br>+                                session->channel ? ast_channel_name(session->channel) : "unknown");<br>+                  return -1;<br>+           }<br>     }<br> <br>  /* If we're handling negotiated streams, then we should already have set<br></pre><p>To view, visit <a href="https://gerrit.asterisk.org/8305">change 8305</a>. To unsubscribe, visit <a href="https://gerrit.asterisk.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.asterisk.org/8305"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: asterisk </div>
<div style="display:none"> Gerrit-Branch: 15 </div>
<div style="display:none"> Gerrit-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: If0d5150ffe6f38d8a854831fef37942258d4629c </div>
<div style="display:none"> Gerrit-Change-Number: 8305 </div>
<div style="display:none"> Gerrit-PatchSet: 5 </div>
<div style="display:none"> Gerrit-Owner: Joshua Colp <jcolp@digium.com> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins2 </div>
<div style="display:none"> Gerrit-Reviewer: Joshua Colp <jcolp@digium.com> </div>
<div style="display:none"> Gerrit-Reviewer: Richard Mudgett <rmudgett@digium.com> </div>
<div style="display:none"> Gerrit-Reviewer: lvl <digium@lvlconsultancy.nl> </div>