Merge tag 'upstream/5.7.6' into mr10.5

Upstream version 5.7.6
with Debian dir 1802789a35

Change-Id: Ibbd53daa2a516706e263b1e43f04f1635bf3089c
mr10.5.8
Victor Seva 2 years ago
commit 94a03fd828

@ -1,3 +1,263 @@
===================== 2024-07-02 Version 5.7.6 Released =====================
===================== Changes Since Version 5.7.5 ===========================
commit 18cc7c0ba02ee44c19e9a5c977360e14cf26b0d6
Author: Daniel-Constantin Mierla <miconda@gmail.com>
Date: Tue Jul 2 08:59:05 2024 +0200
Makefile.defs: version set to 5.7.6
commit 531077222387d30cb491c8af50db521fe3760da1
Author: Daniel-Constantin Mierla <miconda@gmail.com>
Date: Tue Jul 2 08:58:22 2024 +0200
pkg: deb specs updated for v5.7.6
commit 50787da0ff908a33ece6cf8a341bc5d7c244ad99
Author: Daniel-Constantin Mierla <miconda@gmail.com>
Date: Tue Jul 2 08:57:26 2024 +0200
pkg: version set to 5.7.6 for rpms and alpine specs
commit 4d1c41f2af5279f6ffbcba59f5b51e06989ba66d
Author: Kamailio Dev <kamailio.dev@kamailio.org>
Date: Mon Jul 1 10:01:27 2024 +0200
modules: readme files regenerated - modules ... [skip ci]
commit a9a337562d1b57afedb31d49764e03c7ebd85f31
Author: Daniel-Constantin Mierla <miconda@gmail.com>
Date: Thu Jun 27 10:07:11 2024 +0200
cnxcc: check if final pulse is 0
- avoid dividing with it in such case
- GH #3859
(cherry picked from commit 7061a79fe64066dd5a6598e38d714bd40bf2eabc)
(cherry picked from commit ca3d4b3515024732805038509dd0d9f0b60ab273)
commit 1bd30c65b74b30339841c57d2948ea7db9a40fe9
Author: Daniel-Constantin Mierla <miconda@gmail.com>
Date: Mon Jun 24 10:22:25 2024 +0200
core: removed duplicated break
(cherry picked from commit 588b9c710b6555371bc8bbee21e474466bb099dd)
(cherry picked from commit 4fa5fc10370d81d534d75b034322a6250c7e2557)
commit a0cef6e8689b66f7548fe56eaa79e692d5061e93
Author: Daniel-Constantin Mierla <miconda@gmail.com>
Date: Sat Jun 22 17:52:34 2024 +0200
textopsx: docs - note about @hf_value2 select
(cherry picked from commit d13c741d90c3887cdf144a9094a78c0c7cb9856d)
(cherry picked from commit 70cf3ebd2b52c341a90c9b9b6149985667a6b96c)
commit e017ae88c155c2bd60a9611bca676308695f3c75
Author: Dragos Vingarzan <vingarzan@gmail.com>
Date: Fri Jun 21 10:54:36 2024 +0200
textopx/doc: fixed hard-to-read documentation for textopsx
- was missing line-wraps in examples list, hence very hard to read
(cherry picked from commit 48d97c1941f660aa396b5ef100584611cf92ad21)
(cherry picked from commit 7bf787d00f9f7ed8a2d758219d6d1413b2b5c975)
commit eed224e4906b6691d07ea379727e2ed627c3e80f
Author: Dennis Yurasov <dennis-y@yandex-team.ru>
Date: Thu May 2 12:28:11 2024 +0300
siptrace: add SND_F_FORCE_SOCKET flag if send_sock_name/send_sock_address config parameters are used
- send_sock_name/send_sock_address is ineffective for tcp based transports if SND_F_FORCE_SOCKET flag is not set
(cherry picked from commit 1b97a0271b27794263b3eff61f4acfa81e66069f)
(cherry picked from commit 2606c4e07e598ea41cb5a8814e3587bf49f94c1e)
commit 8c4f102948a7a472c57c260bb2c49bc344a6222b
Author: Victor Seva <linuxmaniac@torreviejawireless.org>
Date: Wed Jun 12 10:13:56 2024 +0200
tls: remove confusing error message when trying to print socket for <default> server
> CRITICAL: <core> [core/ip_addr.c:232]: ip_addr2sbuf(): unknown address family 0
> NOTICE: tls [tls_domain.c:1176]: ksr_tls_fix_domain(): registered server_name callback handler for socket [:0], server_name='<default>' ...
(cherry picked from commit 87c8290ab934fd27f8baebabaf66d1fb4168ba72)
(cherry picked from commit be76a51422df3294c533accae1b6a621ee9d3a7d)
commit b1ffd5982329cda6d1e5da008703fe302402ee36
Author: Daniel-Constantin Mierla <miconda@gmail.com>
Date: Tue Jun 4 16:29:50 2024 +0200
dmq_usrloc: reformat exported structures
(cherry picked from commit e94812149c6f2867a5b23f1218a9af139590bf51)
(cherry picked from commit 5571ea0ff8877a8a19b3fb76030af19b59f141db)
commit a11e8ae3f8daae13ba6b162ab050bb7d8c8bd01b
Author: Xenofon Karamanos <22965395+xkaraman@users.noreply.github.com>
Date: Tue Jun 4 09:37:01 2024 +0000
nathelper: remove magic constant
(cherry picked from commit 3d187336f22e30800acefd28e4d0f98e0f677a49)
(cherry picked from commit e8dc8506dbc4d8964e02c3be175d7f18f5fe69a4)
commit 8d1f1843f04d9e1a6db983bf860c76f7a1ac4b40
Author: codenot <codenot@msn.com>
Date: Wed May 29 10:10:28 2024 +0800
nathelper: fixed handle_ruri_alias_mode(1) cannot proper handle multi alias
(cherry picked from commit 8e0b2e4b6450fa50bd573fa013dc888aaaccd2bf)
(cherry picked from commit eb4ec6f9305e334d9749e1fd56ad195c383cef77)
commit 22a28b0b0e7f66a8e73d92fcc5f014f722aa2d1f
Author: Xenofon Karamanos <22965395+xkaraman@users.noreply.github.com>
Date: Fri May 24 08:03:49 2024 +0000
core/resolve: Check dns_cache_init and choose appropriate functions
(cherry picked from commit 06d583e356351ae9d8a559c9f5de3e57fb128a38)
(cherry picked from commit 5999529be9ac2187dad465518bea3dee1b06d0f7)
commit d503c70bbc9790073424630ce842b1987cbe2a7c
Author: Daniel-Constantin Mierla <miconda@gmail.com>
Date: Wed May 29 10:18:44 2024 +0200
siputils: free head of params list for get_uri_param()
- GH #3857
(cherry picked from commit 8363208fff7c101a2779ff64783e5b7dbf8ffd7c)
(cherry picked from commit ebc8acef7617a69dcc06b163c47e88a99d835f9e)
commit 5da933f3888ab3981fa8ec4ad255a4e8f3770d2d
Author: Daniel-Constantin Mierla <miconda@gmail.com>
Date: Wed May 29 10:15:21 2024 +0200
siputils: free head of params list for get_uri_param()
- GH #3857
(cherry picked from commit d72a3fbc903da02ae3b26f3aae2ea228c9f8b255)
(cherry picked from commit 833b93563f43fa95e4bfdd175b144670b66a11cd)
commit 5da78f619c747edb674970b87426582b90c8bae3
Author: Daniel-Constantin Mierla <miconda@gmail.com>
Date: Tue May 28 11:45:37 2024 +0200
htable: error on not finding htable in pv get
(cherry picked from commit 24b27214231166366cceb88fcb3724298cc53b32)
(cherry picked from commit 7087ce6aa496de9b6015e5054d8fd70bf2e055b3)
commit 239153a860875aba578ba060241fcb419ad98276
Author: Daniel-Constantin Mierla <miconda@gmail.com>
Date: Mon May 27 09:11:48 2024 +0200
htable: error on not finding htable in pv set
(cherry picked from commit 82cfea317fd8d02a6c94347bc1be18c8a06e580f)
(cherry picked from commit 9a7e3e54f1c52ee69c68b1165de115894c2afc55)
commit 60335c8fb52b01b2fa6840d7f55ef87071f1d925
Author: Rick Barenthin <rick@ng-voice.com>
Date: Thu Apr 25 19:16:58 2024 +0200
usrloc: delete location_attrs in db_only mode on delete_urecord
When calling delete_urecord in DB_ONLY mode the location_attrs are not deleted.
This fix makes sure to delete location_attrs when calling db_delete_urecord is called.
(cherry picked from commit 6b8f6d3b5d563d91234b8d4b7e155b7e74b9d313)
(cherry picked from commit deb11ee814e1591698d120a113630aa7a9791ad7)
commit dfbfd307d80c9259f28f3df0874fb7a2c7f6a628
Author: Sergey Safarov <s.safarov@gmail.com>
Date: Sat May 11 17:45:08 2024 +0300
db_mysql: fixed build on CentOS 7
(cherry picked from commit 767b3faee3af450d6482b919c81431ea6d707807)
(cherry picked from commit d53843c75da9115a9c3cb6b1b909fd3827b6c437)
commit 6173af8d414de313b3ed8ced5e662e95022baf58
Author: Daniel-Constantin Mierla <miconda@gmail.com>
Date: Fri May 10 12:45:25 2024 +0200
sipcapture: use local static buffers for ip address and port
- GH #3835
(cherry picked from commit d1f377ff23f491bfd5162cb7bf510759440dd8e5)
(cherry picked from commit 5c4f687d0ed06d6c7a5696917982b1cf03f9c8bd)
commit f8fa74e7b2901ecae8bbb851250d8b28452b18da
Author: Daniel-Constantin Mierla <miconda@gmail.com>
Date: Wed Jun 12 16:21:34 2024 +0200
core: tcp - change log levels for failing to set source for tcp connections
- it is not possible always and it can fill the logs
(cherry picked from commit 15403a543d83e337ee578ad37dc1d84316e4cf16)
(cherry picked from commit 8a027b99cf8dc4f7e889aa7644f1f7699c7cb08e)
commit afa4e92bbdc30bc76f0a27f73ef8c57802be99bf
Author: Xenofon Karamanos <22965395+xkaraman@users.noreply.github.com>
Date: Mon Apr 29 13:37:24 2024 +0000
db_cluster: Update log levels
(cherry picked from commit 467dbf3e1be16d5a760178d0801834ac67bad888)
commit 4cce7e80b7b4e29a98da97a86ac2fc216cb01f4f
Author: Victor Seva <linuxmaniac@torreviejawireless.org>
Date: Wed May 8 15:47:11 2024 +0200
pkg/docker: update 5.7 [skip ci]
* pkg-config in build
commit b8d50a89d20a1b13b175358c875062d52350cef6
Author: Victor Seva <linuxmaniac@torreviejawireless.org>
Date: Wed May 8 15:41:45 2024 +0200
Revert "pkg/docker: update 5.7 [skip ci]"
This reverts commit e21f8667b18c978e90c978e74372b2fc1ad66574.
commit 2f9ecdae6d6b3b49f96e8df86631c23d22396d1f
Author: Victor Seva <linuxmaniac@torreviejawireless.org>
Date: Wed May 8 15:40:52 2024 +0200
Revert "pkg/kamailio/alpine: switch to pcre2 [skip ci]"
This reverts commit 4aeaf7f65744d7037b9dc4fb73f1f1b2266715cc.
commit 4aeaf7f65744d7037b9dc4fb73f1f1b2266715cc
Author: Victor Seva <linuxmaniac@torreviejawireless.org>
Date: Fri Oct 13 09:54:08 2023 +0200
pkg/kamailio/alpine: switch to pcre2 [skip ci]
(cherry picked from commit 7f4fdfa61444ab38b49b74829a40d9ec6d1e050a)
commit e21f8667b18c978e90c978e74372b2fc1ad66574
Author: Victor Seva <linuxmaniac@torreviejawireless.org>
Date: Wed May 8 14:31:26 2024 +0200
pkg/docker: update 5.7 [skip ci]
* missing pre2-dev
===================== 2024-05-08 Version 5.7.5 Released =====================
===================== Changes Since Version 5.7.4 ===========================

