[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