Further edit:<br><br>Actually I tried using ds_select_dst to forward the ACK on the unconfirmed (unanswered; 603 Decline) call but it routed to another destination.<br>My work-around involves using ds_next_dst to send the ACK to *all* destinations.<br>
<br>Does anyone know if there is a way to fix this behaviour?<br>Any help is much appreciated!<br><br>Cheers,<br>Richard<br><div class="gmail_extra"><br><br><div class="gmail_quote">On 27 November 2012 20:12, SIP Mailing-list <span dir="ltr">&lt;<a href="mailto:sip@racitup.com" target="_blank">sip@racitup.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi guys,<br><br>I wonder if someone could sanity check something for me.<br><br>I currently have a simple load balancer set up using algorithm 10 (call load distribution) from the dispatcher module. I&#39;m using Record-Routing so that I can clear down the call load record at the end of the call.<br>

Everything looked like it was working okay until I just spotted a problem that I think might be a bug. It&#39;s to do with ACKs to non-200 responses.<br><br>In a normal call, the flow goes:<br><span style="font-family:courier new,monospace">UAC                Proxy               UAS<br>

1     INVITE --&gt;<br>2                          INVITE--&gt;<br>3                         &lt;-- 200 OK<br>--- ds_load_update()<br>4     &lt;-- 200 OK<br>5      ACK --&gt;<br>6                           ACK --&gt;</span><br>

Now between step 3 and 4 the proxy runs ds_load_update which according to the documentation &quot;set internal state to confirmed for the call load&quot; entry in the internal call state store. This means the proxy knows where to send the ACK at step 5 because it is safely in the call state store so you can use ds_select_dst again on the ACK to get it to the right place. Works fine!<br>

<br>Now consider the non-200 case:<br><span style="font-family:courier new,monospace">UAC               Proxy               UAS<br>1     INVITE --&gt;<br>2                          INVITE--&gt;<br>3                      &lt;-- 603 Decline<br>

--- ds_load_unset()<br>4  &lt;-- 603 Decline<br>5      ACK --&gt;<br>6                           ACK --&gt; ???</span><br>Between step 3 and 4 the proxy is supposed to run ds_load_unset() which unconditionally removes the call from the call state store. Now when the ACK comes in at step 5, the proxy has no record of the call and so doesn&#39;t know where to send the ACK. This results in retried Declines and ACKs. Broken :-(<br>

<br>If the proxy doesn&#39;t run ds_load_unset() on the 603 response, is there some kind of timer that will cause the call to be removed from the call state store on unconfirmed calls?<br><br>I don&#39;t think I can run ds_load_unset on the ACK because there&#39;s nothing in the ACK that tells me it is because of a 603, rather than a 200.<br>

<br>Edit: actually there is! The Route header is present on the 200 ACK, but <b>not</b> on the 3xx to 6xx ACK. Maybe I can use loose_route... Anyway, any thoughts would be appreciated!<br><br>Cheers,<br>Richard<br>
</blockquote></div><br></div>