Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Wrong return code used by sl_reply_error() #2802

Closed
Norbixin opened this issue Jul 20, 2021 · 4 comments
Closed

Wrong return code used by sl_reply_error() #2802

Norbixin opened this issue Jul 20, 2021 · 4 comments

Comments

@Norbixin
Copy link

Description

I wanted to change 478 response to 503 in case of t_relay() failure, but leave default behavior in rest error cases. I used part of code from "Example 1.1." inside https://www.kamailio.org/docs/modules/devel/modules/outbound.html. When I get -478 from t_relay() it works fine, but when this code is different sl_reply_erorr() don't use it as it should be.

This is my part of kamailio.cfg:

route[RELAY] {
    if (!t_relay()) {
        switch($rc) {
            case -478:
                xlog("L_WARN","T_Relay returned 478, sending back 503.\n");
                sl_send_reply("503", "Service Unavailable");
                exit;
            default:
                sl_reply_error();
                exit;
        }
    }
    exit;
}

When I log $rc value before sl_reply_error() it is valid, but not used by sl_reply_error() as SIP error value, it sends 500 instead.

Troubleshooting

Reproduction

I've added incorrect hostnames with flag 16 to set where the message should be sent and t_relay() returns -478. To check the default case inside switch I changed case -478 to -479.

Log Messages

1(8) ERROR: <core> [core/resolve.c:1731]: sip_hostport2su(): could not resolve hostname: "va4brhino"
 1(8) ERROR: tm [ut.h:309]: uri2dst2(): failed to resolve "va4brhino"
 1(8) ERROR: tm [t_fwd.c:1759]: t_forward_nonack(): failure to add branches
 1(8) ERROR: sl [sl_funcs.c:414]: sl_reply_error(): stateless error reply used: I'm terribly sorry, server error occurred (1/SL)

Logs with different route relay

route[RELAY] {
    if (!t_relay()) {
        switch($rc) {
            case -479:
                xlog("L_WARN","T_Relay returned 479, sending back 503.\n");
                sl_send_reply("503", "Service Unavailable");
                exit;
            default:
                xlog("L_WARN","Return code: $rc\n");
                sl_reply_error();
                exit;
        }
    }
    exit;
}
 1(8) ERROR: <core> [core/resolve.c:1731]: sip_hostport2su(): could not resolve hostname: "va4brhino"
 1(8) ERROR: tm [ut.h:309]: uri2dst2(): failed to resolve "va4brhino"
 1(8) ERROR: tm [t_fwd.c:1759]: t_forward_nonack(): failure to add branches
 1(8) WARNING: <script>: Return code: -478
 1(8) ERROR: sl [sl_funcs.c:414]: sl_reply_error(): stateless error reply used: I'm terribly sorry, server error occurred (1/SL)

Additional Information

  • Kamailio Version - output of kamailio -v
version: kamailio 5.5.0 (x86_64/linux)
flags: USE_TCP, USE_TLS, USE_SCTP, TLS_HOOKS, USE_RAW_SOCKS, DISABLE_NAGLE, USE_MCAST, DNS_IP_HACK, SHM_MMAP, PKG_MALLOC, Q_MALLOC, F_MALLOC, TLSF_MALLOC, DBG_SR_MEMORY, USE_FUTEX, FAST_LOCK-ADAPTIVE_WAIT, USE_
DNS_CACHE, USE_DNS_FAILOVER, USE_NAPTR, USE_DST_BLOCKLIST, HAVE_RESOLV_RES
ADAPTIVE_WAIT_LOOPS 1024, MAX_RECV_BUFFER_SIZE 262144, MAX_URI_SIZE 1024, BUF_SIZE 65535, DEFAULT PKG_SIZE 8MB
poll method support: poll, epoll_lt, epoll_et, sigio_rt, select.
id: unknown
compiled with gcc 4.8.4
  • Operating System:
Linux v4bkamailio 5.10.25-linuxkit #1 SMP Tue Mar 23 09:27:39 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
@miconda
Copy link
Member

miconda commented Jul 26, 2021

sl_send_error() is for generic error reply. You can send any reply code using send_reply("code", "text"), use sl_send_error() only when you want the behaviour from the C code. For further discussions, email to sr-users@lists.kamailio.org .

@miconda miconda closed this as completed Jul 26, 2021
@pgrabowski
Copy link

Hi @miconda . I think you misunderstood bug here. Issue is that if and switch statements change behaviour of sl_send_error(). Same examples as configuration from this bug report are in Kamailio documentation so it looks like a bug, if not maybe documentation needs an update.

@miconda
Copy link
Member

miconda commented Jul 26, 2021

Then I still do not understand properly after your last comment.

Note that $rc can be updated by any kamailio action, so you should save its value in a $var(...) if you want to use it later. If you do an xlog(), after it the $rc is updated to the return of xlog().

@pgrabowski
Copy link

Please have a look at https://www.kamailio.org/docs/modules/devel/modules/outbound.html "Example 1.1. Edge Proxy Configuration" it uses exact same syntax. If expected behaviour is that any statement can affect sl_reply_error() then this example needs updating.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants