### Description
Unexpected Behavior from transformations, psuedo variables, and topos.
Topos is in use for topology hiding I'm not sure if this is part of the problem as I can't easily test this in the current environment, although I do know indexes should work with $hdr() psuedo variables.
*Issue 1*
```
Record-Route: <sip:a@a.com>,<sip:b@b.com>,<sip:c@c.com>
$(hdr(Record-Route)[0]) results in "<sip:a@a.com>,<sip:b@b.com>,<sip:c@c.com>"
```
Expected result would be <sip:a@a.com>
I've also tested using index 1 incase 0 was equivalent to *, same results.
Which lead me to the second issue.
*issue 2*
```
Correct:
$(hdr(Record-Route)[*]) results in <sip:a@a.com>,<sip:b@b.com>,<sip:c@c.com>
Correct:
$(hdr(Record-Route)[*]{re.subst,/,/|/g}) results in <sip:a@a.com>|<sip:b@b.com>|<sip:c@c.com>
Incorrect:
$(hdr(Record-Route)[*]{re.subst,/,/|/g}{param.valueat,0,|}) results in some random string pulled from part of the Record-Route header
```
Expected result would be <sip:a@a.com>
### Possible Solutions
TBD
### Additional Information
* **Kamailio Version** - output of `kamailio -v`
```
version: kamailio 5.8.2 (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, MEM_JOIN_FREE, 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, TLS_PTHREAD_MUTEX_SHARED
ADAPTIVE_WAIT_LOOPS 1024, MAX_RECV_BUFFER_SIZE 262144, MAX_SEND_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 10.2.1
```
* **Operating System**:
```
Distributor ID: Debian
Description: Debian GNU/Linux 11 (bullseye)
Release: 11
Codename: bullseye
```
--
Reply to this email directly or view it on GitHub:
https://github.com/kamailio/kamailio/issues/4127
You are receiving this because you are subscribed to this thread.
Message ID: <kamailio/kamailio/issues/4127(a)github.com>
Hello,
I am considering to release Kamailio v5.8.5 (out of branch 5.8) on
Thursday, Jan 23, 2025. If anyone is aware of issues not yet on the bug
tracker, report them there asap in order to have a better chance to be
fixed.
Cheers,
Daniel
--
Daniel-Constantin Mierla (@ asipto.com)
twitter.com/miconda -- linkedin.com/in/miconda
Kamailio Consultancy, Training and Development Services -- asipto.com
<!-- Kamailio Pull Request Template -->
<!--
IMPORTANT:
- for detailed contributing guidelines, read:
https://github.com/kamailio/kamailio/blob/master/.github/CONTRIBUTING.md
- pull requests must be done to master branch, unless they are backports
of fixes from master branch to a stable branch
- backports to stable branches must be done with 'git cherry-pick -x ...'
- code is contributed under BSD for core and main components (tm, sl, auth, tls)
- code is contributed GPLv2 or a compatible license for the other components
- GPL code is contributed with OpenSSL licensing exception
-->
#### Pre-Submission Checklist
<!-- Go over all points below, and after creating the PR, tick all the checkboxes that apply -->
<!-- All points should be verified, otherwise, read the CONTRIBUTING guidelines from above-->
<!-- If you're unsure about any of these, don't hesitate to ask on sr-dev mailing list -->
- [x] Commit message has the format required by CONTRIBUTING guide
- [x] Commits are split per component (core, individual modules, libs, utils, ...)
- [x] Each component has a single commit (if not, squash them into one commit)
- [x] No commits to README files for modules (changes must be done to docbook files
in `doc/` subfolder, the README file is autogenerated)
#### Type Of Change
- [x] Small bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds new functionality)
- [ ] Breaking change (fix or feature that would change existing functionality)
#### Checklist:
<!-- Go over all points below, and after creating the PR, tick the checkboxes that apply -->
- [ ] PR should be backported to stable branches
- [ ] Tested changes locally
- [x] Related to issue #4100
#### Description
add ims_usrloc_scscf definitions
You can view, comment on, or merge this pull request online at:
https://github.com/kamailio/kamailio/pull/4110
-- Commit Summary --
* lib/srdb1/schema: ims_usrloc_scscf definitions
-- File Changes --
A src/lib/srdb1/schema/contact.xml (100)
A src/lib/srdb1/schema/impu.xml (99)
A src/lib/srdb1/schema/impu_contact.xml (52)
A src/lib/srdb1/schema/impu_subscriber.xml (52)
A src/lib/srdb1/schema/kamailio-ims_usrloc_scscf.xml (16)
A src/lib/srdb1/schema/subscriber_scscf.xml (123)
-- Patch Links --
https://github.com/kamailio/kamailio/pull/4110.patchhttps://github.com/kamailio/kamailio/pull/4110.diff
--
Reply to this email directly or view it on GitHub:
https://github.com/kamailio/kamailio/pull/4110
You are receiving this because you are subscribed to this thread.
Message ID: <kamailio/kamailio/pull/4110(a)github.com>
<!-- Kamailio Pull Request Template -->
<!--
IMPORTANT:
- for detailed contributing guidelines, read:
https://github.com/kamailio/kamailio/blob/master/.github/CONTRIBUTING.md
- pull requests must be done to master branch, unless they are backports
of fixes from master branch to a stable branch
- backports to stable branches must be done with 'git cherry-pick -x ...'
- code is contributed under BSD for core and main components (tm, sl, auth, tls)
- code is contributed GPLv2 or a compatible license for the other components
- GPL code is contributed with OpenSSL licensing exception
-->
#### Pre-Submission Checklist
<!-- Go over all points below, and after creating the PR, tick all the checkboxes that apply -->
<!-- All points should be verified, otherwise, read the CONTRIBUTING guidelines from above-->
<!-- If you're unsure about any of these, don't hesitate to ask on sr-dev mailing list -->
- [x] Commit message has the format required by CONTRIBUTING guide
- [x] Commits are split per component (core, individual modules, libs, utils, ...)
- [x] Each component has a single commit (if not, squash them into one commit)
- [x] No commits to README files for modules (changes must be done to docbook files
in `doc/` subfolder, the README file is autogenerated)
#### Type Of Change
- [x] Small bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds new functionality)
- [ ] Breaking change (fix or feature that would change existing functionality)
#### Checklist:
<!-- Go over all points below, and after creating the PR, tick the checkboxes that apply -->
- [ ] PR should be backported to stable branches
- [ ] Tested changes locally
- [x] Related to issue #4100
#### Description
add ims_charging definitions
You can view, comment on, or merge this pull request online at:
https://github.com/kamailio/kamailio/pull/4111
-- Commit Summary --
* lib/srdb1/schema: ims_charging definitions
-- File Changes --
A src/lib/srdb1/schema/kamailio-ims_charging.xml (12)
A src/lib/srdb1/schema/ro_session.xml (209)
-- Patch Links --
https://github.com/kamailio/kamailio/pull/4111.patchhttps://github.com/kamailio/kamailio/pull/4111.diff
--
Reply to this email directly or view it on GitHub:
https://github.com/kamailio/kamailio/pull/4111
You are receiving this because you are subscribed to this thread.
Message ID: <kamailio/kamailio/pull/4111(a)github.com>
Module: kamailio
Branch: master
Commit: b918e09e9c3e06bddfd7a205f64abb603d589f1c
URL: https://github.com/kamailio/kamailio/commit/b918e09e9c3e06bddfd7a205f64abb6…
Author: Alexander Bakker <ab(a)alexbakker.me>
Committer: Daniel-Constantin Mierla <miconda(a)gmail.com>
Date: 2025-01-29T08:19:45+01:00
outbound: encode bind address into flow token as destination
This is an attempt to fix the combination of the outbound/rr modules and
``tcp_accept_haproxy=yes``. This combination is currently broken, as
previously reported on the mailing list:
https://www.mail-archive.com/sr-users@lists.kamailio.org/msg21854.html
The issue is that the destination address/port combo of the haproxy side is
encoded into the flow token. When the rr module decodes the flow token and tries
to look up the listening socket using ``find_si``, it cannot be found, because
it is given the destination address/port combo of the connection of the haproxy
side, not the address/port combo that Kamailio is actually listening on.
This patch fixes the issue by encoding the ``bind_address`` of the socket the
connection was received on into the flow token as the destination address. The
source address remains unchanged, as it *can* be used to look up the TCP
connection (with a minor patch to ``_tcpconn_find`` in ``tcp_main.c``)
---
Modified: src/modules/outbound/outbound_mod.c
---
Diff: https://github.com/kamailio/kamailio/commit/b918e09e9c3e06bddfd7a205f64abb6…
Patch: https://github.com/kamailio/kamailio/commit/b918e09e9c3e06bddfd7a205f64abb6…
---
diff --git a/src/modules/outbound/outbound_mod.c b/src/modules/outbound/outbound_mod.c
index f2e0c7dbc3d..a5f17e4ef99 100644
--- a/src/modules/outbound/outbound_mod.c
+++ b/src/modules/outbound/outbound_mod.c
@@ -180,15 +180,25 @@ int encode_flow_token(str *flow_token, struct receive_info *rcv)
return -1;
}
+ /* By encoding the bind address into the flow token as the destination
+ address, we make sure that we'll still be able to find the socket when
+ decoding it even if there's an haproxy in front */
+ struct ip_addr dst_ip = rcv->dst_ip;
+ unsigned short dst_port = rcv->dst_port;
+ if(rcv->bind_address) {
+ dst_ip = rcv->bind_address->address;
+ dst_port = rcv->bind_address->port_no;
+ }
+
/* Encode protocol information */
unenc_flow_token[pos++] =
- (rcv->dst_ip.af == AF_INET6 ? 0x80 : 0x00) | rcv->proto;
+ (dst_ip.af == AF_INET6 ? 0x80 : 0x00) | rcv->proto;
/* Encode destination address */
- for(i = 0; i < (rcv->dst_ip.af == AF_INET6 ? 16 : 4); i++)
- unenc_flow_token[pos++] = rcv->dst_ip.u.addr[i];
- unenc_flow_token[pos++] = (rcv->dst_port >> 8) & 0xff;
- unenc_flow_token[pos++] = rcv->dst_port & 0xff;
+ for(i = 0; i < (dst_ip.af == AF_INET6 ? 16 : 4); i++)
+ unenc_flow_token[pos++] = dst_ip.u.addr[i];
+ unenc_flow_token[pos++] = (dst_port >> 8) & 0xff;
+ unenc_flow_token[pos++] = dst_port & 0xff;
/* Encode source address */
for(i = 0; i < (rcv->src_ip.af == AF_INET6 ? 16 : 4); i++)
<!-- Kamailio Pull Request Template -->
<!--
IMPORTANT:
- for detailed contributing guidelines, read:
https://github.com/kamailio/kamailio/blob/master/.github/CONTRIBUTING.md
- pull requests must be done to master branch, unless they are backports
of fixes from master branch to a stable branch
- backports to stable branches must be done with 'git cherry-pick -x ...'
- code is contributed under BSD for core and main components (tm, sl, auth, tls)
- code is contributed GPLv2 or a compatible license for the other components
- GPL code is contributed with OpenSSL licensing exception
-->
#### Pre-Submission Checklist
<!-- Go over all points below, and after creating the PR, tick all the checkboxes that apply -->
<!-- All points should be verified, otherwise, read the CONTRIBUTING guidelines from above-->
<!-- If you're unsure about any of these, don't hesitate to ask on sr-dev mailing list -->
- [x] Commit message has the format required by CONTRIBUTING guide
- [x] Commits are split per component (core, individual modules, libs, utils, ...)
- [x] Each component has a single commit (if not, squash them into one commit)
- [x] No commits to README files for modules (changes must be done to docbook files
in `doc/` subfolder, the README file is autogenerated)
#### Type Of Change
- [x] Small bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds new functionality)
- [ ] Breaking change (fix or feature that would change existing functionality)
#### Checklist:
<!-- Go over all points below, and after creating the PR, tick the checkboxes that apply -->
- [ ] PR should be backported to stable branches
- [x] Tested changes locally
- [ ] Related to issue #XXXX (replace XXXX with an open issue number)
#### Description
<!-- Describe your changes in detail -->
This PR adds some start-up information for soft and hard limits of open files.
You can view, comment on, or merge this pull request online at:
https://github.com/kamailio/kamailio/pull/4117
-- Commit Summary --
* main: Print open file limits
-- File Changes --
M src/main.c (11)
-- Patch Links --
https://github.com/kamailio/kamailio/pull/4117.patchhttps://github.com/kamailio/kamailio/pull/4117.diff
--
Reply to this email directly or view it on GitHub:
https://github.com/kamailio/kamailio/pull/4117
You are receiving this because you are subscribed to this thread.
Message ID: <kamailio/kamailio/pull/4117(a)github.com>
<!-- Kamailio Pull Request Template -->
<!--
IMPORTANT:
- for detailed contributing guidelines, read:
https://github.com/kamailio/kamailio/blob/master/.github/CONTRIBUTING.md
- pull requests must be done to master branch, unless they are backports
of fixes from master branch to a stable branch
- backports to stable branches must be done with 'git cherry-pick -x ...'
- code is contributed under BSD for core and main components (tm, sl, auth, tls)
- code is contributed GPLv2 or a compatible license for the other components
- GPL code is contributed with OpenSSL licensing exception
-->
#### Pre-Submission Checklist
<!-- Go over all points below, and after creating the PR, tick all the checkboxes that apply -->
<!-- All points should be verified, otherwise, read the CONTRIBUTING guidelines from above-->
<!-- If you're unsure about any of these, don't hesitate to ask on sr-dev mailing list -->
- [x] Commit message has the format required by CONTRIBUTING guide
- [x] Commits are split per component (core, individual modules, libs, utils, ...)
- [x] Each component has a single commit (if not, squash them into one commit)
- [x] No commits to README files for modules (changes must be done to docbook files
in `doc/` subfolder, the README file is autogenerated)
#### Type Of Change
- [x] Small bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds new functionality)
- [ ] Breaking change (fix or feature that would change existing functionality)
#### Checklist:
<!-- Go over all points below, and after creating the PR, tick the checkboxes that apply -->
- [ ] PR should be backported to stable branches
- [ ] Tested changes locally
- [ ] Related to issue #XXXX (replace XXXX with an open issue number)
#### Description
<!-- Describe your changes in detail -->
You can view, comment on, or merge this pull request online at:
https://github.com/kamailio/kamailio/pull/4123
-- Commit Summary --
* ims_registrar_scscf: send NOTIFY in case of subsequent SUBSCRIBE as per RFC 3265
* ims_registrar_scscf: set contact to presentity URI in 200OK for SUBSCRIBE to reg events
-- File Changes --
M src/modules/ims_registrar_scscf/registrar_notify.c (12)
-- Patch Links --
https://github.com/kamailio/kamailio/pull/4123.patchhttps://github.com/kamailio/kamailio/pull/4123.diff
--
Reply to this email directly or view it on GitHub:
https://github.com/kamailio/kamailio/pull/4123
You are receiving this because you are subscribed to this thread.
Message ID: <kamailio/kamailio/pull/4123(a)github.com>
- Changed the logic for matching a listening TCP/TLS-socket in tcp_reuse_port scenario, now it considers local port as well. With 'tcp_reuse_port' option enabled, the local port is meaningful and helps to differentiate between sockets on the same IP but different ports.
<!-- Kamailio Pull Request Template -->
<!--
IMPORTANT:
- for detailed contributing guidelines, read:
https://github.com/kamailio/kamailio/blob/master/.github/CONTRIBUTING.md
- pull requests must be done to master branch, unless they are backports
of fixes from master branch to a stable branch
- backports to stable branches must be done with 'git cherry-pick -x ...'
- code is contributed under BSD for core and main components (tm, sl, auth, tls)
- code is contributed GPLv2 or a compatible license for the other components
- GPL code is contributed with OpenSSL licensing exception
-->
#### Pre-Submission Checklist
<!-- Go over all points below, and after creating the PR, tick all the checkboxes that apply -->
<!-- All points should be verified, otherwise, read the CONTRIBUTING guidelines from above-->
<!-- If you're unsure about any of these, don't hesitate to ask on sr-dev mailing list -->
- [x] Commit message has the format required by CONTRIBUTING guide
- [x] Commits are split per component (core, individual modules, libs, utils, ...)
- [x] Each component has a single commit (if not, squash them into one commit)
- [x] No commits to README files for modules (changes must be done to docbook files
in `doc/` subfolder, the README file is autogenerated)
#### Type Of Change
- [x] Small bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds new functionality)
- [ ] Breaking change (fix or feature that would change existing functionality)
#### Checklist:
<!-- Go over all points below, and after creating the PR, tick the checkboxes that apply -->
- [ ] PR should be backported to stable branches
- [ ] Tested changes locally
- [ ] Related to issue #XXXX (replace XXXX with an open issue number)
#### Description
In our installation Kamailio runs multiple SIP-trunks, including TCP/TLS, which may be bound to the same local IP address but different local ports, and it's crucial for us to know exactly which trunk, i.e. local socket/port, was used to receive a SIP message.
Additionally, the option "tcp_reuse_port" is also enabled in our environment to start outbound connections from the same TCP/TLS ports that we are listening at.
The problem we hit is that identifying a trunk receiving a SIP message by $Rn(Received socket name) $Rp(Received port), which works perfectly fine for UDP trunks, not working for TCP/TLS with "tcp_reuse_port": wrong port and sockname are reported in preudovars.
Investigation showed that it always reports the first listening socket (in the order defined in config file) which matches IP and transport protocol. Port is being ignored here
e.g. if kamailio is listening on:
listen=tcp:192.168.0.11:5060 name "int_tcp_5060"
listen=tcp:192.168.0.11:5062 name "int_tcp_5062"
listen=tcp:192.168.0.11:5063 name "int_tcp_5063"
it will always report $Rn: int_tcp_5060 and $Rp: 5060 for incoming SIP-messages regardless of the actual socket/port being used, even if it's 5062 or 5063
This applies for both TCP and TLS.
Additionally we noticed that the issue happens only in case if an incoming SIP message from remote SBC is coming via the tcp-connection which was initially opened as outbound with well-known ports (rather than via a new incoming tcp-connection with ephemeral src/remote port)
This pointed us to the function core/tcp_main.c:tcp_do_connect() which handles outbound connections.
While opening a new outbound connection to remote SBC, it ignores local/src port while matching it to a listening socket and saves that incorrect info for future use.
This behavior makes sense if tcp_reuse_port is disabled as matching ephemeral port would not give any result.
But with tcp_reuse_port enabled, we need to take the port into consideration as well.
With suggested changes applied we get correct values in $Rn(Received socket name) $Rp(Received port) for inbound messages via all sockets.
Tests with tcp_reuse_port disabled show no change in behavior, as expected.
You can view, comment on, or merge this pull request online at:
https://github.com/kamailio/kamailio/pull/4120
-- Commit Summary --
* tcp: fix for local TCP/TLS socket matching with 'tcp_reuse_port' enabled
-- File Changes --
M src/core/tcp_main.c (12)
-- Patch Links --
https://github.com/kamailio/kamailio/pull/4120.patchhttps://github.com/kamailio/kamailio/pull/4120.diff
--
Reply to this email directly or view it on GitHub:
https://github.com/kamailio/kamailio/pull/4120
You are receiving this because you are subscribed to this thread.
Message ID: <kamailio/kamailio/pull/4120(a)github.com>
Module: kamailio
Branch: master
Commit: 7de4f84f08e4ce910c007aad3fa2cadbe4b11dd2
URL: https://github.com/kamailio/kamailio/commit/7de4f84f08e4ce910c007aad3fa2cad…
Author: herlesupreeth <herlesupreeth(a)gmail.com>
Committer: Daniel-Constantin Mierla <miconda(a)gmail.com>
Date: 2025-01-29T08:16:08+01:00
ims_registrar_scscf: send NOTIFY in case of subsequent SUBSCRIBE as per RFC 3265
---
Modified: src/modules/ims_registrar_scscf/registrar_notify.c
---
Diff: https://github.com/kamailio/kamailio/commit/7de4f84f08e4ce910c007aad3fa2cad…
Patch: https://github.com/kamailio/kamailio/commit/7de4f84f08e4ce910c007aad3fa2cad…
---
diff --git a/src/modules/ims_registrar_scscf/registrar_notify.c b/src/modules/ims_registrar_scscf/registrar_notify.c
index aade763a09a..bcddbf17cc2 100644
--- a/src/modules/ims_registrar_scscf/registrar_notify.c
+++ b/src/modules/ims_registrar_scscf/registrar_notify.c
@@ -497,13 +497,15 @@ int event_reg(udomain_t *_d, impurecord_t *r_passed, ucontact_t *c_passed,
case IMS_REGISTRAR_NONE:
return 0;
case IMS_REGISTRAR_SUBSCRIBE:
+ case IMS_REGISTRAR_SUBSEQUENT_SUBSCRIBE:
if(r_passed || !presentity_uri || !watcher_contact || !_d) {
LM_ERR("this is a subscribe called from cfg file: r_passed be "
"zero and presentity_uri, watcher_contact and _d should "
"be valid for a subscribe");
return 0;
}
- LM_DBG("Event type is IMS REGISTRAR SUBSCRIBE about to get "
+ LM_DBG("Event type is IMS REGISTRAR SUBSCRIBE/RE-SUBSCRIBE about "
+ "to get "
"reginfo_full\n");
//lets get IMPU list for presentity as well as register for callbacks (IFF it is a new SUBSCRIBE)
@@ -1376,8 +1378,8 @@ int subscribe_to_reg(struct sip_msg *msg, char *_t, char *str2)
subscribe_reply(
msg, 200, MSG_REG_SUBSCRIBE_OK, &expires, &scscf_name_str);
- if(event_type == IMS_REGISTRAR_SUBSCRIBE) {
- //do reg event only for the initial subscribe
+ if(event_type == IMS_REGISTRAR_SUBSCRIBE
+ || event_type == IMS_REGISTRAR_SUBSEQUENT_SUBSCRIBE) {
if(event_reg(domain, 0, 0, event_type, &presentity_uri,
&watcher_contact, 0, 0, 0)
!= 0) {
@@ -1723,7 +1725,8 @@ void create_notifications(udomain_t *_t, impurecord_t *r_passed,
}
//This is a fix to ensure that when a user subscribes a full reg info is only sent to that UE
- if(event_type == IMS_REGISTRAR_SUBSCRIBE) {
+ if(event_type == IMS_REGISTRAR_SUBSCRIBE
+ || event_type == IMS_REGISTRAR_SUBSEQUENT_SUBSCRIBE) {
if(contact_match(watcher_contact, &s->watcher_contact)
&& (presentity_uri->len == s->presentity_uri.len)
&& (memcmp(s->presentity_uri.s, presentity_uri->s,