<p>Richard Mudgett has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.asterisk.org/9321">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">res_pjsip_t38.c: Fix crash by ignoring 1xx messages.<br><br>If we initiated a T.38 reINVITE, we would crash if we received any other<br>1xx response message except 100 if it were followed by a 200 response.<br><br>* Made ignore any 1xx response so we do not close out the T.38 negotiation<br>too early.  For good measure we'll now accept any 2xx response as<br>acceptance of the reINVITE T.38 offer.<br><br>NOTE: In v13 we don't actually crash but we should deal with the non-final<br>response messages and not switch to rejected and then to enabled when the<br>200 comes in.<br><br>ASTERISK-27944<br><br>Change-Id: I0ca88aae708d091db7335af73f41035a212adff4<br>---<br>M res/res_pjsip_t38.c<br>1 file changed, 7 insertions(+), 5 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/21/9321/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/res/res_pjsip_t38.c b/res/res_pjsip_t38.c</span><br><span>index a3cdc57..757c667 100644</span><br><span>--- a/res/res_pjsip_t38.c</span><br><span>+++ b/res/res_pjsip_t38.c</span><br><span>@@ -245,8 +245,6 @@</span><br><span>        /* This will get bumped up before scheduling */</span><br><span>      pj_timer_entry_init(&state->timer, 0, session, t38_automatic_reject_timer_cb);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       datastore->data = state;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>  return state;</span><br><span> }</span><br><span> </span><br><span>@@ -296,18 +294,22 @@</span><br><span>       struct t38_state *state;</span><br><span>     struct ast_sip_session_media *session_media = NULL;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (status.code == 100) {</span><br><span style="color: hsl(120, 100%, 40%);">+     if (status.code / 100 <= 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+              /* Ignore any non-final responses (1xx) */</span><br><span>           return 0;</span><br><span>    }</span><br><span> </span><br><span>        if (!session->channel || !(state = t38_state_get_or_alloc(session)) ||</span><br><span>            !(session_media = ao2_find(session->media, "image", OBJ_KEY))) {</span><br><span style="color: hsl(0, 100%, 40%);">-           ast_log(LOG_WARNING, "Received response to T.38 re-invite on '%s' but state unavailable\n",</span><br><span style="color: hsl(120, 100%, 40%);">+         ast_log(LOG_WARNING, "Received %d response to T.38 re-invite on '%s' but state unavailable\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                      status.code,</span><br><span>                         session->channel ? ast_channel_name(session->channel) : "unknown channel");</span><br><span>          return 0;</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   t38_change_state(session, session_media, state, (status.code == 200) ? T38_ENABLED : T38_REJECTED);</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Accept any 2xx response as successfully negotiated */</span><br><span style="color: hsl(120, 100%, 40%);">+      t38_change_state(session, session_media, state,</span><br><span style="color: hsl(120, 100%, 40%);">+               (status.code / 100 == 2) ? T38_ENABLED : T38_REJECTED);</span><br><span> </span><br><span>  ao2_cleanup(session_media);</span><br><span>  return 0;</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.asterisk.org/9321">change 9321</a>. To unsubscribe, or for help writing mail filters, 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/9321"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: asterisk </div>
<div style="display:none"> Gerrit-Branch: 13 </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I0ca88aae708d091db7335af73f41035a212adff4 </div>
<div style="display:none"> Gerrit-Change-Number: 9321 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Richard Mudgett <rmudgett@digium.com> </div>