@ -4,7 +4,7 @@
# Maintainer: Nathan Angelacos <nangel@alpinelinux.org>
pkgname=kamailio
pkgver=5.7.5
pkgver=5.7.6
pkgrel=0
# If building from a git snapshot, specify the gitcommit

@ -1,3 +1,9 @@
kamailio (5.7.6) unstable; urgency=medium
* version set 5.7.6
-- Victor Seva <vseva@debian.org> Tue, 02 Jul 2024 08:57:57 +0200
kamailio (5.7.5) unstable; urgency=medium
* version set 5.7.5

@ -1,3 +1,9 @@
kamailio (5.7.6) unstable; urgency=medium
* version set 5.7.6
-- Victor Seva <vseva@debian.org> Tue, 02 Jul 2024 08:57:57 +0200
kamailio (5.7.5) unstable; urgency=medium
* version set 5.7.5

@ -1,3 +1,9 @@
kamailio (5.7.6) unstable; urgency=medium
* version set 5.7.6
-- Victor Seva <vseva@debian.org> Tue, 02 Jul 2024 08:57:57 +0200
kamailio (5.7.5) unstable; urgency=medium
* version set 5.7.5

@ -1,3 +1,9 @@
kamailio (5.7.6) unstable; urgency=medium
* version set 5.7.6
-- Victor Seva <vseva@debian.org> Tue, 02 Jul 2024 08:57:57 +0200
kamailio (5.7.5) unstable; urgency=medium
* version set 5.7.5

