<!-- Kamailio Project uses GitHub Issues only for bugs in the code or feature requests. Please use this template only for bug reports.
If you have questions about using Kamailio or related to its configuration file, ask on sr-users mailing list:
* http://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
If you have questions about developing extensions to Kamailio or its existing C code, ask on sr-dev mailing list:
* http://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-dev
Please try to fill this template as much as possible for any issue. It helps the developers to troubleshoot the issue.
If there is no content to be filled in a section, the entire section can be removed.
You can delete the comments from the template sections when filling.
You can delete next line and everything above before submitting (it is a comment). -->
### 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
<!-- Check the syslog file and if there are relevant log messages printed by Kamailio, add them next, or attach to issue, or provide a link to download them (e.g., to a pastebin site). -->
``` 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**:
<!-- Details about the operating system, the type: Linux (e.g.,: Debian 8.4, Ubuntu 16.04, CentOS 7.1, ...), MacOS, xBSD, Solaris, ...; Kernel details (output of `uname -a`) -->
``` Linux v4bkamailio 5.10.25-linuxkit #1 SMP Tue Mar 23 09:27:39 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux ```
`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 .
Closed #2802.
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.
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().
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.