<!--
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:

  * 
https://lists.kamailio.org/mailman3/postorius/lists/sr-users.lists.kamailio.org/

If you have questions about developing extensions to Kamailio or its existing C 
code, ask on sr-dev mailing list:

  * 
https://lists.kamailio.org/mailman3/postorius/lists/sr-dev.lists.kamailio.org/

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 am working on extending $hfl and $hflc to support some more headers. 

During some experimentation, I stumbled into some weird behavior regarding 
$(hfl(Route)[-1]) and negative indexing of $hfl pseudo-variable (also for Via, 
Contact).

Per the [docs 
](https://www.kamailio.org/wikidocs/cookbooks/devel/pseudovariables/#hflname-header-field-with-list-of-bodies
 ): -1 index should print the last header found and so on (as stated by $hdr 
$hfl).

Right now, -1 produces null, and from -2 and onwards it prints correctly from 
the last one to the first one.


### Troubleshooting

#### Reproduction
```
#kamailio.cfg
...
request_route {
    xlog("L_INFO", "Route headers hdr: $hdr(Route)\n");
    xlog("L_INFO", "Route headers hfl: $hfl(Route)\n");
    xlog("L_INFO", "Route headers count: $hflc(Route)\n");
    xlog("L_INFO", "Route headers 0: $(hfl(Route)[0])\n");
    xlog("L_INFO", "Route headers 1: $(hfl(Route)[1])\n");
    xlog("L_INFO", "Route headers 4: $(hfl(Route)[4])\n");
    xlog("L_INFO", "Route headers -1: $(hfl(Route)[-1])\n");
    xlog("L_INFO", "Route headers -2: $(hfl(Route)[-2])\n");
    xlog("L_INFO", "Route headers -3: $(hfl(Route)[-3])\n");
    ...
}
```

Seng a SIP message containing Route (but also applicable for VIA, Contact 
headers):
```
OPTIONS_MSG_2CONTACTS="OPTIONS sip:example.com SIP/2.0
Via: SIP/2.0/UDP 192.168.1.100:5060;branch=z9hG4bK123456789
Max-Forwards: 70
From: <sip:b...@example.com>;tag=123456789
To: <sip:al...@example.com>
Call-ID: 987654321@192.168.1.100
CSeq: 1 OPTIONS
Contact: 
<sip:b...@example.com>;expires=3600,<sip:b...@example.com>;expires=3600,<sip:b...@example.com>;expires=3600
Route: <sip:server1.example.com;lr;ftag=1234>, 
<sip:server2.example.com;lr;ftag=5678>, <sip:server3.example.com;lr;ftag=9012>
Route: <sip:server4.example.com;lr;ftag=1234>, 
<sip:server5.example.com;lr;ftag=5678>
Content-Length: 0
"

echo -e "$OPTIONS_MSG_2CONTACTS" | nc -u localhost 5060
```

See logs for logging details.

#### 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).
-->

```
INFO: {1 1 OPTIONS 987654321@192.168.1.100} <script>: Route headers hdr: 
<sip:server1.example.com;lr;ftag=1234>, <sip:server2.example.com;lr;ftag=5678>, 
<sip:server3.example.com;lr;ftag=9012>
INFO: {1 1 OPTIONS 987654321@192.168.1.100} <script>: Route headers hfl: 
<sip:server1.example.com;lr;ftag=1234>
INFO: {1 1 OPTIONS 987654321@192.168.1.100} <script>: Route headers count: 5
INFO: {1 1 OPTIONS 987654321@192.168.1.100} <script>: Route headers 0: 
<sip:server1.example.com;lr;ftag=1234>
INFO: {1 1 OPTIONS 987654321@192.168.1.100} <script>: Route headers 1: 
<sip:server2.example.com;lr;ftag=5678>
INFO: {1 1 OPTIONS 987654321@192.168.1.100} <script>: Route headers 4: 
<sip:server5.example.com;lr;ftag=5678>
INFO: {1 1 OPTIONS 987654321@192.168.1.100} <script>: Route headers -1: <null>
INFO: {1 1 OPTIONS 987654321@192.168.1.100} <script>: Route headers -2: 
<sip:server5.example.com;lr;ftag=5678>
INFO: {1 1 OPTIONS 987654321@192.168.1.100} <script>: Route headers -3: 
<sip:server4.example.com;lr;ftag=1234>
```

### Possible Solutions

<!--
If you found a solution or workaround for the issue, describe it. Ideally, 
provide a pull request with a fix.
-->

In 
https://github.com/kamailio/kamailio/blob/e59c4415707f0995a0d5315b5601ae518b4f1ed5/src/modules/pv/pv_core.c#L2145C2-L2163,
 the count should start at 0 ie.
```
n=0; // not n=1;
```

### Additional Information

  * **Kamailio Version** - output of `kamailio -v`

```
(paste your output here)
```

* **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 `lsb_release -a` and `uname -a`)
-->

```
(paste your output here)
```


-- 
Reply to this email directly or view it on GitHub:
https://github.com/kamailio/kamailio/issues/3653
You are receiving this because you are subscribed to this thread.

Message ID: <kamailio/kamailio/issues/3...@github.com>
_______________________________________________
Kamailio (SER) - Development Mailing List
To unsubscribe send an email to sr-dev-le...@lists.kamailio.org

Reply via email to