@ -1,3 +1,9 @@
kamailio (5.7.6) unstable; urgency=medium
* version set 5.7.6
-- Victor Seva <vseva@debian.org> Tue, 02 Jul 2024 08:57:57 +0200
kamailio (5.7.5) unstable; urgency=medium
* version set 5.7.5

@ -1,3 +1,9 @@
kamailio (5.7.6) unstable; urgency=medium
* version set 5.7.6
-- Victor Seva <vseva@debian.org> Tue, 02 Jul 2024 08:57:57 +0200
kamailio (5.7.5) unstable; urgency=medium
* version set 5.7.5

@ -1,3 +1,9 @@
kamailio (5.7.6) unstable; urgency=medium
* version set 5.7.6
-- Victor Seva <vseva@debian.org> Tue, 02 Jul 2024 08:57:57 +0200
kamailio (5.7.5) unstable; urgency=medium
* version set 5.7.5

@ -1,3 +1,9 @@
kamailio (5.7.6) unstable; urgency=medium
* version set 5.7.6
-- Victor Seva <vseva@debian.org> Tue, 02 Jul 2024 08:57:57 +0200
kamailio (5.7.5) unstable; urgency=medium
* version set 5.7.5

@ -1,3 +1,9 @@
kamailio (5.7.6) unstable; urgency=medium
* version set 5.7.6
-- Victor Seva <vseva@debian.org> Tue, 02 Jul 2024 08:57:57 +0200
kamailio (5.7.5) unstable; urgency=medium
* version set 5.7.5

@ -1,3 +1,9 @@
kamailio (5.7.6) unstable; urgency=medium
* version set 5.7.6
-- Victor Seva <vseva@debian.org> Tue, 02 Jul 2024 08:57:57 +0200
kamailio (5.7.5) unstable; urgency=medium
* version set 5.7.5

@ -1,3 +1,9 @@
kamailio (5.7.6) unstable; urgency=medium
* version set 5.7.6
-- Victor Seva <vseva@debian.org> Tue, 02 Jul 2024 08:57:57 +0200
kamailio (5.7.5) unstable; urgency=medium
* version set 5.7.5

@ -1,3 +1,9 @@
kamailio (5.7.6) unstable; urgency=medium
* version set 5.7.6
-- Victor Seva <vseva@debian.org> Tue, 02 Jul 2024 08:57:57 +0200
kamailio (5.7.5) unstable; urgency=medium
* version set 5.7.5

@ -1,3 +1,9 @@
kamailio (5.7.6) unstable; urgency=medium
* version set 5.7.6
-- Victor Seva <vseva@debian.org> Tue, 02 Jul 2024 08:57:57 +0200
kamailio (5.7.5) unstable; urgency=medium
* version set 5.7.5

@ -1,3 +1,9 @@
kamailio (5.7.6) unstable; urgency=medium
* version set 5.7.6
-- Victor Seva <vseva@debian.org> Tue, 02 Jul 2024 08:57:57 +0200
kamailio (5.7.5) unstable; urgency=medium
* version set 5.7.5

@ -1,5 +1,5 @@
%define name kamailio
%define ver 5.7.5
%define ver 5.7.6
%define rel dev1.0%{dist}
%if 0%{?fedora}

@ -106,7 +106,7 @@ INSTALL_FLAVOUR=$(FLAVOUR)
# version number
VERSION = 5
PATCHLEVEL = 7
SUBLEVEL = 5
SUBLEVEL = 6
EXTRAVERSION =
# memory manager switcher

@ -0,0 +1,7 @@
/* this file is autogenerated by make core/autover.h
* DO NOT EDIT IT
*/
#define REPO_VER "c718a7"
#define REPO_HASH "c718a7"
#define REPO_STATE ""

