<p>George Joseph has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.asterisk.org/6557">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">res_pjsip_session/BUNDLE:  Handle no audio codecs on endpoint<br><br>When an INVITE came in with both audio and video streams but there<br>were no audio codecs defined for the endpoint, we weren't declining<br>the audio stream.  Since it's usually the first/transport stream,<br>when the video stream was processed and tried to use the transport,<br>it was empty and caused a crash.  We now decline the the stream if<br>there are no matching codecs so when the video stream is processed,<br>it's now the first/transport stream and processes normally.<br><br>Change-Id: Ic854eda54c95031e66b076ecfae3041d34daa692<br>---<br>M res/res_pjsip_session.c<br>1 file changed, 26 insertions(+), 8 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/57/6557/1</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 77ddfbc..de812da 100644<br>--- a/res/res_pjsip_session.c<br>+++ b/res/res_pjsip_session.c<br>@@ -549,6 +549,16 @@<br>      return 0;<br> }<br> <br>+static void remove_stream_from_bundle(struct ast_sip_session_media *session_media,<br>+        struct ast_stream *stream)<br>+{<br>+       ast_stream_set_state(stream, AST_STREAM_STATE_REMOVED);<br>+      ast_free(session_media->mid);<br>+     session_media->mid = NULL;<br>+        session_media->bundle_group = -1;<br>+ session_media->bundled = 0;<br>+}<br>+<br> static int handle_incoming_sdp(struct ast_sip_session *session, const pjmedia_sdp_session *sdp)<br> {<br>   int i;<br>@@ -611,13 +621,9 @@<br>          if (!remote_stream->desc.port || is_stream_limitation_reached(type, session->endpoint, type_streams)) {<br>                         ast_debug(1, "Declining incoming SDP media stream '%s' at position '%d'\n",<br>                                 ast_codec_media_type2str(type), i);<br>-                  ast_stream_set_state(stream, AST_STREAM_STATE_REMOVED);<br>-                      session_media->bundle_group = -1;<br>-                 session_media->bundled = 0;<br>+                       remove_stream_from_bundle(session_media, stream);<br>                     continue;<br>             }<br>-<br>-         set_mid_and_bundle_group(session, session_media, sdp, remote_stream);<br> <br>              if (session_media->handler) {<br>                      handler = session_media->handler;<br>@@ -628,11 +634,17 @@<br>                   if (res < 0) {<br>                             /* Catastrophic failure. Abort! */<br>                            return -1;<br>+                   } else if (res == 0) {<br>+                               ast_debug(1, "Declining incoming SDP media stream '%s' at position '%d'\n",<br>+                                        ast_codec_media_type2str(type), i);<br>+                          remove_stream_from_bundle(session_media, stream);<br>+                            continue;<br>                     } else if (res > 0) {<br>                              ast_debug(1, "Media stream '%s' handled by %s\n",<br>                                   ast_codec_media_type2str(session_media->type),<br>                                     session_media->handler->id);<br>                            /* Handled by this handler. Move to the next stream */<br>+                               set_mid_and_bundle_group(session, session_media, sdp, remote_stream);<br>                                 handled = 1;<br>                          ++type_streams[type];<br>                                 continue;<br>@@ -655,12 +667,17 @@<br>                      if (res < 0) {<br>                             /* Catastrophic failure. Abort! */<br>                            return -1;<br>-                   }<br>-                    if (res > 0) {<br>+                    } else if (res == 0) {<br>+                               ast_debug(1, "Declining incoming SDP media stream '%s' at position '%d'\n",<br>+                                        ast_codec_media_type2str(type), i);<br>+                          remove_stream_from_bundle(session_media, stream);<br>+                            continue;<br>+                    } else if (res > 0) {<br>                              ast_debug(1, "Media stream '%s' handled by %s\n",<br>                                   ast_codec_media_type2str(session_media->type),<br>                                     handler->id);<br>                              /* Handled by this handler. Move to the next stream */<br>+                               set_mid_and_bundle_group(session, session_media, sdp, remote_stream);<br>                                 session_media_set_handler(session_media, handler);<br>                            handled = 1;<br>                          ++type_streams[type];<br>@@ -1456,7 +1473,8 @@<br>                          }<br> <br>                          /* No need to do anything with stream if it's media state is removed */<br>-                          if (ast_stream_get_state(stream) == AST_STREAM_STATE_REMOVED) {<br>+                              if (ast_stream_get_state(stream) == AST_STREAM_STATE_REMOVED<br>+                                 || !ast_stream_get_formats(stream)) {<br>                                         continue;<br>                             }<br> <br></pre><p>To view, visit <a href="https://gerrit.asterisk.org/6557">change 6557</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/6557"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: asterisk </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Ic854eda54c95031e66b076ecfae3041d34daa692 </div>
<div style="display:none"> Gerrit-Change-Number: 6557 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: George Joseph <gjoseph@digium.com> </div>