Hi all, 

I have the following scenario:


Client -> Kamailio (adds X-CallSource hdr) -> Media Server -> Kamailio (removes all "X-" headers) -> Carrier

Carrier doesn't get any X- headers. All works.


Now for example, if the media server replies with a non-OK status, like:

Client -> Kamailio (adds X-CallSource hdr) <-> Media Server (480 Temporarily Unavailable) 
          Kamailio (in failure_route, removes all "X-" headers) -> External Voicemail Service

External Voicemail Service gets the X- headers.


Basically, on the first example, it is a regular call, all handled from request route.

On the second example, call goes to media server, media server replies with a 480, reaches kamailio's failure route, in there we run the same remove_hf_re.

In the captures I can see that the X-CallSource header (added at the very beginning) is still there.


I have tried different combinations in the failure route:

a) Tried removing exactly the header: remove_hf("X-CallSource")
b) Tried removing any X- header: remove_hf_re("X-")

Those didn't work, then I tried:

c) append_hf("X-CallSource: Test")
    remove_hf("X-CallSource")

The result was now two X-CallSource headers, the add worked, the remove didn't.

I thought maybe "msg_apply_changes()" could help, but it isn't valid inside failure_route.



So what is the deal here? Am I doing something completely wrong or is it just that you cannot remove headers (but you can add) in failure route? According to the doc:

https://www.kamailio.org/docs/modules/devel/modules/textops.html#textops.f.remove_hf_re -----> This function can be used from ANY_ROUTE.

OS: Debian 8
Kamailio: 4.4.5 (installed from deb repo)

# kamailio -v
version: kamailio 4.4.5 (x86_64/linux)
flags: STATS: Off, USE_TCP, USE_TLS, USE_SCTP, TLS_HOOKS, DISABLE_NAGLE, USE_MCAST, DNS_IP_HACK, SHM_MEM, 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_BLACKLIST, HAVE_RESOLV_RES
ADAPTIVE_WAIT_LOOPS=1024, MAX_RECV_BUFFER_SIZE 262144, MAX_LISTEN 16, 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.9.2


Any suggestions?

Thanks 
Joel.