<div>Hello,</div><div><br></div><div>I found an ugly behavior. In fact it is both a code bug and a mistake of concepts. I&#39;m talking about AMI event from app_queue.c. First let me bring the concepts from voipinfo:</div>
<div><br></div><div>ABANDON: &quot;The caller abandoned their position in the queue.&quot;</div>

<div>EXITEMPTY: &quot;The caller was exited from the queue forcefully because the queue had no reachable members and it&#39;s configured to do that to callers when there </div><div>are no reachable members.&quot;</div><div>


EXITWITHKEY: &quot;The caller elected to use a menu key to exit the queue.&quot;</div><div>EXITWITHTIMEOUT: &quot;The caller was on hold too long and the timeout expired.&quot;</div><div><br></div><div>I don&#39;t want mean we don&#39;t know about it, however it&#39;s my argument to bring to discuss the importance of this fix. In short, the problem is that app_queue sends the same event to EXITWITHTIMEOUT, EXITWITHKEY, SYSCOMPAT, EXITEMPTY. When app_queue receives any of them it sends: QueueCallerAbandon. In other hand, app_queue saves the correct event in queue_log. As follows:</div>


<div><br></div><div>if (qe.expire &amp;&amp; (time(NULL) &gt;= qe.expire)) {</div><div>     record_abandoned(&amp;qe);</div><div>     reason = QUEUE_TIMEOUT;</div><div>    res = 0;</div><div>    ast_queue_log(args.queuename, chan-&gt;uniqueid, &quot;NONE&quot;, &quot;EXITWITHTIMEOUT&quot;, &quot;%d&quot;, qe.pos);</div>


<div>    break;</div><div>}</div><div><br></div><div>The code above sends a &quot;QueueCallerAbandon&quot; coded in record_abandoned.</div><div><br></div><div>I was talking about it with Corydon and he alerted me about the complexity to implement changes in AMI events because many apps use the events in yours front-ends.</div>


<div><br></div><div>What I suggest to this case is create a &quot;deprecated&quot; event in the asterisk 1.4 and 1.6 to events: EXITWITHTIMEOUT, EXITWITHKEY, SYSCOMPAT, EXITEMPTY and sent both the new events and the deprecate event. At 1.8 asterisk this &quot;deprecated event&quot; will be removed. It&#39;s not the handsome solution, but is a way to start a change. My argument about this change is that attach a new line &quot;deprecate&quot; at AMI events won&#39;t cause problems to implementations that depends of it and at same time send the new events will let the developers of both front-ends and asterisk AMI monitoring to adapt our codes before the asterisk 1.8.</div>


<div><br></div><div>The code below represent a &quot;deprecate&quot; event:</div><div><br></div><div>manager_event(EVENT_FLAG_AGENT, &quot;QueueCallerAbandon&quot;,</div><div> &quot;Queue: %s\r\n&quot;</div><div>&quot;Uniqueid: %s\r\n&quot;</div>


<div>&quot;Position: %d\r\n&quot;</div><div> &quot;OriginalPosition: %d\r\n&quot;</div><div> &quot;HoldTime: %d\r\n&quot;</div><div> &quot;Replacedby: QueueCallerExitWithTimeout&quot;</div><div> &quot;Deprecated: Yes&quot;,</div>


<div> qe-&gt;parent-&gt;name, qe-&gt;chan-&gt;uniqueid, qe-&gt;pos, qe-&gt;opos, (int)(time(NULL) - qe-&gt;start));</div><div><br></div><div>To real ABANDON events the lines &quot;Replacedby&quot; and &quot;Deprecated&quot; will not appear, because it will not removed at future versions.</div>


<div><br></div><div>I posted in pastebin a complete code (asterisk-1.6.2.14) to exemplify my idea: <a href="http://pastebin.com/gaSSnfSW">http://pastebin.com/gaSSnfSW</a> (diff version: <a href="http://pastebin.com/m1zzcF9q">http://pastebin.com/m1zzcF9q</a>)</div>
<meta http-equiv="content-type" content="text/html; charset=utf-8"><div><br></div><div>Bye</div><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta http-equiv="content-type" content="text/html; charset=utf-8">