<!--
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…
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.o…
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:bob@example.com>;tag=123456789
To: <sip:alice@example.com>
Call-ID: 987654321(a)192.168.1.100
CSeq: 1 OPTIONS
Contact: <sip:bob@example.com>;expires=3600,<sip:bob2@example.com>;expires=3600,<sip:bob3@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(a)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(a)192.168.1.100} <script>: Route headers hfl: <sip:server1.example.com;lr;ftag=1234>
INFO: {1 1 OPTIONS 987654321(a)192.168.1.100} <script>: Route headers count: 5
INFO: {1 1 OPTIONS 987654321(a)192.168.1.100} <script>: Route headers 0: <sip:server1.example.com;lr;ftag=1234>
INFO: {1 1 OPTIONS 987654321(a)192.168.1.100} <script>: Route headers 1: <sip:server2.example.com;lr;ftag=5678>
INFO: {1 1 OPTIONS 987654321(a)192.168.1.100} <script>: Route headers 4: <sip:server5.example.com;lr;ftag=5678>
INFO: {1 1 OPTIONS 987654321(a)192.168.1.100} <script>: Route headers -1: <null>
INFO: {1 1 OPTIONS 987654321(a)192.168.1.100} <script>: Route headers -2: <sip:server5.example.com;lr;ftag=5678>
INFO: {1 1 OPTIONS 987654321(a)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/e59c4415707f0995a0d5315b5601ae518…, 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/3653(a)github.com>
Module: kamailio
Branch: master
Commit: 3d6fecc6bc6d52f56d0fdd4e075a15032da91421
URL: https://github.com/kamailio/kamailio/commit/3d6fecc6bc6d52f56d0fdd4e075a150…
Author: Daniel-Constantin Mierla <miconda(a)gmail.com>
Committer: Daniel-Constantin Mierla <miconda(a)gmail.com>
Date: 2023-12-29T09:55:33+01:00
siputils: docs for tel2sip2() function
---
Modified: src/modules/siputils/doc/siputils_admin.xml
---
Diff: https://github.com/kamailio/kamailio/commit/3d6fecc6bc6d52f56d0fdd4e075a150…
Patch: https://github.com/kamailio/kamailio/commit/3d6fecc6bc6d52f56d0fdd4e075a150…
---
diff --git a/src/modules/siputils/doc/siputils_admin.xml b/src/modules/siputils/doc/siputils_admin.xml
index 63984c60c67..d2197b1c3f4 100644
--- a/src/modules/siputils/doc/siputils_admin.xml
+++ b/src/modules/siputils/doc/siputils_admin.xml
@@ -539,13 +539,15 @@ if (uri_param_rm("param1")) {
<para>
The conversion follows the rules in RFC 3261 section 19.1.6:
<itemizedlist>
- <listitem>
- <para>Visual separators ( "-", ".", "(", ")" ) are removed from tel URI number before converting it to SIP URI userinfo.</para>
+ <listitem>
+ <para>Visual separators ( "-", ".", "(", ")" ) are removed
+ from tel URI number before converting it to SIP URI userinfo.</para>
</listitem>
<listitem>
- <para>tel URI parameters are downcased before appending them to SIP URI userinfo</para>
- </listitem>
- </itemizedlist>
+ <para>tel URI parameters are downcased before appending them
+ to SIP URI userinfo</para>
+ </listitem>
+ </itemizedlist>
</para>
<para>
The SIP URI hostpart is taken from second param
@@ -569,6 +571,36 @@ tel2sip("$ru", $fd", "$ru");
tel2sip("$ru", $fd", "$ru");
# $ru: sip:+12345678;ext=200;isub=+123-456@foo.com;user=phone
...
+</programlisting>
+ </example>
+ </section>
+ <section id="siputils.f.tel2sip2">
+ <title>
+ <function moreinfo="none">tel2sip2(uri, hostpart, result)</function>
+ </title>
+ <para>
+ Alternative to sip2tel() function that tries to follow closer the RFC
+ requrements (e.g., sort tel: uri parameters copied to the sip: uri in
+ the manner defined in the standard; deletes the phone-context parameter
+ if it is a domain, and, takes visual separators from the phone-context
+ parameter if it is a telephone number).
+ </para>
+ <para>
+ Its parameters have the same meaning as for tel2sip().
+ </para>
+ <para>
+ This function can be used from REQUEST_ROUTE, FAILURE_ROUTE,
+ BRANCH_ROUTE, or ONREPLY_ROUTE.
+ </para>
+ <example>
+ <title><function>tel2sip2</function> usage</title>
+ <programlisting format="linespecific">
+...
+# $ru: tel:+(34)-999-888-777
+# $fu: sip:test@foo.com
+tel2sip2("$ru", $fd", "$ru");
+# $ru: sip:+34999888777@foo.com;user=phone
+...
</programlisting>
</example>
</section>