[SR-Users] Trouble with 302 Redirect
Alex Balashov
abalashov at evaristesys.com
Thu Jan 16 23:31:43 CET 2020
Try doing this in a failure_route[]; onreply_route[] isn't really meant
to transform replies, just to passively observe or drop them.
Also, you'll want to use append_to_reply():
https://kamailio.org/docs/modules/5.3.x/modules/textops.html#textops.f.append_to_reply
Note that the conditions that give rise to the invocation of a
failure_route are broader and somewhat more abstract than any given SIP
reply -- e.g. transaction reply timeouts. So, you would want to
structure your failure_route like this:
failure_route[REDIRECT_HANDLE] {
if(t_is_canceled())
exit;
if(t_branch_timeout()) {
# Handle the timeout case...
exit;
}
# Use $T_rpl to access reply code ($rs) and reply reason if needed
# ($rs), per:
#
# https://www.kamailio.org/wiki/cookbooks/5.3.x/pseudovariables#t_rpl_pv
if($T_rpl($rs) == 486) {
append_to_reply("Contact: <sip:...>\r\n");
t_reply("302", "Moved Temporarily");
exit;
}
# Some other case.
}
-- Alex
On Thu, Jan 16, 2020 at 03:54:54PM -0500, Jim Leahy wrote:
> Hi All,
> I'm having some issues trying to properly send a '302 Moved Temporarily'
> reply to the calling UAC (UAC1) when the remote UAC (UAC2) returns a 486
> status (Do Not Disturb). The goal is to redirect UAC1 to a voicemail server
> when UAC2 is in DND.
> Here are the pertinent parts of my config:
>
> route {
> # drop some things right away
> route(DROP);
>
> # perform sanity check
> route(SANITYCHECK);
>
> # handle registrations
> if(is_method("REGISTER")) {
> route(REGISTRATION);
> exit;
> }
>
> # handle invites
> if(is_method("INVITE")) {
> route("INVITE");
> exit;
> }
>
> route(RELAY);
> }
>
> route[INVITE] {
> # add this proxy to the record-route so it stays in the loop
> record_route();
>
> # if we can find this user in the location DB...
> if(lookup("location")) {
> # relay the invite to the new dURI
> t_on_failure("FOURDIGITFAIL");
> t_on_reply("FOURDIGITREPLY");
> route(RELAY);
> # go back to the main route
> return;
> }
>
> onreply_route[FOURDIGITREPLY] {
> if(t_check_status("4[0-9]{2}")) {
> t_reply("302", "Moved Temporarily");
> }
> }
>
> I'm having issues with the t_reply in the onreply_route. It successfully
> sends the reply, but I can't seem to set the Contact header properly. I'm
> trying to set it to the location of the user's mailbox on the voicemail
> sever (ie sip:1000 at vmpbx.domain.com), but nothing I try works. I've tried:
> remove_hf("Contact");
> insert_hf("Contact: sip:1000 at vmpbx.domain.com");
> t_reply("302", "Moved Temporarily");
>
> But as I understand it, that just changes the header in the reply from
> UAC2, not the reply I'm sending to UAC1
>
> Then I tried:
> append_to_reply("Contact: sip:1000 at vmpbx.domain.com" );
> t_reply("302", "Moved Temporarily");
>
> But I can't use append_to_reply in an onreply block.
> How can I change the Contact header in the reply that's sent? Am I just
> going about this the wrong way? Any help would be appreciated. Thanks
> _______________________________________________
> Kamailio (SER) - Users Mailing List
> sr-users at lists.kamailio.org
> https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
--
Alex Balashov | Principal | Evariste Systems LLC
Tel: +1-706-510-6800 / +1-800-250-5920 (toll-free)
Web: http://www.evaristesys.com/, http://www.csrpswitch.com/
More information about the sr-users
mailing list