<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/1808/">https://reviewboard.asterisk.org/r/1808/</a>
     </td>
    </tr>
   </table>
   <br />


<table bgcolor="#fefadf" width="100%" cellspacing="0" cellpadding="8" style="background-image: url('https://reviewboard.asterisk.org/media/rb/images/review_request_box_top_bg.png'); background-position: left top; background-repeat: repeat-x; border: 1px black solid;">
 <tr>
  <td>

<div>Review request for Asterisk Developers and schmidts.</div>
<div>By Terry Wilson.</div>


<p style="color: grey;"><i>Updated March 12, 2012, 4:37 p.m.</i></p>



<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Changes</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;">Ok, the devicestate2extenstate test found legitimate issues with the last version of the patch. This patch goes through and simplifies device state aggregation. For the most part, device states can be considered ordered, with higher ordered device states taking preference over those with lower orders. The exception is RINGINUSE as it is a combination of in-use types and RINGING. The original enum cannot be re-ordered since those values are passed over the network via IAX2, so I added a static ordred array to the aggregate function.

The changes to the test are for the (Invalid, Invalid) case which was showing up incorrectly as Unknown/Idle instead of Invalid/Unavailable, before. The test passes.</pre>
  </td>
 </tr>
</table>


<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;">First, a big thanks to Elazar Broad and Stefan Schmidt for the detective work done in ASTERISK-16702 tracking down this issue. The solution presented here is almost directly from their discussion in the issue.

Several issues result in non-existant SIP devices showing up as Idle when doing &#39;core show hints&#39;.

First, in chan_sip, there used to be a section of code in sip_devicestate() that tried to resolve a hostname, and if it was unresolvable return AST_DEVICE_UNKNOWN instead of the default AST_DEVICE_INVALID. When this resolving code was removed, AST_DEVICE_INVALID would never be returned--only AST_DEVICE_UNKOWN. AST_DEVICE_UNKNOWN means the device is valid, but we don&#39;t know it&#39;s state and is the wrong result for a non-existant device.

Second, ast_devstate_aggregate_result had no way of actually returning AST_DEVICE_INVALID even if it was the result.

Third, ast_destate_aggregate_add would return the same results for both AST_DEVICE_UNKNOWN and AST_DEVICE_INVALID, making it impossible to differentiate between the two in ast_devstate_aggregate_result.

This patch fixes the above issues. The patch is longer than it technically needs to be. The agg-&gt;all_invalid state can be removed and instead just return AST_DEVICE_INVALID for the agg-&gt;all_unavail &amp;&amp; agg-&gt;all_unknown case in ast_devstate_aggregate_result (indeed, this would be exactly what Elazar suggests in the issue). But, I thought that more explicit behavior might be less prone to future bugs. Either method would work for me.</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;">Tested with unregistered, registered, and defined peers and combination of the three. Results look sane.</pre>
  </td>
 </tr>
</table>



<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-16702">ASTERISK-16702</a>


</div>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Diffs</b> (updated)</h1>
<ul style="margin-left: 3em; padding-left: 0;">

 <li>/branches/1.8/channels/chan_sip.c <span style="color: grey">(358806)</span></li>

 <li>/branches/1.8/include/asterisk/devicestate.h <span style="color: grey">(358806)</span></li>

 <li>/branches/1.8/main/devicestate.c <span style="color: grey">(358806)</span></li>

 <li>/branches/1.8/tests/test_devicestate.c <span style="color: grey">(358806)</span></li>

</ul>

<p><a href="https://reviewboard.asterisk.org/r/1808/diff/" style="margin-left: 3em;">View Diff</a></p>




  </td>
 </tr>
</table>




  </div>
 </body>
</html>