[OpenSIPS-Users] Second Contact when sending 302 Redirect using async avp_db_query

Calvin Ellison calvin.ellison at voxox.com
Fri Mar 6 22:06:42 EST 2020


The scenario is a SIP-MySQL proxy that performs LRN queries and replies
with 302 Redirect and Contact including npdi and optional rn parameters.
Cache_db is also used. This has worked as intended using the SL module
without async.

After refactoring to use async(avp_db_query()), there is now an additional
Contact in the 302 Redirect only if the async() happens. When the RN is
found in the cache there is only the single intended Contact.

I suspect the difference has something to do with async using the TM module
and it's probably a simple mistake. What magic is required to send only the
desired Contact after async?

Here's the cached chunk:
                if($Rp != "5061" && !is_present_hf("X-LNP-Refresh") &&
cache_fetch("local", "$rU", $avp(10)))
                {
                        $avp(lrn) = $avp(10);
                        $avp(resultType) = "CACHED";
                        update_stat("cached_results", "+1");
                        route(continue);
                }
...

route [continue]
{
 if($Rp != "5061" )
        cache_store("local", "$rU", "$avp(lrn)", $avp(timeout));

        $var(rn) = $(avp(lrn){csv.value,0});
        $var(ct) = "<sip:" + $rU + "@" + $si + ":" + $sp + ";npdi";
        if($(var(rn){s.len}) != 0)
                $var(ct) = $var(ct) + ";rn=" + $var(rn);
        $var(ct) = $var(ct) + ">";
        append_to_reply("Contact: $var(ct)\r\n");

        sl_send_reply("302", "Redirect");
        $var(processingTime) = $Ts * 1000 + $Tsm/1000 - $avp(startTime);
}


Not-cached does this:

async(avp_db_query("call lrn.sqlrn('$var(number)')",
"$avp(11);$avp(12);$avp(13)"), resume_lnp);

...

route [resume_lnp]
{
        $var(db_res) = $retcode;
        if ($var(db_res) && is_avp_set("$avp(11)"))
        {
                update_stat("mysql_result_number", "+1");
                $var(number) = $avp(11);
                if ($avp(11) =~ "^[2-9][0-9]{9}$")
                        $var(number) = "1" + $avp(11);

                $avp(lrn) = $var(number) + "," + $avp(12) + "," + $avp(13);
                $avp(resultType) = "MYSQL";
        }
        else if ($var(db_res) == -1)
        {
                update_stat("mysql_result_error", "+1");
                $var(ct) = "<sip:" + $rU + "@" + $si + ":" + $sp + ";npdi"
 + ">";
                append_to_reply("Contact: $var(ct)\r\n");
                sl_send_reply("302", "Redirect");
                $var(processingTime) = $Ts * 1000 + $Tsm/1000 -
$avp(startTime);
                xlog("L_ERR", "TRACE:ROUTE:MYSQL_ERROR src=$si:$sp
dst=$Ri:$Rp From=$fU To=$rU ID=$ci Time=$var(processingTime)\n");
                exit();
        }
        else
        {
                update_stat("mysql_result_empty", "+1");
                $avp(resultType) = "MYSQL_EMPTY";
        }
        route(continue);
}


Good (cached, no async):

SIP/2.0 302 Redirect
Via: SIP/2.0/UDP 10.0.2.45:5060;branch=z9hG4bK-27769-1-0
From: <sip:sipp at 10.0.2.45:5060>;tag=27769SIPpTag001
To: 17605086443 <sip:17605086443 at 10.0.131.97:5060
>;tag=a1b3.ecf278993d227a99987b0bccd10b5617
Call-ID: 1-27769 at 10.0.2.45
CSeq: 1 INVITE
Contact: <sip:17605086443 at 10.0.2.45:5060;npdi>
Content-Length: 0


Bad (not cached, async):

SIP/2.0 302 Redirect
Via: SIP/2.0/UDP 10.0.2.45:5060;branch=z9hG4bK-27753-1-0
From: <sip:sipp at 10.0.2.45:5060>;tag=27753SIPpTag001
To: 17605086443 <sip:17605086443 at 10.0.131.97:5060
>;tag=a1b3.fd3dd7f924d173cf165e3579c8289026
Call-ID: 1-27753 at 10.0.2.45
CSeq: 1 INVITE
Contact: <sip:17605086443 at 10.0.2.45:5060;npdi>
Contact: <sip:17605086443 at 10.0.131.97:5060>
Content-Length: 0



Regards,

*Calvin Ellison*
Senior Voice Operations Engineer
calvin.ellison at voxox.com
+1 (213) 285-0555

-----------------------------------------------
*voxox.com <http://www.voxox.com/> *
5825 Oberlin Drive, Suite 5
San Diego, CA 92121
[image: Voxox]
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opensips.org/pipermail/users/attachments/20200306/cbcf033b/attachment.html>


More information about the Users mailing list