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



<table bgcolor="#e0e0e0" width="100%" cellpadding="8" style="border: 1px gray solid;">
 <tr>
  <td>
   <h1 style="margin-right: 0.2em; padding: 0; font-size: 10pt;">This change has been marked as submitted.</h1>
  </td>
 </tr>
</table>
<br />


<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 Jonathan Rose.</div>


<p style="color: grey;"><i>Updated Aug. 5, 2014, 9 a.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;">Committed in revision 420028</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-24107">ASTERISK-24107</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;">When using an IAX2 peer configured with:
allow=all

Asterisk will segfault when building the peer while loading chan_iax2.so

This is caused by ast_format_cmp trying to compare two ast_format structs using the codec opus format interface defined in res_format_attr_opus. This format interface doesn't define a format comparison function, so when we try to use this undefined function, boom.

The fix for this was to treat an interface without a comparison function in the same manner as we treat comparison with formats that don't have interfaces.</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;">It doesn't crash anymore. That's a start.  I also checked the output for the CLI command 'iax2 show peer' for the peer I was using to define all the codecs and that appeared to work alright. Also made a call with just opus and ulaw set as codecs (opus should have been the preferred).  Opus ended up not being included in the list of preferred codecs (although output for just Codecs still includes it for some reason) and when making a call the endpoint would choose ulaw.

*CLI> iax2 show peer lappy


  * Name       : lappy
  Description  : 
  Secret       : <Set>
  Context      : default
  Parking lot  : 
  Mailbox      : 
  Dynamic      : Yes
  Callnum limit: 0
  Calltoken req: No
  Trunk        : No
  Encryption   : No
  Callerid     : "" <>
  Expire       : 4
  ACL          : No
  Addr->IP     : 10.24.16.82 Port 4569
  Defaddr->IP  : (null) Port (null)
  Username     : lappy
  Codecs       : (ulaw|opus)
  Codec Order  : (ulaw)
  Status       : OK (38 ms)
  Qualify      : every 60000ms when OK, every 10000ms when UNREACHABLE (sample smoothing Off)

*CLI> 
*CLI> 
*CLI> 
*CLI>     -- Accepting AUTHENTICATED call from 10.24.16.82:4569:
    --        > requested format = ulaw,
    --        > requested prefs = (),
    --        > actual format = ulaw,
    --        > host prefs = (ulaw),
    --        > priority = mine


It gets slightly weirder right now when more stuff is specified after opus...

[deskbox]
disallow=all
allow=opus
allow=ulaw
allow=alaw

results:

*CLI> iax2 show peer deskbox 


  * Name       : deskbox
  Description  : 
  Secret       : <Set>
  Context      : default
  Parking lot  : 
  Mailbox      : 
  Dynamic      : Yes
  Callnum limit: 0
  Calltoken req: No
  Trunk        : No
  Encryption   : No
  Callerid     : "" <>
  Expire       : -1
  ACL          : No
  Addr->IP     : (null) Port (null)
  Defaddr->IP  : (null) Port (null)
  Username     : deskbox
  Codecs       : (ulaw|alaw)
  Codec Order  : (ulaw|alaw)
  Status       : UNKNOWN
  Qualify      : every 60000ms when OK, every 10000ms when UNREACHABLE (sample smoothing Off)


This is due to a quirk with how we are currently building the codec preferences list and may get resolved by some stuff rmudgett is working on, so this patch just focuses on resolving the crash.</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>/trunk/main/format.c <span style="color: grey">(419870)</span></li>

</ul>

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







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




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