<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Hello,<br>
    <br>
    only several algorithms are suitable for full stateless usage, I am
    mainly referring to those doing hashes over attributes of the sip
    message (like hash over call id).<br>
    <br>
    For the other you would need to use tm module and t_relay(). That
    will make it easy for you.<br>
    <br>
    Otherwise, you can use htable module to store the address from where
    the reply is coming and send the ACK there if it doesn't have a
    route header.<br>
    <br>
    Cheers,<br>
    Daniel<br>
    <br>
    <div class="moz-cite-prefix">On 12/1/12 4:35 AM, SIP Mailing-list
      wrote:<br>
    </div>
    <blockquote
cite="mid:CANYyo2aO_m8dQ2G1WBSOAjqmoGkf_66a=UOzOc3CvFYTN873=g@mail.gmail.com"
      type="cite">Hi Daniel,<br>
      <br>
      Yes I am using forward() because I thought it would be the fastest
      solution.<br>
      I guess I was lead on by the dispatcher documentation saying it
      can be used statelessly, so I tried to do the whole route script
      stateless.<br>
      <br>
      However, I've recently been looking at t_relay and in particular
      t_check_trans() and I think that might be the answer...<br>
      <br>
      I do think it would be great if the ds_select_dst/domain functions
      performed a lookup in the hash table for non-INVITEs and set the
      right destination though.<br>
      <br>
      Cheers,<br>
      Richard<br>
      <div class="gmail_extra">
        <br>
        <br>
        <div class="gmail_quote">On 30 November 2012 08:31,
          Daniel-Constantin Mierla <span dir="ltr">&lt;<a
              moz-do-not-send="true" href="mailto:miconda@gmail.com"
              target="_blank">miconda@gmail.com</a>&gt;</span> wrote:<br>
          <blockquote class="gmail_quote" style="margin:0 0 0
            .8ex;border-left:1px #ccc solid;padding-left:1ex">
            <div bgcolor="#FFFFFF" text="#000000"> Hello,<br>
              <br>
              by stateless dispatcher do you mean using forward() to
              send out the INVITE?<br>
              <br>
              Cheers,<br>
              Daniel
              <div>
                <div><br>
                  <br>
                  <div>On 11/28/12 1:40 PM, SIP Mailing-list wrote:<br>
                  </div>
                </div>
              </div>
              <blockquote type="cite">
                <div>
                  <div>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
                            moz-do-not-send="true"
                            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'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'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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
                            Proxy&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UAS<br>
                            1&nbsp;&nbsp; &nbsp; INVITE --&gt;<br>
                            2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INVITE--&gt;<br>
                            3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;-- 200 OK<br>
                            --- ds_load_update()<br>
                            4&nbsp;&nbsp;&nbsp;&nbsp; &lt;-- 200 OK<br>
                            5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ACK --&gt;<br>
                            6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ACK --&gt;</span><br>
                          Now between step 3 and 4 the proxy runs
                          ds_load_update which according to the
                          documentation "set internal state to confirmed
                          for the call load" 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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;
                            Proxy&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UAS<br>
                            1&nbsp;&nbsp; &nbsp; INVITE --&gt;<br>
                            2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INVITE--&gt;<br>
                            3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;-- 603 Decline<br>
                            --- ds_load_unset()<br>
                            4&nbsp; &lt;-- 603 Decline<br>
                            5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ACK --&gt;<br>
                            6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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't know
                          where to send the ACK. This results in retried
                          Declines and ACKs. Broken :-(<br>
                          <br>
                          If the proxy doesn'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't think I can run ds_load_unset on the
                          ACK because there'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>
                    <br>
                    <fieldset></fieldset>
                    <br>
                  </div>
                </div>
                <pre>_______________________________________________
SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
<a moz-do-not-send="true" href="mailto:sr-users@lists.sip-router.org" target="_blank">sr-users@lists.sip-router.org</a>
<a moz-do-not-send="true" href="http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users" target="_blank">http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users</a><span><font color="#888888">
</font></span></pre>
                <span><font color="#888888"> </font></span></blockquote>
              <span><font color="#888888"> <br>
                  <pre cols="72">-- 
Daniel-Constantin Mierla - <a moz-do-not-send="true" href="http://www.asipto.com" target="_blank">http://www.asipto.com</a>
<a moz-do-not-send="true" href="http://twitter.com/#%21/miconda" target="_blank">http://twitter.com/#!/miconda</a> - <a moz-do-not-send="true" href="http://www.linkedin.com/in/miconda" target="_blank">http://www.linkedin.com/in/miconda</a></pre>
                </font></span></div>
          </blockquote>
        </div>
        <br>
      </div>
    </blockquote>
    <br>
    <pre class="moz-signature" cols="72">-- 
Daniel-Constantin Mierla - <a class="moz-txt-link-freetext" href="http://www.asipto.com">http://www.asipto.com</a>
<a class="moz-txt-link-freetext" href="http://twitter.com/#!/miconda">http://twitter.com/#!/miconda</a> - <a class="moz-txt-link-freetext" href="http://www.linkedin.com/in/miconda">http://www.linkedin.com/in/miconda</a></pre>
  </body>
</html>