Module: kamailio
Branch: 6.0
Commit: 60c9bafc287bfabe7860b389197e8801e26a6bfb
URL: https://github.com/kamailio/kamailio/commit/60c9bafc287bfabe7860b389197e880…
Author: Alexander Bakker <ab(a)alexbakker.me>
Committer: Daniel-Constantin Mierla <miconda(a)gmail.com>
Date: 2025-01-29T10:31:48+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 …
[View More]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``)
(cherry picked from commit b918e09e9c3e06bddfd7a205f64abb603d589f1c)
---
Modified: src/modules/outbound/outbound_mod.c
---
Diff: https://github.com/kamailio/kamailio/commit/60c9bafc287bfabe7860b389197e880…
Patch: https://github.com/kamailio/kamailio/commit/60c9bafc287bfabe7860b389197e880…
---
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++)
[View Less]
Module: kamailio
Branch: 6.0
Commit: 225f23a03a2941d44cbb1b56d0d95adcc3f78004
URL: https://github.com/kamailio/kamailio/commit/225f23a03a2941d44cbb1b56d0d95ad…
Author: herlesupreeth <herlesupreeth(a)gmail.com>
Committer: Daniel-Constantin Mierla <miconda(a)gmail.com>
Date: 2025-01-29T10:31:27+01:00
ims_registrar_scscf: send NOTIFY in case of subsequent SUBSCRIBE as per RFC 3265
(cherry picked from commit 7de4f84f08e4ce910c007aad3fa2cadbe4b11dd2)
---
Modified: src/modules/…
[View More]ims_registrar_scscf/registrar_notify.c
---
Diff: https://github.com/kamailio/kamailio/commit/225f23a03a2941d44cbb1b56d0d95ad…
Patch: https://github.com/kamailio/kamailio/commit/225f23a03a2941d44cbb1b56d0d95ad…
---
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,
[View Less]
#### 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 …
[View More]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
- [ ] Small bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds new functionality)
- [x] 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
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``)
While I've done quite a bit of testing with this patchset, I find it difficult to oversee the full impact of this change in Kamailio's large codebase. Any feedback is welcome.
You can view, comment on, or merge this pull request online at:
https://github.com/kamailio/kamailio/pull/4105
-- Commit Summary --
* outbound: encode bind address into flow token as destination
* core: tcp_main - include local dst port in conn lookup when using haproxy
-- File Changes --
M src/core/tcp_main.c (3)
M src/modules/outbound/outbound_mod.c (20)
-- Patch Links --
https://github.com/kamailio/kamailio/pull/4105.patchhttps://github.com/kamailio/kamailio/pull/4105.diff
--
Reply to this email directly or view it on GitHub:
https://github.com/kamailio/kamailio/pull/4105
You are receiving this because you are subscribed to this thread.
Message ID: <kamailio/kamailio/pull/4105(a)github.com>
[View Less]
#### Pre-Submission Checklist
- [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 …
[View More](non-breaking change which adds new functionality)
- [ ] Breaking change (fix or feature that would change existing functionality)
#### Checklist:
- [x] PR should be backported to stable branches
- [x] Tested changes locally
- [ ] Related to issue #XXXX (replace XXXX with an open issue number)
#### Description
On CentOS, the present build error var may be used uninitialized.
This fixes this.
You can view, comment on, or merge this pull request online at:
https://github.com/kamailio/kamailio/pull/4129
-- Commit Summary --
* janssonrpcc: fixed warning var may be used uninitialized
-- File Changes --
M src/modules/janssonrpcc/janssonrpc_server.c (1)
-- Patch Links --
https://github.com/kamailio/kamailio/pull/4129.patchhttps://github.com/kamailio/kamailio/pull/4129.diff
--
Reply to this email directly or view it on GitHub:
https://github.com/kamailio/kamailio/pull/4129
You are receiving this because you are subscribed to this thread.
Message ID: <kamailio/kamailio/pull/4129(a)github.com>
[View Less]