23 aug 2013 kl. 12:13 skrev Steve Davies <st...@connection-telecom.com>:

> 
> 
> 
> On 23 August 2013 11:18, Steve Davies <st...@connection-telecom.com> wrote:
> Here's what I put in RELAY route block:
> 
>         $var(rr) = t_relay();
>         xlog("L_NOTICE","SLD: in RELAY, t_relay returned $var(rr)\n");
>         if (!$var(rr)) {
>                 sl_reply_error();
>         }
> 
> 
> In 4.0.3, t_relay gives a -1 in the case that there is a physical network 
> issue (in my test I have a "-j DROP" iptables rule)
> 
> 
> Trying to find a way to detect the case where t_relay fails but doesn't call 
> the failure block.  I dumped some hopeful looking pseudo variables, and tried 
> to use an avp to communicate from the failure branch back to the relay point.
> 
> I tried this:
> 
>         $avp(senttoast) = 0;
>         $var(rr) = t_relay();
>         xlog("L_NOTICE","SLD: in RELAY, t_relay returned $var(rr) err.rcode 
> is $err.rcode t_r_c is $T_reply_code sent = $avp(senttoast)\n");
>         if ($var(rr) < 0) {
>                 sl_reply_error();
>         }
> 
> and in my failure block I set $avp(senttoast) to 1.
> 
> 
> I get:
> 
> Aug 23 12:07:02 ubuntu /usr/local/sbin/kamailio[7819]: NOTICE: <script>: SLD: 
> in RELAY, t_relay returned -1 err.rcode is <null> t_r_c is 100 sent = 0
> 
> In the case of a 477 being sent back.  So I can't find anything distinctive 
> so far.
> 
> In the case of a soft failure (I have the upstream send a 500):
> 
> Aug 23 12:09:32 ubuntu /usr/local/sbin/kamailio[7817]: NOTICE: <script>: SLD: 
> in RELAY, t_relay returned 1 err.rcode is <null> t_r_c is 100 sent = 0
> 
> So the same.
> 
> From the trace I can see that the failure block is only executed after the 
> t_relay returns.  The failure block runs on a different pid.
> 
> So there is a race.  Or maybe the avp doesn't work across branches or 
> something?
> 
> Clues would be welcome!

THe failure route is executed when a transaction fails, i.e. ends with a code 
higher than 299.

The failure of t_relay happens when you try to send to something that doesn't 
exist or something similar.

set 

$du="sip:127.0.0.2:1234;transport=udp";

and run t_relay to get an error. Or 

$du="sip:steve.davies.learns.kamai...@jburg.example.com;transport=udp";

(for DNS errors)

or

$du = "sip:david.duf...@www.digium.com:80;transport=tcp";

(for connection errors).

Test with those to see different behaviours.

/O

_______________________________________________
SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
sr-users@lists.sip-router.org
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users

Reply via email to