Thanks so much for that information.&nbsp; Do you know if that fix is already in asterisk 1.4.22 or will that be in the next release?<br><br><div class="gmail_quote">On Fri, Nov 14, 2008 at 4:17 PM, Steve Murphy <span dir="ltr">&lt;<a href="mailto:murf@digium.com">murf@digium.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class="Ih2E3d">On Fri, 2008-11-14 at 11:56 -0500, Joel Jn-Francois wrote:<br>
&gt; Hi All,<br>
&gt;<br>
&gt; A few days ago Mark Michelson was able to help me figure out that<br>
&gt; asterisk was crashing when hanging up a 3-way call because the CDR was<br>
&gt; being set to Null at that point. &nbsp;However, the code below works<br>
&gt; perfectly for &nbsp;2-way calling.<br>
&gt;<br>
&gt; Can anyone share some insight as to why the CDR might be null when<br>
&gt; hanging up a 3-way call? &nbsp;Or is there another way of calculating the<br>
&gt; duration and the billsec without using the CDR?<br>
<br>
</div>Joel--<br>
<br>
It&#39;s an internal thing. Every channel starts out life with a CDR, at<br>
least<br>
in the current scheme of things. The code tosses the ones that aren&#39;t<br>
useful (for the most part). It wasn&#39;t necessarily a problem that the<br>
CDR was gone; it was because the entire channel was gone.<br>
<br>
Mark fixed it.<br>
<br>
While there are usually several ways to accomplish the same task in<br>
Asterisk, AFAIK, there is no other way to easily calc those times at the<br>
current moment, besides via CDR&#39;s. Hmmm. maybe queue logs... but if you<br>
want to write up some nifty dialplan code and do it yourself, this is<br>
always an option! I&#39;ve heard<br>
of people using a combination of the AMI and CDR&#39;s to get some info,<br>
seen<br>
fancy things done with ForkCDR(), NoCDR(), ResetCDR(), etc, to get<br>
desired<br>
results, also.<br>
<br>
murf<br>
<div class="Ih2E3d"><br>
&gt;<br>
&gt; Thanks for your help.<br>
&gt;<br>
&gt; struct tm tm;<br>
&gt; timestr[128];<br>
&gt; time_t t;<br>
&gt;<br>
&gt; {<br>
&gt; &nbsp; &nbsp; time(&amp;t);<br>
&gt; &nbsp; &nbsp; ast_localtime(&amp;t, &amp;tm, NULL);<br>
&gt; &nbsp; &nbsp; strftime(timestr,128,DATE_<br>
&gt; FORMAT,&amp;tm);<br>
&gt;<br>
&gt; &nbsp; &nbsp; ast_cdr_end(cdr);<br>
&gt;<br>
&gt; &nbsp; &nbsp; if (!cdr-&gt;end.tv_sec &amp;&amp; !cdr-&gt;end.tv_usec)<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; ast_log(LOG_WARNING, &quot;CDR on channel &#39;%s&#39; lacks end\n&quot;,<br>
&gt; cdr-&gt;channel);<br>
&gt;<br>
&gt; &nbsp; &nbsp; if (!cdr-&gt;start.tv_sec &amp;&amp; !cdr-&gt;start.tv_usec)<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; ast_log(LOG_WARNING, &quot;CDR on channel &#39;%s&#39; lacks start\n&quot;,<br>
&gt; cdr-&gt;channel);<br>
&gt;<br>
&gt; &nbsp; &nbsp; if (cdr-&gt;answer.tv_sec || cdr-&gt;answer.tv_usec) {<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; cdr-&gt;billsec = cdr-&gt;end.tv_sec - cdr-&gt;answer.tv_sec +<br>
&gt; (cdr-&gt;end.tv_usec - cdr-&gt;answer.tv_usec) / 1000000;<br>
&gt; &nbsp; &nbsp; } else { &nbsp; &nbsp;cdr-&gt;billsec = 0;}<br>
&gt;<br>
&gt; }<br>
</div>&gt; _______________________________________________<br>
&gt; --Bandwidth and Colocation Provided by <a href="http://www.api-digital.com--" target="_blank">http://www.api-digital.com--</a><br>
&gt;<br>
&gt; asterisk-dev mailing list<br>
&gt; To UNSUBSCRIBE or update options visit:<br>
&gt; &nbsp; &nbsp;<a href="http://lists.digium.com/mailman/listinfo/asterisk-dev" target="_blank">http://lists.digium.com/mailman/listinfo/asterisk-dev</a><br>
<font color="#888888">--<br>
Steve Murphy<br>
Software Developer<br>
Digium<br>
</font><br>_______________________________________________<br>
--Bandwidth and Colocation Provided by <a href="http://www.api-digital.com--" target="_blank">http://www.api-digital.com--</a><br>
<br>
asterisk-dev mailing list<br>
To UNSUBSCRIBE or update options visit:<br>
 &nbsp; <a href="http://lists.digium.com/mailman/listinfo/asterisk-dev" target="_blank">http://lists.digium.com/mailman/listinfo/asterisk-dev</a><br></blockquote></div><br>