<html>
<body>
<div style="font-family: Verdana, Arial, Helvetica, Sans-Serif;">
<table bgcolor="#f9f3c9" width="100%" cellpadding="8" style="border: 1px #c9c399 solid;">
<tr>
<td>
This is an automatically generated e-mail. To reply, visit:
<a href="https://reviewboard.asterisk.org/r/4339/">https://reviewboard.asterisk.org/r/4339/</a>
</td>
</tr>
</table>
<br />
<p>Ship it!</p>
<pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">Ship It!</pre>
<br />
<p>- Matt Jordan</p>
<br />
<p>On January 14th, 2015, 5:27 p.m. CST, Mark Michelson wrote:</p>
<table bgcolor="#fefadf" width="100%" cellspacing="0" cellpadding="8" style="background-image: url('https://reviewboard.asterisk.org/static/rb/images/review_request_box_top_bg.ab6f3b1072c9.png'); background-position: left top; background-repeat: repeat-x; border: 1px black solid;">
<tr>
<td>
<div>Review request for Asterisk Developers.</div>
<div>By Mark Michelson.</div>
<p style="color: grey;"><i>Updated Jan. 14, 2015, 5:27 p.m.</i></p>
<div style="margin-top: 1.5em;">
<b style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Bugs: </b>
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-24624">ASTERISK-24624</a>
</div>
<div style="margin-top: 1.5em;">
<b style="color: #575012; font-size: 10pt;">Repository: </b>
Asterisk
</div>
<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Description </h1>
<table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
<tr>
<td>
<pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">During the process of a blind transfer, Asterisk sends NOTIFY requests to the transferring party to update them about the status of the outgoing call to the transfer target. If Asterisk sends a NOTIFY that indicates that the blind transfer has failed, some phones will respond by trying to send a reinvite to get themselves back into the call.
When this reinvite hits chan_pjsip, the session supplement in charge of channel allocation sees that the session on which the reinvite arrived has no channel, and therefore it creates a channel. The problem is that all other code that would do anything with this channel (like sending it into the dialplan) is specifically coded not to do anything on reinvites. So the created channel ends up going nowhere and hanging around forever.
With this patch, if the channel creation session supplement receives a reinvite and there is no channel on the session, this is treated as an error. The session is immediately terminated and the session supplement returns an error condition, indicating that no further session supplements should be called.
Additionally, res_pjsip_session's reinvite request handling module has been modified to short-circuit early if there is no channel. Otherwise, a reinvite with no SDP might cause a crash.</pre>
</td>
</tr>
</table>
<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Testing </h1>
<table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
<tr>
<td>
<pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">Manual testing by me, Josh Colp, and Zane Conkle all show that this patch fixes the hung channel issue.</pre>
</td>
</tr>
</table>
<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Diffs</b> </h1>
<ul style="margin-left: 3em; padding-left: 0;">
<li>/branches/13/res/res_pjsip_session.c <span style="color: grey">(430625)</span></li>
<li>/branches/13/channels/chan_pjsip.c <span style="color: grey">(430625)</span></li>
</ul>
<p><a href="https://reviewboard.asterisk.org/r/4339/diff/" style="margin-left: 3em;">View Diff</a></p>
</td>
</tr>
</table>
</div>
</body>
</html>