<div dir="ltr"><div>I've been working on a proxy to sit between MS Teams and "normal" SIP stacks. Teams sends way too many 180s and RTP-less 183s so I sanitize them like this:<br><br><span style="font-family:monospace">onreply_route[relay_reply] {<br> if (t_check_status("180")) {<br> if (isflagset("GOT_180")) {<br> drop;<br> } else {<br> setflag("GOT_180");<br> }<br> }<br><br> if (isflagset("GOT_180") && t_check_status("183")) {<br> drop;<br> }<br></span></div><div><span style="font-family:monospace">}</span></div><div><br></div><div>With this I stop superfluous 18x messages from being relayed downstream. The 'drop' here kills the message completely. You could include the drop if you want to stop the message from being relayed (which you probably do) and are finished processing it in the script (which you are probably not).</div><div><br></div><div>If I understand your application correctly, I'd populate the AVP in the reply route and do everything else in the failure route. Or, try Liviu's suggestion of using $(<reply>hdr(Identity)) in the failure_route directly. Either way, then continue in the failure_route to do whatever else needs to happen.</div><div><br></div><div><br></div><div>- Jeff</div><div><br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jun 2, 2021 at 2:10 PM David Villasmil <<a href="mailto:david.villasmil.work@gmail.com">david.villasmil.work@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hello Jeff,<div><br></div><div>That's exactly what I'm doing:</div><div><br></div><div><font face="monospace"># Relay to REDIRECT server<br>route[relay_to_REDIRECT]<br>{<br> t_on_reply("reply_from_REDIRECT");<br> t_on_failure("failure_from_REDIRECT");<br><br> xlog("L_ERR", "[$ci][$rm]: Relaying to REDIRECT");<br> if (!t_relay()) {<br> xlog("L_ERR", "[$ci][$rm]: unable to relay request $ru to $tU -- replying with error");<br> sl_reply_error();<br> }<br><br> exit;<br>}<br><br># Response from REDIRECT will come in here.<br>failure_route[failure_from_REDIRECT]<br>{<br> xlog("L_ERR", "[$ci][$rm]: I'm in failure_route[failover_from_REDIRECT]");<br> if (t_was_cancelled()) {<br> exit;<br> }<br><br> if(is_avp_set("$avp(myheader)")) {<br> xlog("L_ERR", "[$ci][$rm]: Got Identity Header: $(hdr(myheader))");<br> setflag(100);<br> route(invite);<br> }<br>}<br><br># Response 302 from REDIRECT will come in here.<br>onreply_route[reply_from_REDIRECT]<br>{<br> xlog("L_ERR", "[$ci][$rm]: I'm in onreply_route[reply_from_REDIRECT]");<br> if (t_was_cancelled()) {<br> exit;<br> }<br><br> # detect redirect, store the header and send to "invite" as normally<br> if (t_check_status("302") && is_present_hf("myheader")) {<br> $avp(identity_header) = $(hdr(myheader));<br> setflag(100);<br> drop();<br> }<br>}</font></div><div><br></div><div><div><div><div dir="ltr"><div dir="ltr"><div>So I suppose i don't need the drop()?</div><div><br></div><div>Regards,</div><div><br></div>David Villasmil<div>email: <a href="mailto:david.villasmil.work@gmail.com" target="_blank">david.villasmil.work@gmail.com</a></div><div>phone: +34669448337</div></div></div></div><br></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jun 2, 2021 at 4:32 PM Jeff Pyle <<a href="mailto:jeff@ugnd.org" target="_blank">jeff@ugnd.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div>If I arm both t_on_failure() and t_on_reply(), do a t_relay(), and a
302 comes back, I have access to the reply in the onreply_route, then
the failure_route. From a SIP perspective, a 302 is a failure since
it's not 2xx-series, no? I don't do a drop() in the onreply_route. It
just naturally follows its course to the failure_route.</div><div><br></div><div>David,
in your case, since you're trying to drop any 302 that doesn't have an
Identity header, I'd check for its presence in the onreply_route and set
a flag if there accordingly. And, capture its value in an AVP if you
need. Next, in the failure_route, if (t_check_status("302") &&
!isflagset("302_HAS_ID_HEADER")) drop; or something similar. You
could easily expand that block to route-advance to your next carrier,
send_reply(499, "Something Else"), or whatever you makes sense for your
application.<font color="#888888"><br></font></div><font color="#888888"><div><br></div><div><br></div><div>- Jeff</div></font></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jun 2, 2021 at 10:19 AM Johan De Clercq <<a href="mailto:Johan@democon.be" target="_blank">Johan@democon.be</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>that's because 302 is not an error. <br></div><div>So I guess that drop() is the only way. <br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Op wo 2 jun. 2021 om 15:42 schreef David Villasmil <<a href="mailto:david.villasmil.work@gmail.com" target="_blank">david.villasmil.work@gmail.com</a>>:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="auto">Thanks Ben,</div><div dir="auto"><br></div><div dir="auto">That’s a good point. But only way I’ve found to jump over from oneply to failure_route is by doing a drop(). If there’s another way, I’d love to know about it!</div><div dir="auto"><br></div><div dir="auto">David</div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, 2 Jun 2021 at 08:29, Ben Newlin <<a href="mailto:Ben.Newlin@genesys.com" target="_blank">Ben.Newlin@genesys.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div lang="EN-US">
<div>
<p class="MsoNormal">You still don’t need to call drop() as long as you are handling the request in failure_route. The 302 will not be sent back upstream as long as failure_route either creates a new branch request or sends back a different reply code. Only
if failure_route exits without doing either of these things would the downstream 302 be sent back upstream as-is.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">In fact, as far as I know drop() has no functionality for responses >= 200.</p></div></div><div lang="EN-US"><div><p class="MsoNormal"><u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><span style="color:black">Ben Newlin </span><u></u><u></u></p>
<p class="MsoNormal"><br>
</p></div></div></blockquote></div></div></blockquote></div></blockquote></div></div>
_______________________________________________<br>
Users mailing list<br>
<a href="mailto:Users@lists.opensips.org" target="_blank">Users@lists.opensips.org</a><br>
<a href="http://lists.opensips.org/cgi-bin/mailman/listinfo/users" rel="noreferrer" target="_blank">http://lists.opensips.org/cgi-bin/mailman/listinfo/users</a><br>
</blockquote></div>
_______________________________________________<br>
Users mailing list<br>
<a href="mailto:Users@lists.opensips.org" target="_blank">Users@lists.opensips.org</a><br>
<a href="http://lists.opensips.org/cgi-bin/mailman/listinfo/users" rel="noreferrer" target="_blank">http://lists.opensips.org/cgi-bin/mailman/listinfo/users</a><br>
</blockquote></div>