@ -1623,7 +1623,11 @@ struct hostent *no_naptr_srv_sip_resolvehost(
srv_name.s = tmp_srv;
srv_name.len = strlen(tmp_srv);
#ifdef USE_DNS_CACHE
if(dns_cache_init) {
he = dns_srv_get_he(&srv_name, port, dns_flags);
} else {
he = srv_sip_resolvehost(&srv_name, 0, port, proto, 1, 0);
}
#else
he = srv_sip_resolvehost(&srv_name, 0, port, proto, 1, 0);
#endif
@ -1660,6 +1664,7 @@ struct hostent *naptr_sip_resolvehost(
struct rdata *naptr_head;
char n_proto;
str srv_name;
str *name_copy = 0;
naptr_bmp_t tried_bmp; /* tried bitmap */
char origproto = PROTO_NONE;
@ -1704,7 +1709,15 @@ struct hostent *naptr_sip_resolvehost(
he = no_naptr_srv_sip_resolvehost(name, port, proto);
/* fallback all the way down to A/AAAA */
if(he == 0) {
if(dns_cache_init) {
he = dns_get_he(name, dns_flags);
} else {
/* We need a zero terminated char* */
name_copy = shm_malloc(name->len + 1);
shm_str_dup(name_copy, name);
he = resolvehost(name_copy->s);
shm_free(name_copy);
}
}
end:
if(naptr_head)
@ -1833,6 +1846,45 @@ ip_addr_t *str2ip(str *st)
return ipb;
}
/*
* Resolve a host name to a hostent.
* @param[in] name: the host name to resolve
* @return the hostent structure or NULL on error
*
* @note
* This function is a wrapper to choose between the DNS cache and the
* system resolver. If the DNS cache is enabled, it will use the DNS cache
* to resolve the host name. Otherwise, it will use the system resolver.
*/
struct hostent *__resolvehost(char *name)
{
if(dns_cache_init) {
return dns_resolvehost(name);
} else {
return _resolvehost(name);
}
}
/*
* Resolve a host name to a hostent.
* @param[in] name: the host name to resolve
* @param[in] port: the port number
* @param[in] proto: the protocol
* @return the hostent structure or NULL on error
*
* @note
* This function is a wrapper to choose between the DNS cache and the
* system resolver. If the DNS cache is enabled, it will use the DNS cache
* to resolve the host name. Otherwise, it will use the system resolver.
*/
struct hostent *__sip_resolvehost(str *name, unsigned short *port, char *proto)
{
if(dns_cache_init) {
return dns_sip_resolvehost(name, port, proto);
} else {
return _sip_resolvehost(name, port, proto);
}
}
/* converts a str to an ipv6 address struct stored in ipb
* - ipb must be already allocated
* - return 0 on success; <0 on failure */

@ -329,14 +329,14 @@ int sip_hostport2su(
union sockaddr_union *su, str *host, unsigned short port, char *proto);
/* Wrapper functions that check for dns_cache_init */
struct hostent *__resolvehost(char *name);
struct hostent *__sip_resolvehost(str *name, unsigned short *port, char *proto);
/* wrappers */
#ifdef USE_DNS_CACHE
#define resolvehost dns_resolvehost
#define sip_resolvehost dns_sip_resolvehost
#else
#define resolvehost _resolvehost
#define sip_resolvehost _sip_resolvehost
#endif
#define resolvehost __resolvehost
#define sip_resolvehost __sip_resolvehost
#ifdef USE_NAPTR

@ -335,7 +335,6 @@ int resolve_select(select_t *s)
default:
BUG("Unable to resolve select at level %d\n", param_idx);
break;
break;
}
goto not_found;

@ -1284,7 +1284,7 @@ inline static int find_listening_sock_info(
if(setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (void *)&optval,
sizeof(optval))
== -1) {
LM_ERR("setsockopt SO_REUSEADDR %s\n", strerror(errno));
LM_NOTICE("setsockopt SO_REUSEADDR [%s]\n", strerror(errno));
/* continue, not critical */
}
#endif
@ -1293,19 +1293,19 @@ inline static int find_listening_sock_info(
if(setsockopt(s, SOL_SOCKET, SO_REUSEPORT, (void *)&optval,
sizeof(optval))
== -1) {
LM_ERR("setsockopt SO_REUSEPORT %s\n", strerror(errno));
LM_NOTICE("setsockopt SO_REUSEPORT [%s]\n", strerror(errno));
/* continue, not critical */
}
#endif
if(unlikely(bind(s, &si->su.s, sockaddru_len(si->su)) != 0)) {
LM_WARN("binding to source address %s failed: %s [%d]\n",
LM_DBG("binding to source address %s failed: [%s] [%d]\n",
su2a(&si->su, sizeof(si->su)), strerror(errno), errno);
return -1;
}
}
} else {
if(unlikely(bind(s, &(*from)->s, sockaddru_len(**from)) != 0)) {
LM_WARN("binding to source address %s failed: %s [%d]\n",
LM_DBG("binding to source address %s failed: [%s] [%d]\n",
su2a(&si->su, sizeof(si->su)), strerror(errno), errno);
return -1;
}

@ -62,6 +62,13 @@ void check_calls_by_money(unsigned int ticks, void *param)
if(!call->confirmed)
continue;
if(call->money_based.final_pulse == 0) {
LM_WARN("CID [%.*s] - final pulse is 0 - skipping\n",
call->sip_data.callid.len,
call->sip_data.callid.s);
continue;
}
consumed_time =
get_current_timestamp() - call->start_timestamp;

@ -72,9 +72,12 @@ extern int dbcl_max_query_length;
cls->usedcon = cls->rlist[i].clist[j]; \
return 0; \
} else { \
LM_DBG("serial operation - failure on cluster" \
" [%.*s] (%d/%d)\n", \
cls->name.len, cls->name.s, i, j); \
LM_WARN("serial operation - failure on " \
"cluster" \
" [%.*s] (%d/%d) [%.*s]\n", \
cls->name.len, cls->name.s, i, j, \
cls->rlist[i].clist[j]->name.len, \
cls->rlist[i].clist[j]->name.s); \
sec = get_ticks() - sec; \
if(sec >= dbcl_max_query_length) { \
dbcl_inactive_con(cls->rlist[i].clist[j]); \
@ -106,10 +109,12 @@ extern int dbcl_max_query_length;
(j + 1) % cls->rlist[i].clen; \
return 0; \
} else { \
LM_DBG("round robin operation - failure on " \
LM_WARN("round robin operation - failure on " \
"cluster" \
" [%.*s] (%d/%d)\n", \
cls->name.len, cls->name.s, i, j); \
" [%.*s] (%d/%d) [%.*s]\n", \
cls->name.len, cls->name.s, i, j, \
cls->rlist[i].clist[j]->name.len, \
cls->rlist[i].clist[j]->name.s); \
sec = get_ticks() - sec; \
if(sec >= dbcl_max_query_length) { \
dbcl_inactive_con(cls->rlist[i].clist[j]); \
@ -124,7 +129,7 @@ extern int dbcl_max_query_length;
return -1; \
} \
} \
LM_DBG("no successful read on cluster [%.*s]\n", cls->name.len, \
LM_ERR("no successful read on cluster [%.*s]\n", cls->name.len, \
cls->name.s); \
return ret; \
} while(0)
@ -167,9 +172,12 @@ extern int dbcl_max_query_length;
cls->usedcon = cls->wlist[i].clist[j]; \
return 0; \
} else { \
LM_DBG("serial operation - failure on cluster" \
" [%.*s] (%d/%d)\n", \
cls->name.len, cls->name.s, i, j); \
LM_WARN("serial operation - failure on " \
"cluster" \
" [%.*s] (%d/%d) [%.*s]\n", \
cls->name.len, cls->name.s, i, j, \
cls->rlist[i].clist[j]->name.len, \
cls->rlist[i].clist[j]->name.s); \
sec = get_ticks() - sec; \
if(sec >= dbcl_max_query_length) { \
dbcl_inactive_con(cls->wlist[i].clist[j]); \
@ -201,10 +209,12 @@ extern int dbcl_max_query_length;
(j + 1) % cls->wlist[i].clen; \
return 0; \
} else { \
LM_DBG("round robin operation - failure on " \
LM_WARN("round robin operation - failure on " \
"cluster" \
" [%.*s] (%d/%d)\n", \
cls->name.len, cls->name.s, i, j); \
" [%.*s] (%d/%d) [%.*s]\n", \
cls->name.len, cls->name.s, i, j, \
cls->rlist[i].clist[j]->name.len, \
cls->rlist[i].clist[j]->name.s); \
sec = get_ticks() - sec; \
if(sec >= dbcl_max_query_length) { \
dbcl_inactive_con(cls->wlist[i].clist[j]); \
@ -232,10 +242,12 @@ extern int dbcl_max_query_length;
cls->usedcon = cls->wlist[i].clist[j]; \
rok = 1; \
} else { \
LM_DBG("parallel operation - failure on " \
LM_WARN("parallel operation - failure on " \
"cluster" \
" [%.*s] (%d/%d)\n", \
cls->name.len, cls->name.s, i, j); \
" [%.*s] (%d/%d) [%.*s]\n", \
cls->name.len, cls->name.s, i, j, \
cls->rlist[i].clist[j]->name.len, \
cls->rlist[i].clist[j]->name.s); \
sec = get_ticks() - sec; \
if(sec >= dbcl_max_query_length) { \
dbcl_inactive_con(cls->wlist[i].clist[j]); \
@ -253,7 +265,7 @@ extern int dbcl_max_query_length;
return -1; \
} \
} \
LM_DBG("no successful write on cluster [%.*s]\n", cls->name.len, \
LM_ERR("no successful write on cluster [%.*s]\n", cls->name.len, \
cls->name.s); \
return ret; \
} while(0)
@ -303,9 +315,12 @@ extern int dbcl_max_query_length;
cls->usedcon = cls->wlist[i].clist[j]; \
return 0; \
} else { \
LM_DBG("serial operation - failure on cluster" \
" [%.*s] (%d/%d)\n", \
cls->name.len, cls->name.s, i, j); \
LM_WARN("serial operation - failure on " \
"cluster" \
" [%.*s] (%d/%d) [%.*s]\n", \
cls->name.len, cls->name.s, i, j, \
cls->rlist[i].clist[j]->name.len, \
cls->rlist[i].clist[j]->name.s); \
sec = get_ticks() - sec; \
if(sec >= dbcl_max_query_length) { \
dbcl_inactive_con(cls->wlist[i].clist[j]); \
@ -343,10 +358,12 @@ extern int dbcl_max_query_length;
(j + 1) % cls->wlist[i].clen; \
return 0; \
} else { \
LM_DBG("round robin operation - failure on " \
LM_WARN("round robin operation - failure on " \
"cluster" \
" [%.*s] (%d/%d)\n", \
cls->name.len, cls->name.s, i, j); \
" [%.*s] (%d/%d) [%.*s]\n", \
cls->name.len, cls->name.s, i, j, \
cls->rlist[i].clist[j]->name.len, \
cls->rlist[i].clist[j]->name.s); \
sec = get_ticks() - sec; \
if(sec >= dbcl_max_query_length) { \
dbcl_inactive_con(cls->wlist[i].clist[j]); \
@ -380,10 +397,12 @@ extern int dbcl_max_query_length;
cls->usedcon = cls->wlist[i].clist[j]; \
rok = 1; \
} else { \
LM_DBG("parallel operation - failure on " \
LM_WARN("parallel operation - failure on " \
"cluster" \
" [%.*s] (%d/%d)\n", \
cls->name.len, cls->name.s, i, j); \
" [%.*s] (%d/%d) [%.*s]\n", \
cls->name.len, cls->name.s, i, j, \
cls->rlist[i].clist[j]->name.len, \
cls->rlist[i].clist[j]->name.s); \
sec = get_ticks() - sec; \
if(sec >= dbcl_max_query_length) { \
dbcl_inactive_con(cls->wlist[i].clist[j]); \
@ -401,7 +420,7 @@ extern int dbcl_max_query_length;
return -1; \
} \
} \
LM_DBG("no successful write on cluster [%.*s]\n", cls->name.len, \
LM_ERR("no successful write on cluster [%.*s]\n", cls->name.len, \
cls->name.s); \
return ret; \
} while(0)

@ -168,9 +168,16 @@ struct my_con *db_mysql_new_connection(const struct db_id *id)
}
#endif /* MYSQL_VERSION_ID */
#endif /* MARIADB_BASE_VERSION */
#ifdef MYSQL_OPT_SSL_CA
if(db_mysql_opt_ssl_ca)
mysql_options(
ptr->con, MYSQL_OPT_SSL_CA, (const void *)db_mysql_opt_ssl_ca);
#else
LM_WARN("opt_ssl_ca option not supported by mysql version (value %s) - "
"ignoring\n",
db_mysql_opt_ssl_ca);
#endif /* MYSQL_OPT_SSL_CA */
#if MYSQL_VERSION_ID > 50012
/* set reconnect flag if enabled */

@ -48,16 +48,19 @@ usrloc_api_t dmq_ul;
MODULE_VERSION
static param_export_t params[] = {{"enable", INT_PARAM, &dmq_usrloc_enable},
/* clang-format off */
static param_export_t params[] = {
{"enable", INT_PARAM, &dmq_usrloc_enable},
{"sync", INT_PARAM, &_dmq_usrloc_sync},
{"replicate_socket_info", INT_PARAM,
&_dmq_usrloc_replicate_socket_info},
{"replicate_socket_info", INT_PARAM, &_dmq_usrloc_replicate_socket_info},
{"batch_msg_contacts", INT_PARAM, &_dmq_usrloc_batch_msg_contacts},
{"batch_msg_size", INT_PARAM, &_dmq_usrloc_batch_msg_size},
{"batch_size", INT_PARAM, &_dmq_usrloc_batch_size},
{"batch_usleep", INT_PARAM, &_dmq_usrloc_batch_usleep},
{"usrloc_domain", PARAM_STR, &_dmq_usrloc_domain},
{"usrloc_delete", INT_PARAM, &_dmq_usrloc_delete}, {0, 0, 0}};
{"usrloc_delete", INT_PARAM, &_dmq_usrloc_delete},
{0, 0, 0}
};
struct module_exports exports = {
"dmq_usrloc", /* module name */
@ -71,6 +74,7 @@ struct module_exports exports = {
child_init, /* per-child init function */
0 /* module destroy function */
};
/* clang-format on */
static int mod_init(void)

@ -37,9 +37,12 @@ int pv_get_ht_cell(struct sip_msg *msg, pv_param_t *param, pv_value_t *res)
if(hpv->ht == NULL) {
hpv->ht = ht_get_table(&hpv->htname);
if(hpv->ht == NULL)
if(hpv->ht == NULL) {
LM_ERR("htable not found for getting $sht(%.*s=>%.*s)\n",
hpv->htname.len, hpv->htname.s, htname.len, htname.s);
return pv_get_null(msg, param, res);
}
}
if(pv_printf_s(msg, hpv->pve, &htname) != 0) {
LM_ERR("cannot get $sht name\n");
return -1;
@ -73,8 +76,11 @@ int pv_set_ht_cell(
if(hpv->ht == NULL)
hpv->ht = ht_get_table(&hpv->htname);
if(hpv->ht == NULL)
if(hpv->ht == NULL) {
LM_ERR("htable not found for setting $sht(%.*s=>%.*s)\n",
hpv->htname.len, hpv->htname.s, htname.len, htname.s);
return -1;
}
if(pv_printf_s(msg, hpv->pve, &htname) != 0) {
LM_ERR("cannot get $sht name\n");

@ -1153,15 +1153,13 @@ static int ki_handle_ruri_alias_mode(struct sip_msg *msg, int mode)
}
start = NULL;
/* locate last alias parameter */
while(rest_len > _ksr_contact_alias.len + 4) {
while(rest_len > _ksr_contact_alias.len) {
if(strncmp(rest, _ksr_contact_alias.s, _ksr_contact_alias.len) == 0) {
start = rest;
if(mode == 0) {
/* use first alias parameter */
break;
}
rest = rest + _ksr_contact_alias.len;
rest_len = rest_len - _ksr_contact_alias.len;
}
sep = memchr(rest, 59 /* ; */, rest_len);
if(sep == NULL) {

@ -264,6 +264,8 @@ int parsing_hepv3_message(char *buf, unsigned int len)
int totelem = 0;
int chunk_vendor = 0, chunk_type = 0, chunk_length = 0;
int total_length = 0;
static char ipbuf1[IP_ADDR_MAX_STR_SIZE];
static char portbuf1[INT2STR_MAX_LEN];
hg = (struct hep_generic_recv *)pkg_malloc(sizeof(struct hep_generic_recv));
@ -484,13 +486,14 @@ int parsing_hepv3_message(char *buf, unsigned int len)
si->flags = 0;
si->addr_info_lst = 0;
si->address_str.s = ip_addr2a(&si->address);
si->address_str.len =
ip_addr2sbuf(&si->address, ipbuf1, sizeof(ipbuf1) - 1);
ipbuf1[si->address_str.len] = 0;
si->address_str.s = ipbuf1;
si->address_str.len = strlen(si->address_str.s);
si->port_no_str.s = int2str(si->port_no, &tmp_len);
si->port_no_str.s =
int2strbuf(si->port_no, portbuf1, INT2STR_MAX_LEN, &tmp_len);
si->port_no_str.len = tmp_len;
si->address_str.len = strlen(si->address_str.s);
si->name.len = si->address_str.len;
si->name.s = si->address_str.s;

@ -355,6 +355,8 @@ int trace_send_duplicate(char *buf, int len, dest_info_t *dst2)
pdst->to.s.sa_family, pdst->proto);
goto error;
}
} else {
pdst->send_flags.f |= SND_F_FORCE_SOCKET;
}
if(msg_send_buffer(pdst, buf, len, 1) < 0) {

@ -938,6 +938,7 @@ int get_uri_param(struct sip_msg *_msg, char *_param, char *_value)
pv_value_t val;
param_hooks_t hooks;
param_t *plist = NULL;
param_t *params;
param = (str *)_param;
@ -950,11 +951,12 @@ int get_uri_param(struct sip_msg *_msg, char *_param, char *_value)
t = _msg->parsed_uri.params;
if(parse_params(&t, CLASS_ANY, &hooks, &params) < 0) {
if(parse_params(&t, CLASS_ANY, &hooks, &plist) < 0) {
LM_ERR("ruri parameter parsing failed\n");
return -1;
}
params = plist;
while(params) {
if((params->name.len == param->len)
&& (strncmp(params->name.s, param->s, param->len) == 0)) {
@ -969,11 +971,11 @@ int get_uri_param(struct sip_msg *_msg, char *_param, char *_value)
}
}
free_params(params);
free_params(plist);
return -1;
found:
free_params(params);
free_params(plist);
return 1;
}

@ -731,27 +731,38 @@ bl_iterator_end("b1");
3.1. @hf_value
Get value of required header-value or param. Note that functions called
'value2' works with Authorization-like headers where comma is not
treated as value delimiter. Formats: @hf_value.HFNAME[IDX] # idx value,
negative value counts from bottom @hf_value.HFNAME.PARAM_NAME
@hf_value.HFNAME[IDX].PARAM_NAME @hf_value.HFNAME.p.PARAM_NAME # or
.param., useful if required called "uri", "p", "param"
@hf_value.HFNAME[IDX].p.PARAM_NAME # dtto @hf_value.HFNAME[IDX].uri #
(< & > excluded) @hf_value.HFNAME[*] # return comma delimited list of
all values (combines headers) @hf_value.HFNAME # the same as above [*]
but may be parsed by cfg.y @hf_value.HFNAME[*].uri # return comma
delimited list of uris (< & > excluded) @hf_value.HFNAME.uri # the same
as above [*] but may be parsed by cfg.y @hf_value.HFNAME[IDX].name #
returns name part, quotes excluded @hf_value.HFNAME.name # returns name
part of the first value @hf_value2.HFNAME # returns value of first
header @hf_value2.HFNAME[IDX] # returns value of idx's header
@hf_value2.HFNAME.PARAM_NAME @hf_value2.HFNAME[IDX].PARAM_NAME
@hf_value.HFNAME[IDX].uri # return URI, quotes excluded
@hf_value.HFNAME.p.uri # returns param named uri, not URI itself
@hf_value.HFNAME.p.name # returns param named name, not name itself
@hf_value.HFNAME[IDX].uri.name # any sel_any_uri nested features may be
used @hf_value.HFNAME[IDX].nameaddr.name # select_any_nameaddr
Get value of required header-value or param. Note that selects called
'hf_value2' work with Authorization-like headers where comma is not
treated as value delimiter.
Formats:
* @hf_value.HFNAME[IDX] # idx value, negative value counts from
bottom
* @hf_value.HFNAME.PARAM_NAME
* @hf_value.HFNAME[IDX].PARAM_NAME
* @hf_value.HFNAME.p.PARAM_NAME # or .param., useful if required
called "uri", "p", "param"
* @hf_value.HFNAME[IDX].p.PARAM_NAME # dtto
* @hf_value.HFNAME[IDX].uri # (< & > excluded)
* @hf_value.HFNAME[*] # return comma delimited list of all values
(combines headers)
* @hf_value.HFNAME # the same as above [*] but may be parsed by cfg.y
* @hf_value.HFNAME[*].uri # return comma delimited list of uris (< &
> excluded)
* @hf_value.HFNAME.uri # the same as above [*] but may be parsed by
cfg.y
* @hf_value.HFNAME[IDX].name # returns name part, quotes excluded
* @hf_value.HFNAME.name # returns name part of the first value
* @hf_value2.HFNAME # returns value of first header
* @hf_value2.HFNAME[IDX] # returns value of idx's header
* @hf_value2.HFNAME.PARAM_NAME
* @hf_value2.HFNAME[IDX].PARAM_NAME
* @hf_value.HFNAME[IDX].uri # return URI, quotes excluded
* @hf_value.HFNAME.p.uri # returns param named uri, not URI itself
* @hf_value.HFNAME.p.name # returns param named name, not name itself
* @hf_value.HFNAME[IDX].uri.name # any sel_any_uri nested features
may be used
* @hf_value.HFNAME[IDX].nameaddr.name # select_any_nameaddr
Meaning of the parameters is as follows:
* HFNAME - Header field name. Underscores are treated as dashes.
@ -772,7 +783,9 @@ $prt = @hf_value2.authorization.integrity_protected;
3.2. @hf_value2
TBA.
Similar to selects called 'hf_value', but work with Authorization-like
headers where comma is treated as attribute delimiter instead of header
value delimiter.
3.3. @hf_value_exists

@ -8,31 +8,36 @@
<section id="textopsx.sel.hf_value">
<title>@hf_value</title>
<para>
Get value of required header-value or param. Note that functions called 'value2'
works with Authorization-like headers where comma is not treated as value delimiter. Formats:
@hf_value.HFNAME[IDX] # idx value, negative value counts from bottom
@hf_value.HFNAME.PARAM_NAME
@hf_value.HFNAME[IDX].PARAM_NAME
@hf_value.HFNAME.p.PARAM_NAME # or .param., useful if required called "uri", "p", "param"
@hf_value.HFNAME[IDX].p.PARAM_NAME # dtto
@hf_value.HFNAME[IDX].uri # (&lt; &amp; &gt; excluded)
@hf_value.HFNAME[*] # return comma delimited list of all values (combines headers)
@hf_value.HFNAME # the same as above [*] but may be parsed by cfg.y
@hf_value.HFNAME[*].uri # return comma delimited list of uris (&lt; &amp; &gt; excluded)
@hf_value.HFNAME.uri # the same as above [*] but may be parsed by cfg.y
@hf_value.HFNAME[IDX].name # returns name part, quotes excluded
@hf_value.HFNAME.name # returns name part of the first value
Get value of required header-value or param. Note that selects called 'hf_value2'
work with Authorization-like headers where comma is not treated as value delimiter.
</para>
<para>
Formats:
<itemizedlist>
<listitem>@hf_value.HFNAME[IDX] # idx value, negative value counts from bottom</listitem>
<listitem>@hf_value.HFNAME.PARAM_NAME</listitem>
<listitem>@hf_value.HFNAME[IDX].PARAM_NAME</listitem>
<listitem>@hf_value.HFNAME.p.PARAM_NAME # or .param., useful if required called "uri", "p", "param"</listitem>
<listitem>@hf_value.HFNAME[IDX].p.PARAM_NAME # dtto</listitem>
<listitem>@hf_value.HFNAME[IDX].uri # (&lt; &amp; &gt; excluded)</listitem>
<listitem>@hf_value.HFNAME[*] # return comma delimited list of all values (combines headers)</listitem>
<listitem>@hf_value.HFNAME # the same as above [*] but may be parsed by cfg.y</listitem>
<listitem>@hf_value.HFNAME[*].uri # return comma delimited list of uris (&lt; &amp; &gt; excluded)</listitem>
<listitem>@hf_value.HFNAME.uri # the same as above [*] but may be parsed by cfg.y</listitem>
<listitem>@hf_value.HFNAME[IDX].name # returns name part, quotes excluded</listitem>
<listitem>@hf_value.HFNAME.name # returns name part of the first value</listitem>
@hf_value2.HFNAME # returns value of first header
@hf_value2.HFNAME[IDX] # returns value of idx's header
@hf_value2.HFNAME.PARAM_NAME
@hf_value2.HFNAME[IDX].PARAM_NAME
<listitem>@hf_value2.HFNAME # returns value of first header</listitem>
<listitem>@hf_value2.HFNAME[IDX] # returns value of idx's header</listitem>
<listitem>@hf_value2.HFNAME.PARAM_NAME</listitem>
<listitem>@hf_value2.HFNAME[IDX].PARAM_NAME</listitem>
@hf_value.HFNAME[IDX].uri # return URI, quotes excluded
@hf_value.HFNAME.p.uri # returns param named uri, not URI itself
@hf_value.HFNAME.p.name # returns param named name, not name itself
@hf_value.HFNAME[IDX].uri.name # any sel_any_uri nested features may be used
@hf_value.HFNAME[IDX].nameaddr.name # select_any_nameaddr
<listitem>@hf_value.HFNAME[IDX].uri # return URI, quotes excluded</listitem>
<listitem>@hf_value.HFNAME.p.uri # returns param named uri, not URI itself</listitem>
<listitem>@hf_value.HFNAME.p.name # returns param named name, not name itself</listitem>
<listitem>@hf_value.HFNAME[IDX].uri.name # any sel_any_uri nested features may be used</listitem>
<listitem>@hf_value.HFNAME[IDX].nameaddr.name # select_any_nameaddr</listitem>
</itemizedlist>
</para>
<para>Meaning of the parameters is as follows:</para>
<itemizedlist>
@ -68,7 +73,9 @@ $prt = @hf_value2.authorization.integrity_protected;
<section id="textopsx.sel.hf_value2">
<title>@hf_value2</title>
<para>
TBA.
Similar to selects called 'hf_value', but work with Authorization-like
headers where comma is treated as attribute delimiter instead of header
value delimiter.
</para>
</section>
<section id="textopsx.sel.hf_value_exists">

@ -1155,14 +1155,14 @@ static int ksr_tls_fix_domain(tls_domain_t *d, tls_domain_t *def)
d->ctx[i], tls_server_name_cb)) {
LM_ERR("register server_name callback handler for socket "
"[%s:%d], server_name='%s' failed for proc %d\n",
ip_addr2a(&d->ip), d->port,
(d->ip.af > 0) ? ip_addr2a(&d->ip) : "0.0.0.0", d->port,
(d->server_name.s) ? d->server_name.s : "<default>", i);
return -1;
}
if(!SSL_CTX_set_tlsext_servername_arg(d->ctx[i], d)) {
LM_ERR("register server_name callback handler data for socket "
"[%s:%d], server_name='%s' failed for proc %d\n",
ip_addr2a(&d->ip), d->port,
(d->ip.af > 0) ? ip_addr2a(&d->ip) : "0.0.0.0", d->port,
(d->server_name.s) ? d->server_name.s : "<default>", i);
return -1;
}
@ -1175,7 +1175,7 @@ static int ksr_tls_fix_domain(tls_domain_t *d, tls_domain_t *def)
&& (d->server_name.len > 0 || (d->type & TLS_DOMAIN_DEF))) {
LM_NOTICE("registered server_name callback handler for socket "
"[%s:%d], server_name='%s' ...\n",
ip_addr2a(&d->ip), d->port,
(d->ip.af > 0) ? ip_addr2a(&d->ip) : "0.0.0.0", d->port,
(d->server_name.s) ? d->server_name.s : "<default>");
}
#endif

@ -1755,9 +1755,11 @@ int uldb_delete_attrs(str *_dname, str *_user, str *_domain, str *_ruid)
str tname;
db_key_t keys[3];
db_val_t vals[3];
int n = 0;
if(ul_db_ops_ruid == 1)
if(ul_db_ops_ruid == 1 && _ruid) {
return uldb_delete_attrs_ruid(_dname, _ruid);
}
LM_DBG("trying to delete location attributes\n");
@ -1776,22 +1778,26 @@ int uldb_delete_attrs(str *_dname, str *_user, str *_domain, str *_ruid)
tname.s = tname_buf;
tname.len = _dname->len + 6;
keys[0] = &ulattrs_user_col;
keys[1] = &ulattrs_ruid_col;
keys[2] = &ulattrs_domain_col;
vals[0].type = DB1_STR;
vals[0].nul = 0;
vals[0].val.str_val = *_user;
keys[n] = &ulattrs_user_col;
vals[n].type = DB1_STR;
vals[n].nul = 0;
vals[n].val.str_val = *_user;
n++;
vals[1].type = DB1_STR;
vals[1].nul = 0;
vals[1].val.str_val = *_ruid;
if(_ruid) {
keys[n] = &ulattrs_ruid_col;
vals[n].type = DB1_STR;
vals[n].nul = 0;
vals[n].val.str_val = *_ruid;
n++;
}
if(ul_use_domain) {
vals[2].type = DB1_STR;
vals[2].nul = 0;
vals[2].val.str_val = *_domain;
keys[n] = &ulattrs_domain_col;
vals[n].type = DB1_STR;
vals[n].nul = 0;
vals[n].val.str_val = *_domain;
n++;
}
if(ul_dbf.use_table(ul_dbh, &tname) < 0) {
@ -1799,7 +1805,7 @@ int uldb_delete_attrs(str *_dname, str *_user, str *_domain, str *_ruid)
return -1;
}
if(ul_dbf.delete(ul_dbh, keys, 0, vals, (ul_use_domain) ? (3) : (2)) < 0) {
if(ul_dbf.delete(ul_dbh, keys, 0, vals, n) < 0) {
LM_ERR("deleting from database failed\n");
return -1;
}

@ -502,6 +502,10 @@ int db_delete_urecord(urecord_t *_r)
vals[1].val.str_val.s = dom + 1;
vals[1].val.str_val.len = _r->aor.s + _r->aor.len - dom - 1;
}
uldb_delete_attrs(
_r->domain, &vals[0].val.str_val, &vals[1].val.str_val, NULL);
} else {
uldb_delete_attrs(_r->domain, &vals[0].val.str_val, NULL, NULL);
}
if(ul_dbf.use_table(ul_dbh, _r->domain) < 0) {

Loading…
Cancel
Save