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





<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
 <p style="margin-top: 0;">On February 8th, 2012, 2:31 p.m., <b>Tilghman Lesher</b> wrote:</p>
 <blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
  <pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">If it were me, I&#39;d add some extra checks to verify that the bridge CDR variables I&#39;m copying into are blank.  Just that, blank, not &quot;or unmodified from the original CDR&quot;.  Like you said, this violates the fundamental rule of never modifying CDR code, so you need to be extra-vigilant to ensure that nobody was counting upon values set _prior_ to the bridge being posted.

One efficient way to do this would be to create another version of copy_vars that appends to the _tail_ of the list, instead of the _head_.  That ensures that if there were any variables already set, they stay their original values, and you won&#39;t be breaking anybody&#39;s dialplan.</pre>
 </blockquote>







</blockquote>

<pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">The bridge_cdr is never referenced inside the bridge loop, and is never attached to anything so it *can&#39;t* be modified anywhere else. It is either dup&#39;d from the chan_cdr, or created if the chan_cdr doesn&#39;t exist (with a comment saying that it not existing should be rare/impossible). In any case, if there exists a chan_cdr, which is modifiable, then it seems like those values should just be copied over.</pre>
<br />








<p>- Terry</p>


<br />
<p>On February 7th, 2012, 6:34 p.m., Terry Wilson wrote:</p>






<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.</div>
<div>By Terry Wilson.</div>


<p style="color: grey;"><i>Updated Feb. 7, 2012, 6:34 p.m.</i></p>




<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;">This completely violates my normal rule of &quot;Don&#39;t touch CDR code, ever. No, really, I mean it. Never.&quot; So, with that said, I will be more than happy if someone tells me that this is a horrible idea and we shouldn&#39;t implement it.

Now, with *that* said, this is something that really should work. The problem is that before entering the bridge loop, we duplicate the channel cdr as the bridge cdr. When the CDR() application modifies the CDR during the bridge, it writes to the old channel cdr. This patch just copies the writable &quot;read only&quot; CDR variables (don&#39;t get me started) amaflags, accountcode, and userfield  and other CDR variables from the channel cdr to the bridge cdr before posting the bridge cdr.

I await someone who is smarter than I am to tell me why this is a bad idea, because I know that modifying CDR code is always a bad idea.</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;">I made a dynamic feature that calls Set(CDR(userfield)=stuff) and verified that &quot;stuff&quot; is actually written to the CDR userfield when it is used.</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-16990">ASTERISK-16990</a>


</div>


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

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

</ul>

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




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








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