kamailio: Kamailio 6.0.1 893/head
authorPaul Donald <[email protected]>
Wed, 2 Apr 2025 21:09:47 +0000 (23:09 +0200)
committerPaul Donald <[email protected]>
Fri, 4 Apr 2025 18:37:56 +0000 (20:37 +0200)
Dropped patches 010-033 and 100. No longer required (integrated at
source).

New modules:
-ims_qos_npn
-nghttp2
-presence_dfks
-pvtpl
-topos_htable

Archived modules 5.6.x-> 5.8.x:
-app_sqlang
-auth_identity

Archived modules 5.8.x-> 6.0.x:
-app_lua_sr

Kamailio libs now merged into core (and are no longer external):
-libkamailio_ims
-lib{srdb1,srdb2}
-libtrie

Changed source URL to github (faster).

Signed-off-by: Paul Donald <[email protected]>
13 files changed:
net/kamailio/Makefile
net/kamailio/patches/010-dialplan-clang-format-for-coherent-indentation-and-c.patch [deleted file]
net/kamailio/patches/011-dialplan-migrate-to-pcre2.patch [deleted file]
net/kamailio/patches/020-lcr-clang-format-for-coherent-indentation-and-coding.patch [deleted file]
net/kamailio/patches/021-lcr-typos.patch [deleted file]
net/kamailio/patches/022-lcr-pcre2-migration.patch [deleted file]
net/kamailio/patches/030-regex-clang-format-for-coherent-indentation-and-codi.patch [deleted file]
net/kamailio/patches/031-regex-typos.patch [deleted file]
net/kamailio/patches/032-regex-convert-to-memory-error-logging-helper.patch [deleted file]
net/kamailio/patches/033-regex-migration-to-pcre2.patch [deleted file]
net/kamailio/patches/050-fix-kamailio-utils.patch
net/kamailio/patches/100-kamcmd-don-t-clash-with-ENV-NAME-or-ctl.so-module.patch [deleted file]
net/kamailio/patches/120-libevent-libs.patch

index 070f7b709a3173b7974d7cad1f3e9addd79a3eb1..2e6a0966326f86903a29de759d10a38e96426659 100644 (file)
@@ -9,12 +9,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=kamailio
-PKG_VERSION:=5.7.2
-PKG_RELEASE:=2
+PKG_VERSION:=6.0.1
+PKG_RELEASE:=1
 
-PKG_SOURCE_URL:=https://www.kamailio.org/pub/kamailio/$(PKG_VERSION)/src
-PKG_SOURCE:=kamailio-$(PKG_VERSION)_src.tar.gz
-PKG_HASH:=72c9a067da8d6fa920d3737d98cd7f66c321f80cbe1076e2d5a392b422503122
+PKG_SOURCE_URL:=https://github.com/kamailio/kamailio/archive/refs/tags/
+PKG_SOURCE:=$(PKG_VERSION).tar.gz
+PKG_HASH:=3d7a91fd52d04f09d814fd34eda6443c559adace4248eb6ae71c949e3e3f9f29
 PKG_BUILD_FLAGS:=no-mips16
 
 PKG_LICENSE:=GPL-2.0+
@@ -32,16 +32,13 @@ MODULES_AVAILABLE:= \
        alias_db \
        app_jsdt \
        app_lua \
-       app_lua_sr \
        app_python3 \
        app_ruby \
-       app_sqlang \
        async \
        auth \
        auth_db \
        auth_diameter \
        auth_ephemeral \
-       auth_identity \
        auth_xkeys \
        avp \
        avpops \
@@ -104,6 +101,7 @@ MODULES_AVAILABLE:= \
        ims_isc \
        ims_ocs \
        ims_qos \
+       ims_qos_npn \
        ims_registrar_pcscf \
        ims_registrar_scscf \
        ims_usrloc_pcscf \
@@ -134,6 +132,7 @@ MODULES_AVAILABLE:= \
        nathelper \
        nat_traversal \
        ndb_redis \
+       nghttp2 \
        nosip \
        outbound \
        p_usrloc \
@@ -147,6 +146,7 @@ MODULES_AVAILABLE:= \
        prefix_route \
        presence \
        presence_conference \
+       presence_dfks \
        presence_dialoginfo \
        presence_mwi \
        presence_profile \
@@ -161,6 +161,7 @@ MODULES_AVAILABLE:= \
        pua_usrloc \
        pua_xmpp \
        pv \
+       pvtpl \
        pv_headers \
        qos \
        ratelimit \
@@ -205,6 +206,7 @@ MODULES_AVAILABLE:= \
        tmrec \
        topoh \
        topos \
+       topos_htable \
        topos_redis \
        tm \
        tmx \
@@ -279,9 +281,6 @@ $(foreach c,kamailio.cfg kamctlrc,$(call Package/kamailio/install/conffile,$(1),
                $(PKG_INSTALL_DIR)/usr/sbin/kam{ailio,cmd,ctl,dbctl} \
                $(1)/usr/sbin/
        $(INSTALL_DIR) $(1)/usr/lib/kamailio/modules
-       $(CP) \
-               $(PKG_INSTALL_DIR)/usr/lib/kamailio/lib{srdb1,srdb2}.so* \
-               $(1)/usr/lib/kamailio/
        $(INSTALL_DIR) $(1)/etc/config
        $(INSTALL_CONF) \
                ./files/kamailio.conf \
@@ -328,30 +327,6 @@ define Package/kamailio/install/module
        $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/kamailio/modules/$(2).so* $(1)/usr/lib/kamailio/modules/
 endef
 
-define Package/kamailio-lib-libkamailio-ims
-$(call Package/kamailio/Default)
-  TITLE:=Kamailio IMS library
-  DEPENDS:=kamailio
-endef
-
-define Package/kamailio-lib-libkamailio-ims/install
-       $(INSTALL_DIR) $(1)/usr/lib/kamailio
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/kamailio/libkamailio_ims.so* \
-                                               $(1)/usr/lib/kamailio
-endef
-
-define Package/kamailio-lib-libtrie
-$(call Package/kamailio/Default)
-  TITLE:=Kamailio digital tree library
-  DEPENDS:=kamailio
-endef
-
-define Package/kamailio-lib-libtrie/install
-       $(INSTALL_DIR) $(1)/usr/lib/kamailio
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/kamailio/libtrie.so* \
-                                       $(1)/usr/lib/kamailio
-endef
-
 define Package/kamailio-util-kambdb-recover
 $(call Package/kamailio/Default)
   TITLE:=Kamailio Berkeley DB recovery utility
@@ -394,18 +369,26 @@ endef
 # Kamailio always builds a baseline of packages. The "standard" group is
 # the lightest baseline.
 
-# "uid_gflags" is added to the list of modules to have at least one
-# module that kicks off the build of the internal libsrdb2. The module
-# has no other extra dependencies.
-#
-# The same is done with:
-#   "ims_diameter_server" -> libkamailio_ims
-#   "carrierroute" -> libtrie
-
-EXTRA_MODULES:= \
-       $(if $(CONFIG_PACKAGE_kamailio-mod-carrierroute),,carrierroute) \
-       $(if $(CONFIG_PACKAGE_kamailio-mod-ims-diameter-server),,ims_diameter_server) \
-       $(if $(CONFIG_PACKAGE_kamailio-mod-uid-gflags),,uid_gflags)
+# The following Kamailio libs are compiled into the core from 6.0.x onwards (and
+# thus no longer need to be installed via EXTRA_MODULES):
+#   libkamailio_ims
+#   libtrie
+#   lib{srdb1,srdb2}
+
+# EXTRA_MODULES:= \
+#      $(if $(CONFIG_PACKAGE_kamailio-mod-carrierroute),,carrierroute) \
+#      $(if $(CONFIG_PACKAGE_kamailio-mod-ims-diameter-server),,ims_diameter_server) \
+#      $(if $(CONFIG_PACKAGE_kamailio-mod-uid-gflags),,uid_gflags)
+
+# Modules which depend on libopenssl
+# auth_ephemeral
+# cdp
+# crypto
+# dnssec
+# nghttp2
+# outbound
+# tls
+# websocket
 
 # MIPS tweak:
 #
@@ -457,8 +440,6 @@ define Build/Compile
 endef
 
 $(eval $(call BuildPackage,kamailio))
-$(eval $(call BuildPackage,kamailio-lib-libkamailio-ims))
-$(eval $(call BuildPackage,kamailio-lib-libtrie))
 $(eval $(call BuildPackage,kamailio-util-kambdb-recover))
 
 ################################
@@ -478,16 +459,13 @@ $(eval $(call BuildKamailioModule,acc_json,Accounting with records exported in J
 $(eval $(call BuildKamailioModule,alias_db,Database-backend aliases,,))
 $(eval $(call BuildKamailioModule,app_jsdt,Execute JavaScript scripts,,))
 $(eval $(call BuildKamailioModule,app_lua,Execute embedded Lua scripts,,+liblua))
-$(eval $(call BuildKamailioModule,app_lua_sr,Old Lua API,,+kamailio-mod-app-lua,))
 $(eval $(call BuildKamailioModule,app_python3,Python3 scripting interpreter,,+python3-light))
 $(eval $(call BuildKamailioModule,app_ruby,Ruby scripting interpreter,,+libruby))
-$(eval $(call BuildKamailioModule,app_sqlang,Execute Squirrel language scripts,,+libstdcpp))
 $(eval $(call BuildKamailioModule,async,Asynchronous SIP handling functions,,+kamailio-mod-tm +kamailio-mod-tmx))
 $(eval $(call BuildKamailioModule,auth,Authentication Framework,,))
 $(eval $(call BuildKamailioModule,auth_db,Database-backend authentication,,+kamailio-mod-auth))
 $(eval $(call BuildKamailioModule,auth_diameter,Diameter authentication,,+kamailio-mod-sl))
 $(eval $(call BuildKamailioModule,auth_ephemeral,Ephemeral credentials,,+libopenssl))
-$(eval $(call BuildKamailioModule,auth_identity,Identity authentication,,+libopenssl +libcurl))
 $(eval $(call BuildKamailioModule,auth_xkeys,Shared-key authentication,,+kamailio-mod-auth))
 $(eval $(call BuildKamailioModule,avp,Functions for handling AVPs,,))
 $(eval $(call BuildKamailioModule,avpops,AVP operation,,))
@@ -495,8 +473,8 @@ $(eval $(call BuildKamailioModule,benchmark,Config benchmark,,))
 $(eval $(call BuildKamailioModule,blst,Blacklisting API for config,,))
 $(eval $(call BuildKamailioModule,call_control,Call Control,,+kamailio-mod-dialog +kamailio-mod-pv))
 $(eval $(call BuildKamailioModule,call_obj,Call identification support,,))
-$(eval $(call BuildKamailioModule,carrierroute,Carrier Route,,+kamailio-lib-libtrie))
-$(eval $(call BuildKamailioModule,cdp,C Diameter Peer,,))
+$(eval $(call BuildKamailioModule,carrierroute,Carrier Route,,))
+$(eval $(call BuildKamailioModule,cdp,C Diameter Peer,,+libopenssl))
 $(eval $(call BuildKamailioModule,cdp_avp,CDP AVP helper module,,+kamailio-mod-cdp))
 $(eval $(call BuildKamailioModule,cfgutils,Config utilities,,))
 $(eval $(call BuildKamailioModule,cfg_db,Load parameters from database,,))
@@ -541,17 +519,18 @@ $(eval $(call BuildKamailioModule,h350,H.350,,+kamailio-mod-ldap +libopenldap))
 $(eval $(call BuildKamailioModule,htable,Hash Table,,))
 $(eval $(call BuildKamailioModule,http_client,HTTP client using CURL,,+libcurl))
 $(eval $(call BuildKamailioModule,imc,IM conferencing,,+kamailio-mod-db-mysql +kamailio-mod-tm))
-$(eval $(call BuildKamailioModule,ims_auth,IMS authentication module,,+kamailio-lib-libkamailio-ims +kamailio-mod-cdp +kamailio-mod-cdp-avp +kamailio-mod-tm))
-$(eval $(call BuildKamailioModule,ims_charging,IMS charging component module,,+kamailio-lib-libkamailio-ims +kamailio-mod-cdp +kamailio-mod-cdp-avp +kamailio-mod-tm))
+$(eval $(call BuildKamailioModule,ims_auth,IMS authentication module,,+kamailio-mod-cdp +kamailio-mod-cdp-avp +kamailio-mod-tm))
+$(eval $(call BuildKamailioModule,ims_charging,IMS charging component module,,+kamailio-mod-cdp +kamailio-mod-cdp-avp +kamailio-mod-tm))
 $(eval $(call BuildKamailioModule,ims_dialog,IMS dialog tracking module,,+kamailio-mod-rr +kamailio-mod-tm))
-$(eval $(call BuildKamailioModule,ims_diameter_server,IMS DIAMETER server module,,+kamailio-lib-libkamailio-ims +kamailio-mod-cdp +kamailio-mod-cdp-avp))
-$(eval $(call BuildKamailioModule,ims_icscf,IMS ICSCF component module,,+kamailio-lib-libkamailio-ims +kamailio-mod-cdp +kamailio-mod-cdp-avp +kamailio-mod-sl +kamailio-mod-tm))
-$(eval $(call BuildKamailioModule,ims_ipsec_pcscf,Diameter server implementation,,+kamailio-lib-libkamailio-ims +kamailio-mod-ims-usrloc-pcscf +kamailio-mod-tm +libmnl))
-$(eval $(call BuildKamailioModule,ims_isc,IMS ISC component module,,+kamailio-lib-libkamailio-ims +kamailio-mod-ims-usrloc-scscf +kamailio-mod-tm))
-$(eval $(call BuildKamailioModule,ims_ocs,MS OCS component module,,+kamailio-lib-libkamailio-ims +kamailio-mod-cdp +kamailio-mod-cdp-avp))
-$(eval $(call BuildKamailioModule,ims_qos,IMS Diameter Rx interface between PCSCF and PCRF functions,,+kamailio-lib-libkamailio-ims +kamailio-mod-cdp +kamailio-mod-cdp-avp +kamailio-mod-ims-dialog +kamailio-mod-ims-usrloc-pcscf +kamailio-mod-tm))
-$(eval $(call BuildKamailioModule,ims_registrar_pcscf,MS PCSCF registrar module,,+kamailio-lib-libkamailio-ims +kamailio-mod-ims-usrloc-pcscf))
-$(eval $(call BuildKamailioModule,ims_registrar_scscf,IMS SCSCF registrar module,,+kamailio-lib-libkamailio-ims +kamailio-mod-cdp +kamailio-mod-cdp-avp +kamailio-mod-ims-usrloc-scscf +kamailio-mod-tm))
+$(eval $(call BuildKamailioModule,ims_diameter_server,IMS DIAMETER server module,,+kamailio-mod-cdp +kamailio-mod-cdp-avp))
+$(eval $(call BuildKamailioModule,ims_icscf,IMS ICSCF component module,,+kamailio-mod-cdp +kamailio-mod-cdp-avp +kamailio-mod-sl +kamailio-mod-tm))
+$(eval $(call BuildKamailioModule,ims_ipsec_pcscf,Diameter server implementation,,+kamailio-mod-ims-usrloc-pcscf +kamailio-mod-tm +libmnl))
+$(eval $(call BuildKamailioModule,ims_isc,IMS ISC component module,,+kamailio-mod-ims-usrloc-scscf +kamailio-mod-tm))
+$(eval $(call BuildKamailioModule,ims_ocs,MS OCS component module,,+kamailio-mod-cdp +kamailio-mod-cdp-avp))
+$(eval $(call BuildKamailioModule,ims_qos,IMS Diameter Rx interface between PCSCF and PCRF functions,,+kamailio-mod-cdp +kamailio-mod-cdp-avp +kamailio-mod-ims-dialog +kamailio-mod-ims-usrloc-pcscf +kamailio-mod-tm))
+$(eval $(call BuildKamailioModule,ims_qos_npn,IMS QoS NPN Diameter Rx interface between PCSCF and PCRF functions,enhanced version of IMS QoS implementation,+kamailio-mod-ims-usrloc-pcscf +kamailio-mod-tm +kamailio-mod-cdp +kamailio-mod-cdp-avp))
+$(eval $(call BuildKamailioModule,ims_registrar_pcscf,MS PCSCF registrar module,,+kamailio-mod-ims-usrloc-pcscf))
+$(eval $(call BuildKamailioModule,ims_registrar_scscf,IMS SCSCF registrar module,,+kamailio-mod-cdp +kamailio-mod-cdp-avp +kamailio-mod-ims-usrloc-scscf +kamailio-mod-tm))
 $(eval $(call BuildKamailioModule,ims_usrloc_pcscf,IMS PCSCF usrloc module,,))
 $(eval $(call BuildKamailioModule,ims_usrloc_scscf,IMS SCSCF usrloc module,,))
 $(eval $(call BuildKamailioModule,ipops,IP and IPv6 operations,,))
@@ -579,6 +558,7 @@ $(eval $(call BuildKamailioModule,msrp,MSRP routing engine,,+kamailio-mod-tls))
 $(eval $(call BuildKamailioModule,mtree,Memory caching system,,))
 $(eval $(call BuildKamailioModule,nathelper,NAT helper,,+kamailio-mod-usrloc))
 $(eval $(call BuildKamailioModule,nat_traversal,NAT traversal,,+kamailio-mod-dialog +kamailio-mod-sl +kamailio-mod-tm))
+$(eval $(call BuildKamailioModule,nghttp2,NGHTTP2,HTTP2 server module implementation,+libnghttp2 +libopenssl +libevent2 +libevent2-openssl))
 $(eval $(call BuildKamailioModule,ndb_redis,Connect to REDIS NoSQL,,+libhiredis))
 $(eval $(call BuildKamailioModule,nosip,non-sip package handling,,+kamailio-mod-rr))
 $(eval $(call BuildKamailioModule,outbound,SIP Outbound implementation,,+kamailio-mod-stun +libopenssl))
@@ -594,6 +574,7 @@ $(eval $(call BuildKamailioModule,prefix_route,Execute based on prefix,,))
 $(eval $(call BuildKamailioModule,presence,Presence server,,+kamailio-mod-sl +kamailio-mod-tm,))
 $(eval $(call BuildKamailioModule,presence_conference,Conference events,,+kamailio-mod-presence))
 $(eval $(call BuildKamailioModule,presence_dialoginfo,Dialog Event presence,,+kamailio-mod-presence))
+$(eval $(call BuildKamailioModule,presence_dfks,Device FeatureKey Synchronization,,+kamailio-mod-sl +kamailio-mod-presence +kamailio-mod-pua))
 $(eval $(call BuildKamailioModule,presence_mwi,MWI presence,,+kamailio-mod-presence))
 $(eval $(call BuildKamailioModule,presence_profile,User profile extensions,,+kamailio-mod-presence))
 $(eval $(call BuildKamailioModule,presence_reginfo,Registration info,,+kamailio-mod-presence))
@@ -607,6 +588,7 @@ $(eval $(call BuildKamailioModule,pua_rpc,RPC extensions for PUA,,+kamailio-mod-
 $(eval $(call BuildKamailioModule,pua_usrloc,PUA User Location,,+kamailio-mod-pua +kamailio-mod-usrloc))
 $(eval $(call BuildKamailioModule,pua_xmpp,PUA XMPP,,+kamailio-mod-presence +kamailio-mod-pua +kamailio-mod-xmpp))
 $(eval $(call BuildKamailioModule,pv,Pseudo-Variables,,))
+$(eval $(call BuildKamailioModule,pvtpl,PVTPL,reads content of files at startup and can evaluate the variables inside during runtime,))
 $(eval $(call BuildKamailioModule,pv_headers,Flexible SIP header management,,))
 $(eval $(call BuildKamailioModule,qos,QoS control,,+kamailio-mod-dialog))
 $(eval $(call BuildKamailioModule,ratelimit,Traffic shapping,,))
@@ -651,6 +633,7 @@ $(eval $(call BuildKamailioModule,tls,TLS operations,,+libopenssl,,tls.cfg))
 $(eval $(call BuildKamailioModule,tmrec,Match time recurrences,,))
 $(eval $(call BuildKamailioModule,topoh,Topology hiding,,+kamailio-mod-rr))
 $(eval $(call BuildKamailioModule,topos,Topology stripping module,,+kamailio-mod-rr))
+$(eval $(call BuildKamailioModule,topos_htable,Hash Table storage for topology stripping,,+kamailio-mod-topos +kamailio-mod-htable))
 $(eval $(call BuildKamailioModule,topos_redis,Redis backend for topos module,,+kamailio-mod-ndb-redis +kamailio-mod-topos))
 $(eval $(call BuildKamailioModule,tm,Transaction,,))
 $(eval $(call BuildKamailioModule,tmx,Transaction module extensions,,))
@@ -663,7 +646,7 @@ $(eval $(call BuildKamailioModule,uid_domain,Domains management,,))
 $(eval $(call BuildKamailioModule,uid_gflags,Global attributes and flags,,))
 $(eval $(call BuildKamailioModule,uid_uri_db,Database URI operations,,))
 $(eval $(call BuildKamailioModule,uri_db,Database-backend SIP URI checking,,))
-$(eval $(call BuildKamailioModule,userblocklist,User blocklists,,+kamailio-lib-libtrie))
+$(eval $(call BuildKamailioModule,userblocklist,User blocklists,,))
 $(eval $(call BuildKamailioModule,usrloc,User location,,))
 $(eval $(call BuildKamailioModule,utils,Misc utilities,,+libcurl,))
 $(eval $(call BuildKamailioModule,uuid,UUID utilities,,+libuuid))
diff --git a/net/kamailio/patches/010-dialplan-clang-format-for-coherent-indentation-and-c.patch b/net/kamailio/patches/010-dialplan-clang-format-for-coherent-indentation-and-c.patch
deleted file mode 100644 (file)
index 3fa8a95..0000000
+++ /dev/null
@@ -1,2821 +0,0 @@
-From 01d0d1de2c82db189c288a157932f4a3ba98970a Mon Sep 17 00:00:00 2001
-From: Victor Seva <[email protected]>
-Date: Wed, 17 May 2023 16:36:04 +0200
-Subject: [PATCH] dialplan: clang-format for coherent indentation and coding
- style
-
----
- src/modules/dialplan/dialplan.c | 522 +++++++++++++++-----------------
- src/modules/dialplan/dialplan.h |  89 +++---
- src/modules/dialplan/dp_db.c    | 364 +++++++++++-----------
- src/modules/dialplan/dp_db.h    |  38 +--
- src/modules/dialplan/dp_repl.c  | 387 +++++++++++------------
- 5 files changed, 701 insertions(+), 699 deletions(-)
-
---- a/src/modules/dialplan/dialplan.c
-+++ b/src/modules/dialplan/dialplan.c
-@@ -35,8 +35,6 @@
-  */
--
--
- #include <string.h>
- #include <stdlib.h>
- #include <stdio.h>
-@@ -67,18 +65,19 @@ static void mod_destroy();
- static int dialplan_init_rpc(void);
--static int dp_translate_f(struct sip_msg* msg, char* str1, char* str2);
--static int dp_trans_fixup(void ** param, int param_no);
--static int dp_reload_f(struct sip_msg* msg);
--static int w_dp_replace(sip_msg_t* msg, char* pid, char* psrc, char* pdst);
--static int w_dp_match(sip_msg_t* msg, char* pid, char* psrc);
--
--static int ki_dp_translate(sip_msg_t* msg, int id, str *input, str *output);
--static int ki_dp_translate_id(sip_msg_t* msg, int id);
--static int ki_dp_translate_vars(sip_msg_t* msg, int id, str *input, str *output);
-+static int dp_translate_f(struct sip_msg *msg, char *str1, char *str2);
-+static int dp_trans_fixup(void **param, int param_no);
-+static int dp_reload_f(struct sip_msg *msg);
-+static int w_dp_replace(sip_msg_t *msg, char *pid, char *psrc, char *pdst);
-+static int w_dp_match(sip_msg_t *msg, char *pid, char *psrc);
-+
-+static int ki_dp_translate(sip_msg_t *msg, int id, str *input, str *output);
-+static int ki_dp_translate_id(sip_msg_t *msg, int id);
-+static int ki_dp_translate_vars(
-+              sip_msg_t *msg, int id, str *input, str *output);
--int dp_replace_fixup(void** param, int param_no);
--int dp_replace_fixup_free(void** param, int param_no);
-+int dp_replace_fixup(void **param, int param_no);
-+int dp_replace_fixup_free(void **param, int param_no);
- str dp_attr_pvar_s = STR_NULL;
- pv_spec_t *dp_attr_pvar = NULL;
-@@ -93,76 +92,69 @@ int dp_reload_delta = 5;
- static time_t *dp_rpc_reload_time = NULL;
--static param_export_t mod_params[]={
--      { "db_url",                     PARAM_STR,      &dp_db_url },
--      { "table_name",         PARAM_STR,      &dp_table_name },
--      { "dpid_col",           PARAM_STR,      &dpid_column },
--      { "pr_col",                     PARAM_STR,      &pr_column },
--      { "match_op_col",       PARAM_STR,      &match_op_column },
--      { "match_exp_col",      PARAM_STR,      &match_exp_column },
--      { "match_len_col",      PARAM_STR,      &match_len_column },
--      { "subst_exp_col",      PARAM_STR,      &subst_exp_column },
--      { "repl_exp_col",       PARAM_STR,      &repl_exp_column },
--      { "attrs_col",          PARAM_STR,      &attrs_column },
--      { "attrs_pvar",     PARAM_STR,  &dp_attr_pvar_s },
--      { "fetch_rows",         PARAM_INT,      &dp_fetch_rows },
--      { "match_dynamic",      PARAM_INT,      &dp_match_dynamic },
--      { "append_branch",      PARAM_INT,      &dp_append_branch },
--      { "reload_delta",       PARAM_INT,      &dp_reload_delta },
--      {0,0,0}
--};
--
--static cmd_export_t cmds[]={
--      {"dp_translate",(cmd_function)dp_translate_f,   2,      dp_trans_fixup,  0,
--              ANY_ROUTE},
--      {"dp_translate",(cmd_function)dp_translate_f,   1,      dp_trans_fixup,  0,
--              ANY_ROUTE},
--      {"dp_reload",(cmd_function)dp_reload_f, 0, 0,  0,
--              ANY_ROUTE},
--      {"dp_match",(cmd_function)w_dp_match,   2,      fixup_igp_spve,
--              fixup_free_igp_spve, ANY_ROUTE},
--      {"dp_replace",(cmd_function)w_dp_replace,       3,      dp_replace_fixup,
--              dp_replace_fixup_free, ANY_ROUTE},
--      {0,0,0,0,0,0}
--};
--
--struct module_exports exports= {
--      "dialplan",      /* module's name */
--      DEFAULT_DLFLAGS, /* dlopen flags */
--      cmds,            /* exported functions */
--      mod_params,      /* param exports */
--      0,               /* exported RPC functions */
--      0,               /* exported pseudo-variables */
--      0,               /* reply processing function */
--      mod_init,        /* module initialization function */
--      child_init,      /* per-child init function */
--      mod_destroy      /* module destroy function */
-+static param_export_t mod_params[] = {{"db_url", PARAM_STR, &dp_db_url},
-+              {"table_name", PARAM_STR, &dp_table_name},
-+              {"dpid_col", PARAM_STR, &dpid_column},
-+              {"pr_col", PARAM_STR, &pr_column},
-+              {"match_op_col", PARAM_STR, &match_op_column},
-+              {"match_exp_col", PARAM_STR, &match_exp_column},
-+              {"match_len_col", PARAM_STR, &match_len_column},
-+              {"subst_exp_col", PARAM_STR, &subst_exp_column},
-+              {"repl_exp_col", PARAM_STR, &repl_exp_column},
-+              {"attrs_col", PARAM_STR, &attrs_column},
-+              {"attrs_pvar", PARAM_STR, &dp_attr_pvar_s},
-+              {"fetch_rows", PARAM_INT, &dp_fetch_rows},
-+              {"match_dynamic", PARAM_INT, &dp_match_dynamic},
-+              {"append_branch", PARAM_INT, &dp_append_branch},
-+              {"reload_delta", PARAM_INT, &dp_reload_delta}, {0, 0, 0}};
-+
-+static cmd_export_t cmds[] = {{"dp_translate", (cmd_function)dp_translate_f, 2,
-+                                                                        dp_trans_fixup, 0, ANY_ROUTE},
-+              {"dp_translate", (cmd_function)dp_translate_f, 1, dp_trans_fixup, 0,
-+                              ANY_ROUTE},
-+              {"dp_reload", (cmd_function)dp_reload_f, 0, 0, 0, ANY_ROUTE},
-+              {"dp_match", (cmd_function)w_dp_match, 2, fixup_igp_spve,
-+                              fixup_free_igp_spve, ANY_ROUTE},
-+              {"dp_replace", (cmd_function)w_dp_replace, 3, dp_replace_fixup,
-+                              dp_replace_fixup_free, ANY_ROUTE},
-+              {0, 0, 0, 0, 0, 0}};
-+
-+struct module_exports exports = {
-+              "dialplan",              /* module's name */
-+              DEFAULT_DLFLAGS, /* dlopen flags */
-+              cmds,                    /* exported functions */
-+              mod_params,              /* param exports */
-+              0,                               /* exported RPC functions */
-+              0,                               /* exported pseudo-variables */
-+              0,                               /* reply processing function */
-+              mod_init,                /* module initialization function */
-+              child_init,              /* per-child init function */
-+              mod_destroy              /* module destroy function */
- };
- static int mod_init(void)
- {
--      if(dialplan_init_rpc()!=0)
--      {
-+      if(dialplan_init_rpc() != 0) {
-               LM_ERR("failed to register RPC commands\n");
-               return -1;
-       }
--      LM_DBG("db_url=%s/%d/%p\n", ZSW(dp_db_url.s), dp_db_url.len,dp_db_url.s);
-+      LM_DBG("db_url=%s/%d/%p\n", ZSW(dp_db_url.s), dp_db_url.len, dp_db_url.s);
--      if(dp_attr_pvar_s.s && dp_attr_pvar_s.len>0) {
-+      if(dp_attr_pvar_s.s && dp_attr_pvar_s.len > 0) {
-               dp_attr_pvar = pv_cache_get(&dp_attr_pvar_s);
--              if( (dp_attr_pvar==NULL) ||
--                              ((dp_attr_pvar->type != PVT_AVP) &&
--                               (dp_attr_pvar->type != PVT_XAVP) &&
--                               (dp_attr_pvar->type != PVT_SCRIPTVAR))) {
-+              if((dp_attr_pvar == NULL)
-+                              || ((dp_attr_pvar->type != PVT_AVP)
-+                                              && (dp_attr_pvar->type != PVT_XAVP)
-+                                              && (dp_attr_pvar->type != PVT_SCRIPTVAR))) {
-                       LM_ERR("invalid pvar name\n");
-                       return -1;
-               }
-       }
-       dp_default_par2 = (dp_param_p)shm_malloc(sizeof(dp_param_t));
--      if(dp_default_par2 == NULL){
-+      if(dp_default_par2 == NULL) {
-               LM_ERR("no shm more memory\n");
-               return -1;
-       }
-@@ -171,22 +163,22 @@ static int mod_init(void)
-       /* emulate "$rU/$rU" as second parameter for dp_translate() */
-       dp_default_param_s.len = strlen(dp_default_param_s.s);
-       dp_default_par2->v.sp[0] = pv_cache_get(&dp_default_param_s);
--      if (dp_default_par2->v.sp[0]==NULL) {
-+      if(dp_default_par2->v.sp[0] == NULL) {
-               LM_ERR("input pv is invalid\n");
-               return -1;
-       }
-       dp_default_param_s.len = strlen(dp_default_param_s.s);
-       dp_default_par2->v.sp[1] = pv_cache_get(&dp_default_param_s);
--      if (dp_default_par2->v.sp[1]==NULL) {
-+      if(dp_default_par2->v.sp[1] == NULL) {
-               LM_ERR("output pv is invalid\n");
-               return -1;
-       }
--      if(dp_fetch_rows<=0)
-+      if(dp_fetch_rows <= 0)
-               dp_fetch_rows = 1000;
--      if(dp_reload_delta<0)
-+      if(dp_reload_delta < 0)
-               dp_reload_delta = 5;
-       if(init_data() != 0) {
-@@ -214,11 +206,11 @@ static int child_init(int rank)
- static void mod_destroy(void)
- {
-       /*destroy shared memory*/
--      if(dp_default_par2){
-+      if(dp_default_par2) {
-               shm_free(dp_default_par2);
-               dp_default_par2 = NULL;
-       }
--      if(dp_rpc_reload_time!=NULL) {
-+      if(dp_rpc_reload_time != NULL) {
-               shm_free(dp_rpc_reload_time);
-               dp_rpc_reload_time = 0;
-       }
-@@ -226,20 +218,21 @@ static void mod_destroy(void)
- }
--static int dp_get_ivalue(struct sip_msg* msg, dp_param_p dp, int *val)
-+static int dp_get_ivalue(struct sip_msg *msg, dp_param_p dp, int *val)
- {
-       pv_value_t value;
--      if(dp->type==DP_VAL_INT) {
-+      if(dp->type == DP_VAL_INT) {
-               *val = dp->v.id;
-               LM_DBG("dpid is %d from constant argument\n", *val);
-               return 0;
-       }
--      LM_DBG("searching %d\n",dp->v.sp[0]->type);
-+      LM_DBG("searching %d\n", dp->v.sp[0]->type);
--      if( pv_get_spec_value( msg, dp->v.sp[0], &value)!=0
--                      || value.flags&(PV_VAL_NULL|PV_VAL_EMPTY) || !(value.flags&PV_VAL_INT)) {
-+      if(pv_get_spec_value(msg, dp->v.sp[0], &value) != 0
-+                      || value.flags & (PV_VAL_NULL | PV_VAL_EMPTY)
-+                      || !(value.flags & PV_VAL_INT)) {
-               LM_ERR("no AVP, XAVP or SCRIPTVAR found (error in scripts)\n");
-               return -1;
-       }
-@@ -249,14 +242,14 @@ static int dp_get_ivalue(struct sip_msg*
- }
--static int dp_get_svalue(struct sip_msg * msg, pv_spec_t *spec, str* val)
-+static int dp_get_svalue(struct sip_msg *msg, pv_spec_t *spec, str *val)
- {
-       pv_value_t value;
-       LM_DBG("searching %d \n", spec->type);
--      if ( pv_get_spec_value(msg,spec,&value)!=0 || value.flags&PV_VAL_NULL
--                      || value.flags&PV_VAL_EMPTY || !(value.flags&PV_VAL_STR)){
-+      if(pv_get_spec_value(msg, spec, &value) != 0 || value.flags & PV_VAL_NULL
-+                      || value.flags & PV_VAL_EMPTY || !(value.flags & PV_VAL_STR)) {
-               LM_ERR("no AVP, XAVP or SCRIPTVAR found (error in scripts)\n");
-               return -1;
-       }
-@@ -266,8 +259,8 @@ static int dp_get_svalue(struct sip_msg
- }
--static int dp_update(struct sip_msg * msg, pv_spec_t * dest,
--              str * repl, str * attrs)
-+static int dp_update(
-+              struct sip_msg *msg, pv_spec_t *dest, str *repl, str *attrs)
- {
-       int no_change;
-       pv_value_t val;
-@@ -275,16 +268,16 @@ static int dp_update(struct sip_msg * ms
-       memset(&val, 0, sizeof(pv_value_t));
-       val.flags = PV_VAL_STR;
--      no_change = (dest==NULL) || (dest->type == PVT_NONE)
--                                              || (!repl->s) || (!repl->len);
-+      no_change = (dest == NULL) || (dest->type == PVT_NONE) || (!repl->s)
-+                              || (!repl->len);
--      if (no_change)
-+      if(no_change)
-               goto set_attr_pvar;
-       val.rs = *repl;
-       if(dest->setf) {
--              if(dest->setf(msg, &dest->pvp, (int)EQ_T, &val)<0) {
-+              if(dest->setf(msg, &dest->pvp, (int)EQ_T, &val) < 0) {
-                       LM_ERR("setting dst pseudo-variable failed\n");
-                       return -1;
-               }
-@@ -292,7 +285,7 @@ static int dp_update(struct sip_msg * ms
-               LM_WARN("target variable is read only - skipping setting its value\n");
-       }
--      if(dp_append_branch!=0) {
-+      if(dp_append_branch != 0) {
-               if(is_route_type(FAILURE_ROUTE)
-                               && (dest->type == PVT_RURI
-                                               || dest->type == PVT_RURI_USERNAME)) {
-@@ -306,12 +299,11 @@ static int dp_update(struct sip_msg * ms
- set_attr_pvar:
--      if(dp_attr_pvar==NULL || attrs==NULL)
-+      if(dp_attr_pvar == NULL || attrs == NULL)
-               return 0;
-       val.rs = *attrs;
--      if(dp_attr_pvar->setf(msg, &dp_attr_pvar->pvp, (int)EQ_T, &val)<0)
--      {
-+      if(dp_attr_pvar->setf(msg, &dp_attr_pvar->pvp, (int)EQ_T, &val) < 0) {
-               LM_ERR("setting attr pseudo-variable failed\n");
-               return -1;
-       }
-@@ -320,7 +312,7 @@ set_attr_pvar:
- }
--static int dp_translate_f(struct sip_msg* msg, char* str1, char* str2)
-+static int dp_translate_f(struct sip_msg *msg, char *str1, char *str2)
- {
-       int dpid;
-       str input, output;
-@@ -332,59 +324,60 @@ static int dp_translate_f(struct sip_msg
-               return -1;
-       /*verify first param's value*/
--      id_par = (dp_param_p) str1;
--      if (dp_get_ivalue(msg, id_par, &dpid) != 0){
-+      id_par = (dp_param_p)str1;
-+      if(dp_get_ivalue(msg, id_par, &dpid) != 0) {
-               LM_ERR("no dpid value\n");
-               return -1;
-       }
--      if ((idp = select_dpid(dpid)) ==0 ){
-+      if((idp = select_dpid(dpid)) == 0) {
-               LM_DBG("no information available for dpid %i\n", dpid);
-               return -2;
-       }
--      repl_par = (str2!=NULL)? ((dp_param_p)str2):dp_default_par2;
--      if (dp_get_svalue(msg, repl_par->v.sp[0], &input)!=0){
-+      repl_par = (str2 != NULL) ? ((dp_param_p)str2) : dp_default_par2;
-+      if(dp_get_svalue(msg, repl_par->v.sp[0], &input) != 0) {
-               LM_ERR("invalid param 2\n");
-               return -1;
-       }
-       LM_DBG("input is %.*s\n", input.len, input.s);
--      outattrs = (!dp_attr_pvar)?NULL:&attrs;
--      if (dp_translate_helper(msg, &input, &output, idp, outattrs)!=0) {
-+      outattrs = (!dp_attr_pvar) ? NULL : &attrs;
-+      if(dp_translate_helper(msg, &input, &output, idp, outattrs) != 0) {
-               LM_DBG("could not translate %.*s "
--                              "with dpid %i\n", input.len, input.s, idp->dp_id);
-+                         "with dpid %i\n",
-+                              input.len, input.s, idp->dp_id);
-               return -1;
-       }
--      LM_DBG("input %.*s with dpid %i => output %.*s\n",
--                      input.len, input.s, idp->dp_id, output.len, output.s);
-+      LM_DBG("input %.*s with dpid %i => output %.*s\n", input.len, input.s,
-+                      idp->dp_id, output.len, output.s);
-       /* set the output */
--      if (dp_update(msg, repl_par->v.sp[1], &output, outattrs) !=0){
-+      if(dp_update(msg, repl_par->v.sp[1], &output, outattrs) != 0) {
-               LM_ERR("cannot set the output\n");
-               return -1;
-       }
-       return 1;
--
- }
--#define verify_par_type(_par_no, _spec, _ret) \
--      do{\
--              if( ((_par_no == 1) \
--                                      && (_spec->type != PVT_AVP) && (_spec->type != PVT_XAVP) && \
--                                      (_spec->type!=PVT_SCRIPTVAR) )\
--                              ||((_par_no == 2) \
--                                      && (_spec->type != PVT_AVP) && (_spec->type != PVT_XAVP) && \
--                                      (_spec->type!=PVT_SCRIPTVAR) \
--                                      && (_spec->type!=PVT_RURI) && (_spec->type!=PVT_RURI_USERNAME))){\
--                      \
--                      LM_ERR("Unsupported Parameter TYPE[%d]\n", _spec->type);\
--                      _ret = E_UNSPEC; \
--                      goto error; \
--              }\
--      }while(0);
-+#define verify_par_type(_par_no, _spec, _ret)                        \
-+      do {                                                             \
-+              if(((_par_no == 1) && (_spec->type != PVT_AVP)               \
-+                                 && (_spec->type != PVT_XAVP)                      \
-+                                 && (_spec->type != PVT_SCRIPTVAR))                \
-+                              || ((_par_no == 2) && (_spec->type != PVT_AVP)       \
-+                                              && (_spec->type != PVT_XAVP)                 \
-+                                              && (_spec->type != PVT_SCRIPTVAR)            \
-+                                              && (_spec->type != PVT_RURI)                 \
-+                                              && (_spec->type != PVT_RURI_USERNAME))) {    \
-+                                                                     \
-+                      LM_ERR("Unsupported Parameter TYPE[%d]\n", _spec->type); \
-+                      _ret = E_UNSPEC;                                         \
-+                      goto error;                                              \
-+              }                                                            \
-+      } while(0);
- /* first param: DPID: type: INT, AVP, XAVP, SVAR
-@@ -392,19 +385,20 @@ static int dp_translate_f(struct sip_msg
-  * second param: DST type: RURI, RURI_USERNAME, AVP, XAVP, SVAR, N/A
-  * default value for the second param: $ru.user/$ru.user
-  */
--static int dp_trans_fixup(void ** param, int param_no){
-+static int dp_trans_fixup(void **param, int param_no)
-+{
-       int dpid;
--      dp_param_p dp_par= NULL;
--      char *p, *s=NULL;
-+      dp_param_p dp_par = NULL;
-+      char *p, *s = NULL;
-       str lstr;
-       int ret = E_INVALID_PARAMS;
--      if(param_no!=1 && param_no!=2)
-+      if(param_no != 1 && param_no != 2)
-               return 0;
--      p = (char*)*param;
--      if(!p || (*p == '\0')){
-+      p = (char *)*param;
-+      if(!p || (*p == '\0')) {
-               LM_DBG("null param %i\n", param_no);
-               return E_CFG;
-       }
-@@ -412,7 +406,7 @@ static int dp_trans_fixup(void ** param,
-       LM_DBG("param_no is %i\n", param_no);
-       dp_par = (dp_param_p)pkg_malloc(sizeof(dp_param_t));
--      if(dp_par == NULL){
-+      if(dp_par == NULL) {
-               LM_ERR("no more pkg memory\n");
-               return E_OUT_OF_MEM;
-       }
-@@ -421,19 +415,21 @@ static int dp_trans_fixup(void ** param,
-       if(param_no == 1) {
-               if(*p != '$') {
-                       dp_par->type = DP_VAL_INT;
--                      lstr.s = *param; lstr.len = strlen(*param);
-+                      lstr.s = *param;
-+                      lstr.len = strlen(*param);
-                       if(str2sint(&lstr, &dpid) != 0) {
--                              LM_ERR("bad number <%s>\n",(char *)(*param));
-+                              LM_ERR("bad number <%s>\n", (char *)(*param));
-                               ret = E_CFG;
-                               goto error;
-                       }
-                       dp_par->type = DP_VAL_INT;
-                       dp_par->v.id = dpid;
--              }else{
--                      lstr.s = p; lstr.len = strlen(p);
-+              } else {
-+                      lstr.s = p;
-+                      lstr.len = strlen(p);
-                       dp_par->v.sp[0] = pv_cache_get(&lstr);
--                      if (dp_par->v.sp[0]==NULL) {
-+                      if(dp_par->v.sp[0] == NULL) {
-                               goto error;
-                       }
-@@ -442,30 +438,32 @@ static int dp_trans_fixup(void ** param,
-               }
-       } else {
--              if (((s = strchr(p, '/')) != 0) && (*(s+1)=='\0'))
-+              if(((s = strchr(p, '/')) != 0) && (*(s + 1) == '\0'))
-                       goto error;
--              if (s != 0) {
--                      *s = '\0'; s++;
-+              if(s != 0) {
-+                      *s = '\0';
-+                      s++;
-               }
--              lstr.s = p; lstr.len = strlen(p);
-+              lstr.s = p;
-+              lstr.len = strlen(p);
-               dp_par->v.sp[0] = pv_cache_get(&lstr);
--              if(dp_par->v.sp[0]==NULL) {
-+              if(dp_par->v.sp[0] == NULL) {
-                       goto error;
-               }
--              if (s != 0) {
--                      lstr.s = s; lstr.len = strlen(s);
-+              if(s != 0) {
-+                      lstr.s = s;
-+                      lstr.len = strlen(s);
-                       dp_par->v.sp[1] = pv_cache_get(&lstr);
--                      if (dp_par->v.sp[1]==NULL) {
-+                      if(dp_par->v.sp[1] == NULL) {
-                               goto error;
-                       }
-                       verify_par_type(param_no, dp_par->v.sp[1], ret);
-               }
-               dp_par->type = DP_VAL_SPEC;
--
-       }
-       *param = (void *)dp_par;
-@@ -474,13 +472,14 @@ static int dp_trans_fixup(void ** param,
- error:
-       LM_ERR("failed to parse param %i\n", param_no);
--      if(dp_par) pkg_free(dp_par);
-+      if(dp_par)
-+              pkg_free(dp_par);
-       return ret;
- }
--static int dp_replace_helper(sip_msg_t *msg, int dpid, str *input,
--              pv_spec_t *pvd)
-+static int dp_replace_helper(
-+              sip_msg_t *msg, int dpid, str *input, pv_spec_t *pvd)
- {
-       dpl_id_p idp;
-       str tmp = STR_NULL;
-@@ -488,25 +487,26 @@ static int dp_replace_helper(sip_msg_t *
-       str *output = NULL;
-       str *outattrs = NULL;
--      if ((idp = select_dpid(dpid)) ==0) {
-+      if((idp = select_dpid(dpid)) == 0) {
-               LM_DBG("no information available for dpid %i\n", dpid);
-               return -2;
-       }
--      outattrs = (!dp_attr_pvar)?NULL:&attrs;
--      output = (!pvd)?NULL:&tmp;
--      if (dp_translate_helper(msg, input, output, idp, outattrs)!=0) {
-+      outattrs = (!dp_attr_pvar) ? NULL : &attrs;
-+      output = (!pvd) ? NULL : &tmp;
-+      if(dp_translate_helper(msg, input, output, idp, outattrs) != 0) {
-               LM_DBG("could not translate %.*s "
--                              "with dpid %i\n", input->len, input->s, idp->dp_id);
-+                         "with dpid %i\n",
-+                              input->len, input->s, idp->dp_id);
-               return -1;
-       }
--      if (output) {
--              LM_DBG("input %.*s with dpid %i => output %.*s\n",
--                              input->len, input->s, idp->dp_id, output->len, output->s);
-+      if(output) {
-+              LM_DBG("input %.*s with dpid %i => output %.*s\n", input->len, input->s,
-+                              idp->dp_id, output->len, output->s);
-       }
-       /* set the output */
--      if (dp_update(msg, pvd, output, outattrs) !=0){
-+      if(dp_update(msg, pvd, output, outattrs) != 0) {
-               LM_ERR("cannot set the output\n");
-               return -1;
-       }
-@@ -514,31 +514,31 @@ static int dp_replace_helper(sip_msg_t *
-       return 1;
- }
--static int w_dp_replace(sip_msg_t* msg, char* pid, char* psrc, char* pdst)
-+static int w_dp_replace(sip_msg_t *msg, char *pid, char *psrc, char *pdst)
- {
-       int dpid = 1;
-       str src = STR_NULL;
-       pv_spec_t *pvd = NULL;
--      if(fixup_get_ivalue(msg, (gparam_t*)pid, &dpid)<0) {
-+      if(fixup_get_ivalue(msg, (gparam_t *)pid, &dpid) < 0) {
-               LM_ERR("failed to get dialplan id value\n");
-               return -1;
-       }
--      if(fixup_get_svalue(msg, (gparam_t*)psrc, &src)<0) {
-+      if(fixup_get_svalue(msg, (gparam_t *)psrc, &src) < 0) {
-               LM_ERR("failed to get src value\n");
-               return -1;
-       }
--      pvd = (pv_spec_t*)pdst;
-+      pvd = (pv_spec_t *)pdst;
-       return dp_replace_helper(msg, dpid, &src, pvd);
- }
--static int ki_dp_replace(sip_msg_t* msg, int dpid, str* src, str* dst)
-+static int ki_dp_replace(sip_msg_t *msg, int dpid, str *src, str *dst)
- {
-       pv_spec_t *pvd = NULL;
-       pvd = pv_cache_get(dst);
--      if(pvd==NULL) {
-+      if(pvd == NULL) {
-               LM_ERR("cannot get pv spec for [%.*s]\n", dst->len, dst->s);
-               return -1;
-       }
-@@ -546,16 +546,16 @@ static int ki_dp_replace(sip_msg_t* msg,
-       return dp_replace_helper(msg, dpid, src, pvd);
- }
--static int w_dp_match(sip_msg_t* msg, char* pid, char* psrc)
-+static int w_dp_match(sip_msg_t *msg, char *pid, char *psrc)
- {
-       int dpid = 1;
-       str src = STR_NULL;
--      if(fixup_get_ivalue(msg, (gparam_t*)pid, &dpid)<0) {
-+      if(fixup_get_ivalue(msg, (gparam_t *)pid, &dpid) < 0) {
-               LM_ERR("failed to get dialplan id value\n");
-               return -1;
-       }
--      if(fixup_get_svalue(msg, (gparam_t*)psrc, &src)<0) {
-+      if(fixup_get_svalue(msg, (gparam_t *)psrc, &src) < 0) {
-               LM_ERR("failed to get src value\n");
-               return -1;
-       }
-@@ -563,30 +563,30 @@ static int w_dp_match(sip_msg_t* msg, ch
-       return dp_replace_helper(msg, dpid, &src, NULL);
- }
--static int ki_dp_match(sip_msg_t* msg, int dpid, str* src)
-+static int ki_dp_match(sip_msg_t *msg, int dpid, str *src)
- {
-       return dp_replace_helper(msg, dpid, src, NULL);
- }
--int dp_replace_fixup(void** param, int param_no)
-+int dp_replace_fixup(void **param, int param_no)
- {
--      if (param_no == 1)
-+      if(param_no == 1)
-               return fixup_igp_null(param, param_no);
--      else if (param_no == 2)
-+      else if(param_no == 2)
-               return fixup_spve_all(param, param_no);
--      else if (param_no == 3)
-+      else if(param_no == 3)
-               return fixup_pvar_all(param, param_no);
-       return E_UNSPEC;
- }
--int dp_replace_fixup_free(void** param, int param_no)
-+int dp_replace_fixup_free(void **param, int param_no)
- {
--      if (param_no == 1)
-+      if(param_no == 1)
-               return fixup_free_igp_null(param, param_no);
--      else if (param_no == 2)
-+      else if(param_no == 2)
-               return fixup_free_spve_all(param, param_no);
--      else if (param_no == 3)
-+      else if(param_no == 3)
-               return fixup_free_pvar_all(param, param_no);
-       return E_UNSPEC;
- }
-@@ -594,14 +594,14 @@ int dp_replace_fixup_free(void** param,
- /**
-  * trigger reload of dialplan db records from config file
-  */
--static int dp_reload_f(struct sip_msg* msg)
-+static int dp_reload_f(struct sip_msg *msg)
- {
--      if (dp_connect_db() < 0) {
-+      if(dp_connect_db() < 0) {
-               LM_ERR("failed to reload rules fron database (db connect)\n");
-               return -1;
-       }
--      if(dp_load_db() != 0){
-+      if(dp_load_db() != 0) {
-               LM_ERR("failed to reload rules fron database (db load)\n");
-               dp_disconnect_db();
-               return -1;
-@@ -614,35 +614,34 @@ static int dp_reload_f(struct sip_msg* m
- }
--static const char* dialplan_rpc_reload_doc[2] = {
--      "Reload dialplan table from database",
--      0
--};
-+static const char *dialplan_rpc_reload_doc[2] = {
-+              "Reload dialplan table from database", 0};
- /*
-  * RPC command to reload dialplan table
-  */
--static void dialplan_rpc_reload(rpc_t* rpc, void* ctx)
-+static void dialplan_rpc_reload(rpc_t *rpc, void *ctx)
- {
--      if(dp_rpc_reload_time==NULL) {
-+      if(dp_rpc_reload_time == NULL) {
-               LM_ERR("not ready for reload\n");
-               rpc->fault(ctx, 500, "Not ready for reload");
-               return;
-       }
--      if(*dp_rpc_reload_time!=0 && *dp_rpc_reload_time > time(NULL) - dp_reload_delta) {
-+      if(*dp_rpc_reload_time != 0
-+                      && *dp_rpc_reload_time > time(NULL) - dp_reload_delta) {
-               LM_ERR("ongoing reload\n");
-               rpc->fault(ctx, 500, "ongoing reload");
-               return;
-       }
-       *dp_rpc_reload_time = time(NULL);
--      if (dp_connect_db() < 0) {
-+      if(dp_connect_db() < 0) {
-               LM_ERR("failed to reload rules fron database (db connect)\n");
-               rpc->fault(ctx, 500, "DB Connection Error");
-               return;
-       }
--      if(dp_load_db() != 0){
-+      if(dp_load_db() != 0) {
-               LM_ERR("failed to reload rules fron database (db load)\n");
-               dp_disconnect_db();
-               rpc->fault(ctx, 500, "Dialplan Reload Failed");
-@@ -654,63 +653,55 @@ static void dialplan_rpc_reload(rpc_t* r
- }
--
--static const char* dialplan_rpc_translate_doc[2] = {
--      "Perform dialplan translation",
--      0
--};
-+static const char *dialplan_rpc_translate_doc[2] = {
-+              "Perform dialplan translation", 0};
- /*
-  * RPC command to perform dialplan translation
-  */
--static void dialplan_rpc_translate(rpc_t* rpc, void* ctx)
-+static void dialplan_rpc_translate(rpc_t *rpc, void *ctx)
- {
-       dpl_id_p idp;
-       str input;
-       int dpid;
--      str attrs  = {"", 0};
-+      str attrs = {"", 0};
-       str output = {0, 0};
--      void* th;
-+      void *th;
--      if (rpc->scan(ctx, "dS", &dpid, &input) < 2)
--      {
-+      if(rpc->scan(ctx, "dS", &dpid, &input) < 2) {
-               rpc->fault(ctx, 500, "Invalid parameters");
-               return;
-       }
--      if ((idp = select_dpid(dpid)) == 0 ){
-+      if((idp = select_dpid(dpid)) == 0) {
-               LM_ERR("no information available for dpid %i\n", dpid);
-               rpc->fault(ctx, 500, "Dialplan ID not matched");
-               return;
-       }
--      if(input.s == NULL || input.len== 0)    {
-+      if(input.s == NULL || input.len == 0) {
-               LM_ERR("empty input parameter\n");
-               rpc->fault(ctx, 500, "Empty input parameter");
-               return;
-       }
--      LM_DBG("trying to translate %.*s with dpid %i\n",
--                      input.len, input.s, idp->dp_id);
--      if (dp_translate_helper(NULL, &input, &output, idp, &attrs)!=0){
--              LM_DBG("could not translate %.*s with dpid %i\n",
--                              input.len, input.s, idp->dp_id);
-+      LM_DBG("trying to translate %.*s with dpid %i\n", input.len, input.s,
-+                      idp->dp_id);
-+      if(dp_translate_helper(NULL, &input, &output, idp, &attrs) != 0) {
-+              LM_DBG("could not translate %.*s with dpid %i\n", input.len, input.s,
-+                              idp->dp_id);
-               rpc->fault(ctx, 500, "No translation");
-               return;
-       }
--      LM_DBG("input %.*s with dpid %i => output %.*s\n",
--                      input.len, input.s, idp->dp_id, output.len, output.s);
-+      LM_DBG("input %.*s with dpid %i => output %.*s\n", input.len, input.s,
-+                      idp->dp_id, output.len, output.s);
--      if (rpc->add(ctx, "{", &th) < 0)
--      {
-+      if(rpc->add(ctx, "{", &th) < 0) {
-               rpc->fault(ctx, 500, "Internal error creating rpc");
-               return;
-       }
--      if(rpc->struct_add(th, "SS",
--                              "Output", &output,
--                              "Attributes", &attrs)<0)
--      {
-+      if(rpc->struct_add(th, "SS", "Output", &output, "Attributes", &attrs) < 0) {
-               rpc->fault(ctx, 500, "Internal error creating rpc");
-               return;
-       }
-@@ -721,23 +712,22 @@ static void dialplan_rpc_translate(rpc_t
- /*
-  * RPC command to dump dialplan
-  */
--static void dialplan_rpc_dump(rpc_t* rpc, void* ctx)
-+static void dialplan_rpc_dump(rpc_t *rpc, void *ctx)
- {
-       dpl_id_p idp;
-       dpl_index_p indexp;
-       dpl_node_p rulep;
-       int dpid;
--      void* th;
--      void* ih;
--      void* sh;
-+      void *th;
-+      void *ih;
-+      void *sh;
--      if (rpc->scan(ctx, "d", &dpid) < 1)
--      {
-+      if(rpc->scan(ctx, "d", &dpid) < 1) {
-               rpc->fault(ctx, 500, "Missing parameter");
-               return;
-       }
--      if ((idp = select_dpid(dpid)) == 0 ) {
-+      if((idp = select_dpid(dpid)) == 0) {
-               LM_ERR("no information available for dpid %i\n", dpid);
-               rpc->fault(ctx, 500, "Dialplan ID not matched");
-               return;
-@@ -746,58 +736,49 @@ static void dialplan_rpc_dump(rpc_t* rpc
-       LM_DBG("trying to dump dpid %i\n", idp->dp_id);
-       /* add entry node */
--      if (rpc->add(ctx, "{", &th) < 0)
--      {
-+      if(rpc->add(ctx, "{", &th) < 0) {
-               rpc->fault(ctx, 500, "Internal error root reply");
-               return;
-       }
--      if(rpc->struct_add(th, "d[",
--                              "DPID",  dpid,
--                              "ENTRIES", &ih)<0)
--      {
-+      if(rpc->struct_add(th, "d[", "DPID", dpid, "ENTRIES", &ih) < 0) {
-               rpc->fault(ctx, 500, "Internal error sets structure");
-               return;
-       }
--      for(indexp=idp->first_index; indexp!=NULL;indexp=indexp->next) {
-+      for(indexp = idp->first_index; indexp != NULL; indexp = indexp->next) {
-               LM_DBG("INDEX LEN: %i\n", indexp->len);
--                for(rulep = indexp->first_rule; rulep!= NULL;rulep = rulep->next) {
-+              for(rulep = indexp->first_rule; rulep != NULL; rulep = rulep->next) {
-                       LM_DBG("DPID: %i PRIO : %i\n", rulep->dpid, rulep->pr);
--                      if (rpc->struct_add(ih, "{","ENTRY", &sh) < 0)
--                      {
-+                      if(rpc->struct_add(ih, "{", "ENTRY", &sh) < 0) {
-                               rpc->fault(ctx, 500, "Internal error root reply");
-                               return;
-                       }
--                      if (rpc->struct_add(sh, "dd", "PRIO", rulep->pr,
--                              "MATCHOP", rulep->matchop)<0)
--                      {
-+                      if(rpc->struct_add(
-+                                         sh, "dd", "PRIO", rulep->pr, "MATCHOP", rulep->matchop)
-+                                      < 0) {
-                               rpc->fault(ctx, 500, "Internal error adding prio");
-                               return;
-                       }
--                      if (rpc->struct_add(sh, "s", "MATCHEXP", rulep->match_exp) < 0 )
--                      {
-+                      if(rpc->struct_add(sh, "s", "MATCHEXP", rulep->match_exp) < 0) {
-                               rpc->fault(ctx, 500, "Internal error adding match exp");
-                               return;
-                       }
--                      if (rpc->struct_add(sh, "d", "MATCHLEN", rulep->matchlen) < 0 )
--                      {
--                              rpc->fault(ctx, 500, "Internal error adding expression data and attribute");
-+                      if(rpc->struct_add(sh, "d", "MATCHLEN", rulep->matchlen) < 0) {
-+                              rpc->fault(ctx, 500,
-+                                              "Internal error adding expression data and attribute");
-                               return;
-                       }
--                      if (rpc->struct_add(sh, "s", "SUBSTEXP", rulep->subst_exp) < 0 )
--                      {
-+                      if(rpc->struct_add(sh, "s", "SUBSTEXP", rulep->subst_exp) < 0) {
-                               rpc->fault(ctx, 500, "Internal error adding subst exp");
-                               return;
-                       }
--                      if (rpc->struct_add(sh, "s", "REPLEXP", rulep->repl_exp) < 0 )
--                      {
-+                      if(rpc->struct_add(sh, "s", "REPLEXP", rulep->repl_exp) < 0) {
-                               rpc->fault(ctx, 500, "Internal error adding replace exp ");
-                               return;
-                       }
--                      if (rpc->struct_add(sh, "s", "ATTRS", rulep->attrs) < 0 )
--                      {
-+                      if(rpc->struct_add(sh, "s", "ATTRS", rulep->attrs) < 0) {
-                               rpc->fault(ctx, 500, "Internal error adding attribute");
-                               return;
-                       }
-@@ -807,26 +788,19 @@ static void dialplan_rpc_dump(rpc_t* rpc
-       return;
- }
--static const char* dialplan_rpc_dump_doc[2] = {
--      "Dump dialplan content",
--      0
--};
-+static const char *dialplan_rpc_dump_doc[2] = {"Dump dialplan content", 0};
- rpc_export_t dialplan_rpc_list[] = {
--      {"dialplan.reload", dialplan_rpc_reload,
--              dialplan_rpc_reload_doc, 0},
--      {"dialplan.translate",   dialplan_rpc_translate,
--              dialplan_rpc_translate_doc, 0},
--      {"dialplan.dump",   dialplan_rpc_dump,
--              dialplan_rpc_dump_doc, 0},
--      {0, 0, 0, 0}
--};
-+              {"dialplan.reload", dialplan_rpc_reload, dialplan_rpc_reload_doc, 0},
-+              {"dialplan.translate", dialplan_rpc_translate,
-+                              dialplan_rpc_translate_doc, 0},
-+              {"dialplan.dump", dialplan_rpc_dump, dialplan_rpc_dump_doc, 0},
-+              {0, 0, 0, 0}};
- static int dialplan_init_rpc(void)
- {
--      if (rpc_register_array(dialplan_rpc_list)!=0)
--      {
-+      if(rpc_register_array(dialplan_rpc_list) != 0) {
-               LM_ERR("failed to register RPC commands\n");
-               return -1;
-       }
-@@ -863,20 +837,22 @@ static sr_kemi_t sr_kemi_dialplan_export
- };
- /* clang-format on */
--static int ki_dp_translate(sip_msg_t* msg, int id, str *input_spv, str *output_spv) {
-+static int ki_dp_translate(
-+              sip_msg_t *msg, int id, str *input_spv, str *output_spv)
-+{
-       str input, output;
-       dpl_id_p idp;
-       str attrs, *outattrs;
-       pv_spec_t *pvs_i = NULL, *pvs_o = NULL;
--      if (!msg)
-+      if(!msg)
-               return -1;
--      if (input_spv != NULL && (input_spv->s == NULL || input_spv->len <= 0)) {
-+      if(input_spv != NULL && (input_spv->s == NULL || input_spv->len <= 0)) {
-               LM_ERR("invalid destination var name for input\n");
-               return -1;
-       }
--      if (output_spv != NULL && (output_spv->s == NULL || output_spv->len <= 0)) {
-+      if(output_spv != NULL && (output_spv->s == NULL || output_spv->len <= 0)) {
-               LM_ERR("invalid destination var name for output\n");
-               return -1;
-       }
-@@ -892,56 +868,60 @@ static int ki_dp_translate(sip_msg_t* ms
-               pvs_o = pv_cache_get(output_spv);
-       }
--      if (pvs_i == NULL || pvs_o == NULL) {
-+      if(pvs_i == NULL || pvs_o == NULL) {
-               LM_ERR("cannot get pv spec for input or output\n");
-               return -1;
-       }
--      if ((pvs_i->type!=PVT_AVP && pvs_i->type!=PVT_XAVP && pvs_i->type!=PVT_SCRIPTVAR &&
--          pvs_i->type!=PVT_RURI && pvs_i->type!=PVT_RURI_USERNAME) ||
--          (pvs_o->type!=PVT_AVP && pvs_o->type!=PVT_XAVP && pvs_o->type!=PVT_SCRIPTVAR &&
--          pvs_o->type!=PVT_RURI && pvs_o->type!=PVT_RURI_USERNAME)) {
-+      if((pvs_i->type != PVT_AVP && pvs_i->type != PVT_XAVP
-+                         && pvs_i->type != PVT_SCRIPTVAR && pvs_i->type != PVT_RURI
-+                         && pvs_i->type != PVT_RURI_USERNAME)
-+                      || (pvs_o->type != PVT_AVP && pvs_o->type != PVT_XAVP
-+                                      && pvs_o->type != PVT_SCRIPTVAR && pvs_o->type != PVT_RURI
-+                                      && pvs_o->type != PVT_RURI_USERNAME)) {
-               LM_ERR("type of pv error\n");
-               return -1;
-       }
--      if ((idp = select_dpid(id)) ==0 ){
-+      if((idp = select_dpid(id)) == 0) {
-               LM_DBG("no information available for dpid %i\n", id);
-               return -2;
-       }
-       /* get the input */
--      if (dp_get_svalue(msg, pvs_i, &input)!=0){
-+      if(dp_get_svalue(msg, pvs_i, &input) != 0) {
-               LM_ERR("invalid param 2\n");
-               return -1;
-       }
-       LM_DBG("input is %.*s\n", input.len, input.s);
--      outattrs = (!dp_attr_pvar)?NULL:&attrs;
--      if (dp_translate_helper(msg, &input, &output, idp, outattrs)!=0) {
-+      outattrs = (!dp_attr_pvar) ? NULL : &attrs;
-+      if(dp_translate_helper(msg, &input, &output, idp, outattrs) != 0) {
-               LM_DBG("could not translate %.*s "
--                              "with dpid %i\n", input.len, input.s, idp->dp_id);
-+                         "with dpid %i\n",
-+                              input.len, input.s, idp->dp_id);
-               return -1;
-       }
--      LM_DBG("input %.*s with dpid %i => output %.*s\n",
--                      input.len, input.s, idp->dp_id, output.len, output.s);
-+      LM_DBG("input %.*s with dpid %i => output %.*s\n", input.len, input.s,
-+                      idp->dp_id, output.len, output.s);
-       /* set the output */
--      if (dp_update(msg, pvs_o, &output, outattrs) !=0){
-+      if(dp_update(msg, pvs_o, &output, outattrs) != 0) {
-               LM_ERR("cannot set the output\n");
-               return -1;
-       }
-       return 1;
--
- }
--static int ki_dp_translate_id(sip_msg_t* msg, int id) {
-+static int ki_dp_translate_id(sip_msg_t *msg, int id)
-+{
-       return ki_dp_translate(msg, id, NULL, NULL);
- }
--static int ki_dp_translate_vars(sip_msg_t* msg, int id, str *input, str *output) {
-+static int ki_dp_translate_vars(sip_msg_t *msg, int id, str *input, str *output)
-+{
-       return ki_dp_translate(msg, id, input, output);
- }
---- a/src/modules/dialplan/dialplan.h
-+++ b/src/modules/dialplan/dialplan.h
-@@ -34,59 +34,64 @@
- #include "../../core/pvar.h"
- #include "../../core/parser/msg_parser.h"
--#define DP_EQUAL_OP           0
--#define DP_REGEX_OP           1
--#define DP_FNMATCH_OP 2
--
--#define MAX_REPLACE_WITH      10
--
--#define DP_TFLAGS_PV_MATCH            (1 << 0)
--#define DP_TFLAGS_PV_SUBST            (1 << 1)
--
--typedef struct dpl_node {
--      int dpid;         /* dialplan id */
--      int pr;           /* priority */
--      int matchop;      /* matching operator */
--      int matchlen;     /* matching value length */
--      str match_exp;    /* match-first string */
--      str subst_exp;    /* match string with subtitution groupping */
--      str repl_exp;     /* replacement expression string */
--      pcre *match_comp; /* compiled matching expression */
--      pcre *subst_comp; /* compiled substitution expression */
-+#define DP_EQUAL_OP 0
-+#define DP_REGEX_OP 1
-+#define DP_FNMATCH_OP 2
-+
-+#define MAX_REPLACE_WITH 10
-+
-+#define DP_TFLAGS_PV_MATCH (1 << 0)
-+#define DP_TFLAGS_PV_SUBST (1 << 1)
-+
-+typedef struct dpl_node
-+{
-+      int dpid;                                         /* dialplan id */
-+      int pr;                                           /* priority */
-+      int matchop;                              /* matching operator */
-+      int matchlen;                             /* matching value length */
-+      str match_exp;                            /* match-first string */
-+      str subst_exp;                            /* match string with subtitution groupping */
-+      str repl_exp;                             /* replacement expression string */
-+      pcre *match_comp;                         /* compiled matching expression */
-+      pcre *subst_comp;                         /* compiled substitution expression */
-       struct subst_expr *repl_comp; /* compiled replacement */
--      str attrs;        /* attributes string */
--      unsigned int tflags; /* flags for type of values for matching */
-+      str attrs;                                        /* attributes string */
-+      unsigned int tflags;              /* flags for type of values for matching */
--      struct dpl_node * next; /* next rule */
-+      struct dpl_node *next; /* next rule */
- } dpl_node_t, *dpl_node_p;
- /*For every distinct length of a matching string*/
--typedef struct dpl_index{
-+typedef struct dpl_index
-+{
-       int len;
--      dpl_node_t * first_rule;
--      dpl_node_t * last_rule;
-+      dpl_node_t *first_rule;
-+      dpl_node_t *last_rule;
--      struct dpl_index * next; 
--}dpl_index_t, *dpl_index_p;
-+      struct dpl_index *next;
-+} dpl_index_t, *dpl_index_p;
- /*For every DPID*/
--typedef struct dpl_id{
-+typedef struct dpl_id
-+{
-       int dp_id;
--      dpl_index_t* first_index;/*fast access :rules with specific length*/
--      struct dpl_id * next;
--}dpl_id_t,*dpl_id_p;
-+      dpl_index_t *first_index; /*fast access :rules with specific length*/
-+      struct dpl_id *next;
-+} dpl_id_t, *dpl_id_p;
--#define DP_VAL_INT            0
--#define DP_VAL_SPEC           1
-+#define DP_VAL_INT 0
-+#define DP_VAL_SPEC 1
--typedef struct dp_param{
-+typedef struct dp_param
-+{
-       int type;
--      union {
-+      union
-+      {
-               int id;
--              pv_spec_t* sp[2];
-+              pv_spec_t *sp[2];
-       } v;
--}dp_param_t, *dp_param_p;
-+} dp_param_t, *dp_param_p;
- int init_data();
- void destroy_data();
-@@ -94,12 +99,12 @@ int dp_load_db();
- dpl_id_p select_dpid(int id);
--struct subst_expr* repl_exp_parse(str subst);
-+struct subst_expr *repl_exp_parse(str subst);
- void repl_expr_free(struct subst_expr *se);
--int dp_translate_helper(sip_msg_t *msg, str *user_name, str *repl_user,
--              dpl_id_p idp, str *);
--int rule_translate(sip_msg_t *msg, str *instr, dpl_node_t *rule,
--              pcre *subst_comp, str *);
-+int dp_translate_helper(
-+              sip_msg_t *msg, str *user_name, str *repl_user, dpl_id_p idp, str *);
-+int rule_translate(
-+              sip_msg_t *msg, str *instr, dpl_node_t *rule, pcre *subst_comp, str *);
- pcre *reg_ex_comp(const char *pattern, int *cap_cnt, int mtype);
- #endif
---- a/src/modules/dialplan/dp_db.c
-+++ b/src/modules/dialplan/dp_db.c
-@@ -37,45 +37,46 @@
- #include "dp_db.h"
- #include "dialplan.h"
--str dp_db_url       =   str_init(DEFAULT_RODB_URL);
--str dp_table_name   =   str_init(DP_TABLE_NAME);
--str dpid_column     =   str_init(DPID_COL);
--str pr_column       =   str_init(PR_COL);
--str match_op_column =   str_init(MATCH_OP_COL);
--str match_exp_column=   str_init(MATCH_EXP_COL);
--str match_len_column=   str_init(MATCH_LEN_COL);
--str subst_exp_column=   str_init(SUBST_EXP_COL);
--str repl_exp_column =   str_init(REPL_EXP_COL);
--str attrs_column    =   str_init(ATTRS_COL);
-+str dp_db_url = str_init(DEFAULT_RODB_URL);
-+str dp_table_name = str_init(DP_TABLE_NAME);
-+str dpid_column = str_init(DPID_COL);
-+str pr_column = str_init(PR_COL);
-+str match_op_column = str_init(MATCH_OP_COL);
-+str match_exp_column = str_init(MATCH_EXP_COL);
-+str match_len_column = str_init(MATCH_LEN_COL);
-+str subst_exp_column = str_init(SUBST_EXP_COL);
-+str repl_exp_column = str_init(REPL_EXP_COL);
-+str attrs_column = str_init(ATTRS_COL);
- extern int dp_fetch_rows;
- extern int dp_match_dynamic;
--static db1_con_t* dp_db_handle    = 0; /* database connection handle */
-+static db1_con_t *dp_db_handle = 0; /* database connection handle */
- static db_func_t dp_dbf;
--#define GET_STR_VALUE(_res, _values, _index)\
--      do{\
--              if ( VAL_NULL((_values)+ (_index)) ) { \
--                      LM_ERR(" values %d is NULL - not allowed\n",_index);\
--                      (_res).s = 0; (_res).len = 0;\
--                      goto err;\
--              } \
--              (_res).s = VAL_STR((_values)+ (_index)).s;\
--              (_res).len = strlen(VAL_STR((_values)+ (_index)).s);\
--      }while(0);
-+#define GET_STR_VALUE(_res, _values, _index)                      \
-+      do {                                                          \
-+              if(VAL_NULL((_values) + (_index))) {                      \
-+                      LM_ERR(" values %d is NULL - not allowed\n", _index); \
-+                      (_res).s = 0;                                         \
-+                      (_res).len = 0;                                       \
-+                      goto err;                                             \
-+              }                                                         \
-+              (_res).s = VAL_STR((_values) + (_index)).s;               \
-+              (_res).len = strlen(VAL_STR((_values) + (_index)).s);     \
-+      } while(0);
--void destroy_rule(dpl_node_t * rule);
-+void destroy_rule(dpl_node_t *rule);
- void destroy_hash(int);
--dpl_node_t * build_rule(db_val_t * values);
-+dpl_node_t *build_rule(db_val_t *values);
- int add_rule2hash(dpl_node_t *, int);
--void list_rule(dpl_node_t * );
-+void list_rule(dpl_node_t *);
- void list_hash(int h_index);
--static dpl_id_p* dp_rules_hash = NULL;
-+static dpl_id_p *dp_rules_hash = NULL;
- static int *dp_crt_idx = NULL;
- static int *dp_next_idx = NULL;
-@@ -91,7 +92,7 @@ int dpl_check_pv(str *in)
-       str s;
-       int len;
--      if(in==NULL || in->s==NULL)
-+      if(in == NULL || in->s == NULL)
-               return -1;
-       LM_DBG("parsing [%.*s]\n", in->len, in->s);
-@@ -101,26 +102,27 @@ int dpl_check_pv(str *in)
-       p = in->s;
--      while(is_in_str(p,in))
--      {
--              while(is_in_str(p,in) && *p!=PV_MARKER)
-+      while(is_in_str(p, in)) {
-+              while(is_in_str(p, in) && *p != PV_MARKER)
-                       p++;
--              if(*p == '\0' || !is_in_str(p,in))
-+              if(*p == '\0' || !is_in_str(p, in))
-                       break;
-               /* last char is $ ? */
--              if(!is_in_str(p+1, in))
-+              if(!is_in_str(p + 1, in))
-                       break;
-               s.s = p;
--              s.len = in->s+in->len-p;
-+              s.len = in->s + in->len - p;
-               len = 0;
-               spec = pv_spec_lookup(&s, &len);
--              if(spec!=NULL) {
-+              if(spec != NULL) {
-                       /* found a variable */
-                       LM_DBG("string [%.*s] has variables\n", in->len, in->s);
-                       return 0;
-               }
--              if(len) p += len;
--              else p++;
-+              if(len)
-+                      p += len;
-+              else
-+                      p++;
-       }
-       /* not found */
-@@ -129,27 +131,28 @@ int dpl_check_pv(str *in)
- int init_db_data(void)
- {
--      if(!dp_table_name.s || dp_table_name.len<=0){
-+      if(!dp_table_name.s || dp_table_name.len <= 0) {
-               LM_ERR("invalid database table name\n");
-               return -1;
-       }
-       /* Find a database module */
--      if (db_bind_mod(&dp_db_url, &dp_dbf) < 0){
-+      if(db_bind_mod(&dp_db_url, &dp_dbf) < 0) {
-               LM_ERR("unable to bind to a database driver\n");
-               return -1;
-       }
--      if(dp_connect_db() !=0)
-+      if(dp_connect_db() != 0)
-               return -1;
--      if(db_check_table_version(&dp_dbf, dp_db_handle, &dp_table_name,
--                              DP_TABLE_VERSION) < 0) {
-+      if(db_check_table_version(
-+                         &dp_dbf, dp_db_handle, &dp_table_name, DP_TABLE_VERSION)
-+                      < 0) {
-               DB_TABLE_VERSION_ERROR(dp_table_name);
-               goto error;
-       }
--      if(dp_load_db() != 0){
-+      if(dp_load_db() != 0) {
-               LM_ERR("failed to load database data\n");
-               goto error;
-       }
-@@ -166,17 +169,17 @@ error:
- int dp_connect_db(void)
- {
--      if (dp_dbf.init==0){
-+      if(dp_dbf.init == 0) {
-               LM_CRIT("null dp_dbf\n");
-               return -1;
-       }
--      if(dp_db_handle){
-+      if(dp_db_handle) {
-               LM_CRIT("BUG: connection to database already open\n");
-               return -1;
-       }
--      if ((dp_db_handle = dp_dbf.init(&dp_db_url)) == 0){
-+      if((dp_db_handle = dp_dbf.init(&dp_db_url)) == 0) {
-               LM_ERR("unable to connect to the database\n");
-               return -1;
-       }
-@@ -187,7 +190,7 @@ int dp_connect_db(void)
- void dp_disconnect_db(void)
- {
--      if(dp_db_handle){
-+      if(dp_db_handle) {
-               dp_dbf.close(dp_db_handle);
-               dp_db_handle = 0;
-       }
-@@ -198,20 +201,20 @@ int init_data(void)
- {
-       int *p;
--      dp_rules_hash = (dpl_id_p *)shm_malloc(2*sizeof(dpl_id_p));
-+      dp_rules_hash = (dpl_id_p *)shm_malloc(2 * sizeof(dpl_id_p));
-       if(!dp_rules_hash) {
-               LM_ERR("out of shm memory\n");
-               return -1;
-       }
-       dp_rules_hash[0] = dp_rules_hash[1] = 0;
--      p = (int *)shm_malloc(2*sizeof(int));
--      if(!p){
-+      p = (int *)shm_malloc(2 * sizeof(int));
-+      if(!p) {
-               LM_ERR("out of shm memory\n");
-               return -1;
-       }
-       dp_crt_idx = p;
--      dp_next_idx = p+1;
-+      dp_next_idx = p + 1;
-       *dp_crt_idx = *dp_next_idx = 0;
-       LM_DBG("trying to initialize data from db\n");
-@@ -224,7 +227,7 @@ int init_data(void)
- void destroy_data(void)
- {
--      if(dp_rules_hash){
-+      if(dp_rules_hash) {
-               destroy_hash(0);
-               destroy_hash(1);
-               shm_free(dp_rules_hash);
-@@ -240,45 +243,46 @@ void destroy_data(void)
- int dp_load_db(void)
- {
-       int i, nr_rows;
--      db1_res_t * res = 0;
--      db_val_t * values;
--      db_row_t * rows;
--      db_key_t query_cols[DP_TABLE_COL_NO] = {
--              &dpid_column,   &pr_column,
--              &match_op_column,       &match_exp_column,      &match_len_column,
--              &subst_exp_column,      &repl_exp_column,       &attrs_column };
-+      db1_res_t *res = 0;
-+      db_val_t *values;
-+      db_row_t *rows;
-+      db_key_t query_cols[DP_TABLE_COL_NO] = {&dpid_column, &pr_column,
-+                      &match_op_column, &match_exp_column, &match_len_column,
-+                      &subst_exp_column, &repl_exp_column, &attrs_column};
-       db_key_t order = &pr_column;
-       dpl_node_t *rule;
-       LM_DBG("init\n");
--      if( (*dp_crt_idx) != (*dp_next_idx)){
-+      if((*dp_crt_idx) != (*dp_next_idx)) {
-               LM_WARN("a load command already generated, aborting reload...\n");
-               return 0;
-       }
--      if (dp_dbf.use_table(dp_db_handle, &dp_table_name) < 0){
-+      if(dp_dbf.use_table(dp_db_handle, &dp_table_name) < 0) {
-               LM_ERR("error in use_table %.*s\n", dp_table_name.len, dp_table_name.s);
-               return -1;
-       }
--      if (DB_CAPABILITY(dp_dbf, DB_CAP_FETCH)) {
--              if(dp_dbf.query(dp_db_handle,0,0,0,query_cols, 0,
--                                      DP_TABLE_COL_NO, order, 0) < 0){
-+      if(DB_CAPABILITY(dp_dbf, DB_CAP_FETCH)) {
-+              if(dp_dbf.query(dp_db_handle, 0, 0, 0, query_cols, 0, DP_TABLE_COL_NO,
-+                                 order, 0)
-+                              < 0) {
-                       LM_ERR("failed to query database!\n");
-                       return -1;
-               }
--              if(dp_dbf.fetch_result(dp_db_handle, &res, dp_fetch_rows)<0) {
-+              if(dp_dbf.fetch_result(dp_db_handle, &res, dp_fetch_rows) < 0) {
-                       LM_ERR("failed to fetch\n");
--                      if (res)
-+                      if(res)
-                               dp_dbf.free_result(dp_db_handle, res);
-                       return -1;
-               }
-       } else {
-               /*select the whole table and all the columns*/
--              if(dp_dbf.query(dp_db_handle,0,0,0,query_cols, 0, 
--                                      DP_TABLE_COL_NO, order, &res) < 0){
-+              if(dp_dbf.query(dp_db_handle, 0, 0, 0, query_cols, 0, DP_TABLE_COL_NO,
-+                                 order, &res)
-+                              < 0) {
-                       LM_ERR("failed to query database\n");
-                       return -1;
-               }
-@@ -286,38 +290,37 @@ int dp_load_db(void)
-       nr_rows = RES_ROW_N(res);
--      *dp_next_idx = ((*dp_crt_idx) == 0)? 1:0;
-+      *dp_next_idx = ((*dp_crt_idx) == 0) ? 1 : 0;
-       destroy_hash(*dp_next_idx);
--      if(nr_rows == 0){
-+      if(nr_rows == 0) {
-               LM_WARN("no data in the db\n");
-               goto end;
-       }
-       do {
--              for(i=0; i<RES_ROW_N(res); i++){
--                      rows    = RES_ROWS(res);
-+              for(i = 0; i < RES_ROW_N(res); i++) {
-+                      rows = RES_ROWS(res);
--                      values = ROW_VALUES(rows+i);
-+                      values = ROW_VALUES(rows + i);
--                      if((rule = build_rule(values)) ==0 )
-+                      if((rule = build_rule(values)) == 0)
-                               goto err2;
-                       if(add_rule2hash(rule, *dp_next_idx) != 0)
-                               goto err2;
--
-               }
--              if (DB_CAPABILITY(dp_dbf, DB_CAP_FETCH)) {
--                      if(dp_dbf.fetch_result(dp_db_handle, &res, dp_fetch_rows)<0) {
-+              if(DB_CAPABILITY(dp_dbf, DB_CAP_FETCH)) {
-+                      if(dp_dbf.fetch_result(dp_db_handle, &res, dp_fetch_rows) < 0) {
-                               LM_ERR("failure while fetching!\n");
--                              if (res)
-+                              if(res)
-                                       dp_dbf.free_result(dp_db_handle, res);
-                               return -1;
-                       }
-               } else {
-                       break;
-               }
--      }  while(RES_ROW_N(res)>0);
-+      } while(RES_ROW_N(res) > 0);
- end:
-@@ -328,7 +331,8 @@ end:
-       return 0;
- err2:
--      if(rule)        destroy_rule(rule);
-+      if(rule)
-+              destroy_rule(rule);
-       destroy_hash(*dp_next_idx);
-       dp_dbf.free_result(dp_db_handle, res);
-       *dp_next_idx = *dp_crt_idx;
-@@ -340,16 +344,17 @@ int dpl_str_to_shm(str src, str *dest, i
- {
-       int mdup = 0;
--      if(src.len ==0 || src.s ==0)
-+      if(src.len == 0 || src.s == 0)
-               return 0;
--      if(mterm!=0 && PV_MARKER=='$') {
--              if(src.len>1 && src.s[src.len-1]=='$' && src.s[src.len-2]!='$') {
-+      if(mterm != 0 && PV_MARKER == '$') {
-+              if(src.len > 1 && src.s[src.len - 1] == '$'
-+                              && src.s[src.len - 2] != '$') {
-                       mdup = 1;
-               }
-       }
--      dest->s = (char*)shm_malloc((src.len+1+mdup) * sizeof(char));
--      if(!dest->s){
-+      dest->s = (char *)shm_malloc((src.len + 1 + mdup) * sizeof(char));
-+      if(!dest->s) {
-               LM_ERR("out of shm memory\n");
-               return -1;
-       }
-@@ -378,28 +383,28 @@ pcre *reg_ex_comp(const char *pattern, i
-       size_t size;
-       re = pcre_compile(pattern, 0, &error, &err_offset, NULL);
--      if (re == NULL) {
--              LM_ERR("PCRE compilation of '%s' failed at offset %d: %s\n",
--                              pattern, err_offset, error);
-+      if(re == NULL) {
-+              LM_ERR("PCRE compilation of '%s' failed at offset %d: %s\n", pattern,
-+                              err_offset, error);
-               return (pcre *)0;
-       }
-       rc = pcre_fullinfo(re, NULL, PCRE_INFO_SIZE, &size);
--      if (rc != 0) {
-+      if(rc != 0) {
-               pcre_free(re);
-               LM_ERR("pcre_fullinfo on compiled pattern '%s' yielded error: %d\n",
-                               pattern, rc);
-               return (pcre *)0;
-       }
-       rc = pcre_fullinfo(re, NULL, PCRE_INFO_CAPTURECOUNT, cap_cnt);
--      if (rc != 0) {
-+      if(rc != 0) {
-               pcre_free(re);
-               LM_ERR("pcre_fullinfo on compiled pattern '%s' yielded error: %d\n",
-                               pattern, rc);
-               return (pcre *)0;
-       }
--      if(mtype==0) {
-+      if(mtype == 0) {
-               result = (pcre *)shm_malloc(size);
--              if (result == NULL) {
-+              if(result == NULL) {
-                       pcre_free(re);
-                       LM_ERR("not enough shared memory for compiled PCRE pattern\n");
-                       return (pcre *)0;
-@@ -414,20 +419,20 @@ pcre *reg_ex_comp(const char *pattern, i
- /*compile the expressions, and if ok, build the rule */
--dpl_node_t * build_rule(db_val_t * values)
-+dpl_node_t *build_rule(db_val_t *values)
- {
-       pcre *match_comp, *subst_comp;
-       struct subst_expr *repl_comp;
--      dpl_node_t * new_rule;
-+      dpl_node_t *new_rule;
-       str match_exp, subst_exp, repl_exp, attrs;
-       int matchop;
--      int cap_cnt=0;
--      unsigned int tflags=0;
-+      int cap_cnt = 0;
-+      unsigned int tflags = 0;
--      matchop = VAL_INT(values+2);
-+      matchop = VAL_INT(values + 2);
--      if((matchop != DP_REGEX_OP) && (matchop!=DP_EQUAL_OP)
--                      && (matchop!=DP_FNMATCH_OP)){
-+      if((matchop != DP_REGEX_OP) && (matchop != DP_EQUAL_OP)
-+                      && (matchop != DP_FNMATCH_OP)) {
-               LM_ERR("invalid value for match operator\n");
-               return NULL;
-       }
-@@ -437,15 +442,15 @@ dpl_node_t * build_rule(db_val_t * value
-       new_rule = 0;
-       GET_STR_VALUE(match_exp, values, 3);
--      if(matchop == DP_REGEX_OP){
--              if(unlikely(dp_match_dynamic==1)) {
--                      if(dpl_check_pv(&match_exp)==0) {
-+      if(matchop == DP_REGEX_OP) {
-+              if(unlikely(dp_match_dynamic == 1)) {
-+                      if(dpl_check_pv(&match_exp) == 0) {
-                               tflags |= DP_TFLAGS_PV_MATCH;
-                       }
-               }
--              if(!(tflags&DP_TFLAGS_PV_MATCH)) {
-+              if(!(tflags & DP_TFLAGS_PV_MATCH)) {
-                       match_comp = reg_ex_comp(match_exp.s, &cap_cnt, 0);
--                      if(!match_comp){
-+                      if(!match_comp) {
-                               LM_ERR("failed to compile match expression %.*s\n",
-                                               match_exp.len, match_exp.s);
-                               goto err;
-@@ -454,9 +459,9 @@ dpl_node_t * build_rule(db_val_t * value
-       }
-       GET_STR_VALUE(repl_exp, values, 6);
--      if(repl_exp.len && repl_exp.s){
-+      if(repl_exp.len && repl_exp.s) {
-               repl_comp = repl_exp_parse(repl_exp);
--              if(!repl_comp){
-+              if(!repl_comp) {
-                       LM_ERR("failed to compile replacing expression %.*s\n",
-                                       repl_exp.len, repl_exp.s);
-                       goto err;
-@@ -465,20 +470,20 @@ dpl_node_t * build_rule(db_val_t * value
-       cap_cnt = 0;
-       GET_STR_VALUE(subst_exp, values, 5);
--      if(subst_exp.s && subst_exp.len){
--              if(unlikely(dp_match_dynamic==1)) {
--                      if(dpl_check_pv(&subst_exp)==0) {
-+      if(subst_exp.s && subst_exp.len) {
-+              if(unlikely(dp_match_dynamic == 1)) {
-+                      if(dpl_check_pv(&subst_exp) == 0) {
-                               tflags |= DP_TFLAGS_PV_SUBST;
-                       }
-               }
--              if(!(tflags&DP_TFLAGS_PV_SUBST)) {
-+              if(!(tflags & DP_TFLAGS_PV_SUBST)) {
-                       subst_comp = reg_ex_comp(subst_exp.s, &cap_cnt, 0);
--                      if(!subst_comp){
-+                      if(!subst_comp) {
-                               LM_ERR("failed to compile subst expression %.*s\n",
-                                               subst_exp.len, subst_exp.s);
-                               goto err;
-                       }
--                      if (cap_cnt > MAX_REPLACE_WITH) {
-+                      if(cap_cnt > MAX_REPLACE_WITH) {
-                               LM_ERR("subst expression %.*s has too many sub-expressions\n",
-                                               subst_exp.len, subst_exp.s);
-                               goto err;
-@@ -486,72 +491,77 @@ dpl_node_t * build_rule(db_val_t * value
-               }
-       }
--      LM_DBG("building rule for [%d:%.*s/%.*s/%.*s]\n", matchop,
--                      match_exp.len, ZSW(match_exp.s), subst_exp.len, ZSW(subst_exp.s),
--                      repl_exp.len, ZSW(repl_exp.s));
--      if (!(tflags&(DP_TFLAGS_PV_SUBST|DP_TFLAGS_PV_MATCH)) &&
--              repl_comp && (cap_cnt < repl_comp->max_pmatch) &&
--              (repl_comp->max_pmatch != 0))
--      {
-+      LM_DBG("building rule for [%d:%.*s/%.*s/%.*s]\n", matchop, match_exp.len,
-+                      ZSW(match_exp.s), subst_exp.len, ZSW(subst_exp.s), repl_exp.len,
-+                      ZSW(repl_exp.s));
-+      if(!(tflags & (DP_TFLAGS_PV_SUBST | DP_TFLAGS_PV_MATCH)) && repl_comp
-+                      && (cap_cnt < repl_comp->max_pmatch)
-+                      && (repl_comp->max_pmatch != 0)) {
-               LM_ERR("repl_exp %.*s refers to %d sub-expressions, but "
--                              "subst_exp %.*s has only %d\n",
--                              repl_exp.len, repl_exp.s, repl_comp->max_pmatch,
--                              subst_exp.len, subst_exp.s, cap_cnt);
-+                         "subst_exp %.*s has only %d\n",
-+                              repl_exp.len, repl_exp.s, repl_comp->max_pmatch, subst_exp.len,
-+                              subst_exp.s, cap_cnt);
-               goto err;
-       }
-       new_rule = (dpl_node_t *)shm_malloc(sizeof(dpl_node_t));
--      if(!new_rule){
-+      if(!new_rule) {
-               LM_ERR("out of shm memory(new_rule)\n");
-               goto err;
-       }
-       memset(new_rule, 0, sizeof(dpl_node_t));
--      if(dpl_str_to_shm(match_exp, &new_rule->match_exp,
--                              tflags&DP_TFLAGS_PV_MATCH)!=0)
-+      if(dpl_str_to_shm(
-+                         match_exp, &new_rule->match_exp, tflags & DP_TFLAGS_PV_MATCH)
-+                      != 0)
-               goto err;
--      if(dpl_str_to_shm(subst_exp, &new_rule->subst_exp,
--                              tflags&DP_TFLAGS_PV_SUBST)!=0)
-+      if(dpl_str_to_shm(
-+                         subst_exp, &new_rule->subst_exp, tflags & DP_TFLAGS_PV_SUBST)
-+                      != 0)
-               goto err;
--      if(dpl_str_to_shm(repl_exp, &new_rule->repl_exp, 0)!=0)
-+      if(dpl_str_to_shm(repl_exp, &new_rule->repl_exp, 0) != 0)
-               goto err;
-       /*set the rest of the rule fields*/
--      new_rule->dpid          =       VAL_INT(values);
--      new_rule->pr            =       VAL_INT(values+1);
--      new_rule->matchlen      =       VAL_INT(values+4);
--      new_rule->matchop       =       matchop;
-+      new_rule->dpid = VAL_INT(values);
-+      new_rule->pr = VAL_INT(values + 1);
-+      new_rule->matchlen = VAL_INT(values + 4);
-+      new_rule->matchop = matchop;
-       GET_STR_VALUE(attrs, values, 7);
--      if(dpl_str_to_shm(attrs, &new_rule->attrs, 0)!=0)
-+      if(dpl_str_to_shm(attrs, &new_rule->attrs, 0) != 0)
-               goto err;
-       LM_DBG("attrs are: '%.*s'\n", new_rule->attrs.len, new_rule->attrs.s);
-       new_rule->match_comp = match_comp;
-       new_rule->subst_comp = subst_comp;
--      new_rule->repl_comp  = repl_comp;
--      new_rule->tflags     = tflags;
-+      new_rule->repl_comp = repl_comp;
-+      new_rule->tflags = tflags;
-       return new_rule;
- err:
--      if(match_comp) shm_free(match_comp);
--      if(subst_comp) shm_free(subst_comp);
--      if(repl_comp) repl_expr_free(repl_comp);
--      if(new_rule) destroy_rule(new_rule);
-+      if(match_comp)
-+              shm_free(match_comp);
-+      if(subst_comp)
-+              shm_free(subst_comp);
-+      if(repl_comp)
-+              repl_expr_free(repl_comp);
-+      if(new_rule)
-+              destroy_rule(new_rule);
-       return NULL;
- }
--int add_rule2hash(dpl_node_t * rule, int h_index)
-+int add_rule2hash(dpl_node_t *rule, int h_index)
- {
-       dpl_id_p crt_idp, last_idp;
-       dpl_index_p indexp, last_indexp, new_indexp;
-       int new_id;
--      if(!dp_rules_hash){
-+      if(!dp_rules_hash) {
-               LM_ERR("data not allocated\n");
-               return -1;
-       }
-@@ -559,15 +569,15 @@ int add_rule2hash(dpl_node_t * rule, int
-       new_id = 0;
-       /*search for the corresponding dpl_id*/
--      for(crt_idp = last_idp =dp_rules_hash[h_index]; crt_idp!= NULL;
-+      for(crt_idp = last_idp = dp_rules_hash[h_index]; crt_idp != NULL;
-                       last_idp = crt_idp, crt_idp = crt_idp->next)
-               if(crt_idp->dp_id == rule->dpid)
-                       break;
-       /*didn't find a dpl_id*/
--      if(!crt_idp){
--              crt_idp = (dpl_id_t*)shm_malloc(sizeof(dpl_id_t));
--              if(!crt_idp){
-+      if(!crt_idp) {
-+              crt_idp = (dpl_id_t *)shm_malloc(sizeof(dpl_id_t));
-+              if(!crt_idp) {
-                       LM_ERR("out of shm memory (crt_idp)\n");
-                       return -1;
-               }
-@@ -578,11 +588,12 @@ int add_rule2hash(dpl_node_t * rule, int
-       }
-       /*search for the corresponding dpl_index*/
--      for(indexp = last_indexp =crt_idp->first_index; indexp!=NULL;
--                      last_indexp = indexp, indexp = indexp->next){
-+      for(indexp = last_indexp = crt_idp->first_index; indexp != NULL;
-+                      last_indexp = indexp, indexp = indexp->next) {
-               if(indexp->len == rule->matchlen)
-                       goto add_rule;
--              if((rule->matchlen!=0)&&((indexp->len)?(indexp->len>rule->matchlen):1))
-+              if((rule->matchlen != 0)
-+                              && ((indexp->len) ? (indexp->len > rule->matchlen) : 1))
-                       goto add_index;
-       }
-@@ -590,18 +601,18 @@ add_index:
-       LM_DBG("new index , len %i\n", rule->matchlen);
-       new_indexp = (dpl_index_t *)shm_malloc(sizeof(dpl_index_t));
--      if(!new_indexp){
-+      if(!new_indexp) {
-               LM_ERR("out of shm memory\n");
-               goto err;
-       }
--      memset(new_indexp , 0, sizeof(dpl_index_t));
-+      memset(new_indexp, 0, sizeof(dpl_index_t));
-       new_indexp->next = indexp;
-       new_indexp->len = rule->matchlen;
-       /*add as first index*/
--      if(last_indexp == indexp){
-+      if(last_indexp == indexp) {
-               crt_idp->first_index = new_indexp;
--      }else{
-+      } else {
-               last_indexp->next = new_indexp;
-       }
-@@ -617,13 +628,13 @@ add_rule:
-       indexp->last_rule = rule;
--      if(new_id){
-+      if(new_id) {
-               crt_idp->next = dp_rules_hash[h_index];
-               dp_rules_hash[h_index] = crt_idp;
-       }
-       LM_DBG("added the rule id %i index %i pr %i next %p to the "
--                      "index with %i len\n", rule->dpid, rule->matchlen,
--                      rule->pr, rule->next, indexp->len);
-+                 "index with %i len\n",
-+                      rule->dpid, rule->matchlen, rule->pr, rule->next, indexp->len);
-       return 0;
-@@ -643,24 +654,23 @@ void destroy_hash(int index)
-       if(!dp_rules_hash[index])
-               return;
--      for(crt_idp = dp_rules_hash[index]; crt_idp != NULL;){
-+      for(crt_idp = dp_rules_hash[index]; crt_idp != NULL;) {
--              for(indexp = crt_idp->first_index; indexp != NULL;){
-+              for(indexp = crt_idp->first_index; indexp != NULL;) {
--                      for(rulep = indexp->first_rule; rulep!= NULL;){
-+                      for(rulep = indexp->first_rule; rulep != NULL;) {
-                               destroy_rule(rulep);
-                               indexp->first_rule = rulep->next;
-                               shm_free(rulep);
--                              rulep=0;
--                              rulep= indexp->first_rule;
-+                              rulep = 0;
-+                              rulep = indexp->first_rule;
-                       }
--                      crt_idp->first_index= indexp->next;
-+                      crt_idp->first_index = indexp->next;
-                       shm_free(indexp);
--                      indexp=0;
-+                      indexp = 0;
-                       indexp = crt_idp->first_index;
--
-               }
-               dp_rules_hash[index] = crt_idp->next;
-@@ -673,13 +683,13 @@ void destroy_hash(int index)
- }
--void destroy_rule(dpl_node_t * rule){
-+void destroy_rule(dpl_node_t *rule)
-+{
-       if(!rule)
-               return;
--      LM_DBG("destroying rule with priority %i\n",
--                      rule->pr);
-+      LM_DBG("destroying rule with priority %i\n", rule->pr);
-       if(rule->match_comp)
-               shm_free(rule->match_comp);
-@@ -712,7 +722,7 @@ dpl_id_p select_dpid(int id)
-       if(!dp_rules_hash || !dp_crt_idx)
-               return NULL;
--      for(idp = dp_rules_hash[*dp_crt_idx]; idp!=NULL; idp = idp->next)
-+      for(idp = dp_rules_hash[*dp_crt_idx]; idp != NULL; idp = idp->next)
-               if(idp->dp_id == id)
-                       return idp;
-@@ -731,11 +741,14 @@ void list_hash(int h_index)
-       if(!dp_rules_hash[h_index])
-               return;
--      for(crt_idp=dp_rules_hash[h_index]; crt_idp!=NULL; crt_idp = crt_idp->next){
-+      for(crt_idp = dp_rules_hash[h_index]; crt_idp != NULL;
-+                      crt_idp = crt_idp->next) {
-               LM_DBG("DPID: %i, pointer %p\n", crt_idp->dp_id, crt_idp);
--              for(indexp=crt_idp->first_index; indexp!=NULL;indexp= indexp->next){
-+              for(indexp = crt_idp->first_index; indexp != NULL;
-+                              indexp = indexp->next) {
-                       LM_DBG("INDEX LEN: %i\n", indexp->len);
--                      for(rulep = indexp->first_rule; rulep!= NULL;rulep = rulep->next){
-+                      for(rulep = indexp->first_rule; rulep != NULL;
-+                                      rulep = rulep->next) {
-                               list_rule(rulep);
-                       }
-               }
-@@ -746,12 +759,9 @@ void list_hash(int h_index)
- void list_rule(dpl_node_t *rule)
- {
-       LM_DBG("RULE %p: pr %i next %p op %d tflags %u match_exp %.*s, "
--                      "subst_exp %.*s, repl_exp %.*s and attrs %.*s\n", rule,
--                      rule->pr, rule->next,
--                      rule->matchop, rule->tflags,
--                      rule->match_exp.len, ZSW(rule->match_exp.s),
--                      rule->subst_exp.len, ZSW(rule->subst_exp.s),
--                      rule->repl_exp.len, ZSW(rule->repl_exp.s),
--                      rule->attrs.len,        ZSW(rule->attrs.s));
--
-+                 "subst_exp %.*s, repl_exp %.*s and attrs %.*s\n",
-+                      rule, rule->pr, rule->next, rule->matchop, rule->tflags,
-+                      rule->match_exp.len, ZSW(rule->match_exp.s), rule->subst_exp.len,
-+                      ZSW(rule->subst_exp.s), rule->repl_exp.len, ZSW(rule->repl_exp.s),
-+                      rule->attrs.len, ZSW(rule->attrs.s));
- }
---- a/src/modules/dialplan/dp_db.h
-+++ b/src/modules/dialplan/dp_db.h
-@@ -32,30 +32,30 @@
- #include "../../core/str.h"
- #include "../../lib/srdb1/db.h"
--#define DP_TABLE_NAME                 "dialplan"
--#define DPID_COL                              "dpid"
--#define PR_COL                                        "pr"
--#define MATCH_OP_COL                  "match_op"
--#define MATCH_EXP_COL                 "match_exp"
--#define MATCH_LEN_COL                 "match_len"
--#define SUBST_EXP_COL                 "subst_exp"
--#define REPL_EXP_COL                  "repl_exp"
--#define ATTRS_COL                             "attrs"
-+#define DP_TABLE_NAME "dialplan"
-+#define DPID_COL "dpid"
-+#define PR_COL "pr"
-+#define MATCH_OP_COL "match_op"
-+#define MATCH_EXP_COL "match_exp"
-+#define MATCH_LEN_COL "match_len"
-+#define SUBST_EXP_COL "subst_exp"
-+#define REPL_EXP_COL "repl_exp"
-+#define ATTRS_COL "attrs"
--#define DP_TABLE_VERSION              2
--#define DP_TABLE_COL_NO               8
-+#define DP_TABLE_VERSION 2
-+#define DP_TABLE_COL_NO 8
- extern str dp_db_url;
- extern str dp_table_name;
--extern str dpid_column; 
--extern str pr_column; 
--extern str match_op_column; 
--extern str match_exp_column; 
--extern str match_len_column; 
--extern str subst_exp_column; 
--extern str repl_exp_column; 
--extern str attrs_column; 
-+extern str dpid_column;
-+extern str pr_column;
-+extern str match_op_column;
-+extern str match_exp_column;
-+extern str match_len_column;
-+extern str subst_exp_column;
-+extern str repl_exp_column;
-+extern str attrs_column;
- int init_db_data();
- int dp_connect_db();
---- a/src/modules/dialplan/dp_repl.c
-+++ b/src/modules/dialplan/dp_repl.c
-@@ -42,27 +42,28 @@ typedef struct dpl_dyn_pcre
-       int cnt;
-       str expr;
--      struct dpl_dyn_pcre * next; /* next rule */
-+      struct dpl_dyn_pcre *next; /* next rule */
- } dpl_dyn_pcre_t, *dpl_dyn_pcre_p;
--static void dpl_get_avp_val(avp_t *avp, str *dst) {
-+static void dpl_get_avp_val(avp_t *avp, str *dst)
-+{
-       avp_value_t val;
--      if (avp==0 || dst==0) return;
-+      if(avp == 0 || dst == 0)
-+              return;
-       /* Warning! it uses static buffer from int2str !!! */
-       get_avp_val(avp, &val);
--      if (avp->flags & AVP_VAL_STR) {
-+      if(avp->flags & AVP_VAL_STR) {
-               *dst = val.s;
--      }
--      else { /* probably (!) number */
-+      } else { /* probably (!) number */
-               dst->s = int2str(val.n, &dst->len);
-       }
- }
- int dpl_dyn_printf_s(sip_msg_t *msg, const pv_elem_p elem,
--      const pv_elem_p avp_elem, str *val, pv_elem_p *elem_prev, str *vexpr)
-+              const pv_elem_p avp_elem, str *val, pv_elem_p *elem_prev, str *vexpr)
- {
-       pv_elem_p e = NULL;
-       pv_elem_p t = NULL;
-@@ -70,45 +71,52 @@ int dpl_dyn_printf_s(sip_msg_t *msg, con
-       str v = STR_NULL;
-       int ret = -1;
--      if(elem==NULL||avp_elem==NULL||elem_prev==NULL||vexpr==NULL) return -1;
--      if(str_append(&(avp_elem->text), val, &s)<0) return -1;
-+      if(elem == NULL || avp_elem == NULL || elem_prev == NULL || vexpr == NULL)
-+              return -1;
-+      if(str_append(&(avp_elem->text), val, &s) < 0)
-+              return -1;
--      if(pv_parse_format(&s, &e)<0) {
-+      if(pv_parse_format(&s, &e) < 0) {
-               LM_ERR("parsing expression: %.*s\n", s.len, s.s);
-               goto clean;
-       }
--      if(*elem_prev==NULL && elem!=avp_elem) {
-+      if(*elem_prev == NULL && elem != avp_elem) {
-               LM_DBG("search for elem_prev\n");
--              for(t=elem; t!=NULL; t=t->next) {
--                      if(t->next==avp_elem) { *elem_prev = t;
-+              for(t = elem; t != NULL; t = t->next) {
-+                      if(t->next == avp_elem) {
-+                              *elem_prev = t;
-                               LM_DBG("found!\n");
-                       }
-               }
-       }
--      if(*elem_prev) (*elem_prev)->next = e;
-+      if(*elem_prev)
-+              (*elem_prev)->next = e;
-       e->next = avp_elem->next;
--      if(pv_printf_s(msg, e, &v)<0){
-+      if(pv_printf_s(msg, e, &v) < 0) {
-               LM_ERR("cannot get avp pcre dynamic expression value\n");
-               goto clean;
-       }
-       /* pv_printf_s uses pv_get_buffer() we do need to copy */
-       vexpr->len = v.len;
--      vexpr->s = pkg_malloc(sizeof(char)*(v.len+1));
--      if(vexpr->s==NULL) {
-+      vexpr->s = pkg_malloc(sizeof(char) * (v.len + 1));
-+      if(vexpr->s == NULL) {
-               PKG_MEM_ERROR;
-               goto clean;
-       }
-       strcpy(vexpr->s, v.s);
-       ret = 0;
- clean:
--      if(s.s) pkg_free(s.s);
--      if(e) pkg_free(e);
--      if(*elem_prev) (*elem_prev)->next = avp_elem;
-+      if(s.s)
-+              pkg_free(s.s);
-+      if(e)
-+              pkg_free(e);
-+      if(*elem_prev)
-+              (*elem_prev)->next = avp_elem;
-       return ret;
- }
- int dpl_get_avp_values(sip_msg_t *msg, const pv_elem_p elem,
--      const pv_elem_p avp_elem, struct str_list **out)
-+              const pv_elem_p avp_elem, struct str_list **out)
- {
-       struct usr_avp *avp = NULL;
-       unsigned short name_type;
-@@ -120,16 +128,17 @@ int dpl_get_avp_values(sip_msg_t *msg, c
-       pv_elem_p elem_prev = NULL;
-       struct str_list *tl = NULL;
--      if(elem==NULL||avp_elem==NULL||out==NULL||*out==NULL) {
-+      if(elem == NULL || avp_elem == NULL || out == NULL || *out == NULL) {
-               LM_ERR("wrong parameters\n");
-               return -1;
-       }
--      if(pv_get_avp_name(msg, &(avp_elem->spec->pvp), &avp_name, &name_type)!=0) {
-+      if(pv_get_avp_name(msg, &(avp_elem->spec->pvp), &avp_name, &name_type)
-+                      != 0) {
-               LM_ERR("invalid avp name\n");
-               return -1;
-       }
-       avp = search_first_avp(name_type, avp_name, &avp_value, &state);
--      if(avp==NULL) {
-+      if(avp == NULL) {
-               LM_ERR("can't find first avp\n");
-               return -1;
-       }
-@@ -139,10 +148,10 @@ int dpl_get_avp_values(sip_msg_t *msg, c
-       /*LM_DBG("elem[%p] avp_elem[%p], elem_prev[%p] [%.*s]\n",
-                       elem, avp_elem, elem_prev, tl->s.len, tl->s.s);*/
-       sum = tl->s.len;
--      while ((avp=search_next_avp(&state, &avp_value))!=0) {
-+      while((avp = search_next_avp(&state, &avp_value)) != 0) {
-               dpl_get_avp_val(avp, &s);
-               dpl_dyn_printf_s(msg, elem, avp_elem, &s, &elem_prev, &ts);
--              if(append_str_list(ts.s, ts.len, &tl, &sum)==NULL) {
-+              if(append_str_list(ts.s, ts.len, &tl, &sum) == NULL) {
-                       while(*out) {
-                               tl = (*out)->next;
-                               pkg_free(*out);
-@@ -160,18 +169,20 @@ int dpl_get_avp_values(sip_msg_t *msg, c
- int dpl_detect_avp_indx(const pv_elem_p elem, pv_elem_p *avp)
- {
-       int num, num_avp_all;
--      pv_elem_p e = elem;;
--      if(elem==NULL||avp==NULL) return -1;
-+      pv_elem_p e = elem;
-+      ;
-+      if(elem == NULL || avp == NULL)
-+              return -1;
--      for(e=elem, num=num_avp_all=0; e!=NULL; e=e->next, num++) {
--              if(e->spec!=NULL && e->spec->type==PVT_AVP &&
--                      e->spec->pvp.pvi.type==PV_IDX_ITR)
--              {
-+      for(e = elem, num = num_avp_all = 0; e != NULL; e = e->next, num++) {
-+              if(e->spec != NULL && e->spec->type == PVT_AVP
-+                              && e->spec->pvp.pvi.type == PV_IDX_ITR) {
-                       *avp = e;
-                       num_avp_all++;
-               }
-       }
--      if(num_avp_all==1) return 1; /* just one avp_indx supported */
-+      if(num_avp_all == 1)
-+              return 1; /* just one avp_indx supported */
-       return 0;
- }
-@@ -180,29 +191,29 @@ pcre *dpl_dyn_pcre_comp(sip_msg_t *msg,
-       pcre *re = NULL;
-       int ccnt = 0;
--      if(expr==NULL || expr->s==NULL || expr->len<=0 ||
--         vexpr==NULL || vexpr->s==NULL || vexpr->len<=0)
-+      if(expr == NULL || expr->s == NULL || expr->len <= 0 || vexpr == NULL
-+                      || vexpr->s == NULL || vexpr->len <= 0)
-               return NULL;
-       re = reg_ex_comp(vexpr->s, &ccnt, 1);
-       if(!re) {
--              if(expr!=vexpr)
-+              if(expr != vexpr)
-                       LM_ERR("failed to compile pcre expression: %.*s (%.*s)\n",
--                              expr->len, expr->s, vexpr->len, vexpr->s);
-+                                      expr->len, expr->s, vexpr->len, vexpr->s);
-               else
--                      LM_ERR("failed to compile pcre expression: %.*s\n",
--                              vexpr->len, vexpr->s);
-+                      LM_ERR("failed to compile pcre expression: %.*s\n", vexpr->len,
-+                                      vexpr->s);
-               return NULL;
-       }
-       if(cap_cnt) {
-               *cap_cnt = ccnt;
-       }
--      if(expr!=vexpr)
--              LM_DBG("compiled dynamic pcre expression: %.*s (%.*s) %d\n",
--                              expr->len, expr->s, vexpr->len, vexpr->s, ccnt);
-+      if(expr != vexpr)
-+              LM_DBG("compiled dynamic pcre expression: %.*s (%.*s) %d\n", expr->len,
-+                              expr->s, vexpr->len, vexpr->s, ccnt);
-       else
--              LM_DBG("compiled dynamic pcre expression: %.*s %d\n",
--                              vexpr->len, vexpr->s, ccnt);
-+              LM_DBG("compiled dynamic pcre expression: %.*s %d\n", vexpr->len,
-+                              vexpr->s, ccnt);
-       return re;
- }
-@@ -218,35 +229,33 @@ dpl_dyn_pcre_p dpl_dynamic_pcre_list(sip
-       int cnt = 0;
-       str vexpr = STR_NULL;
--      if(expr==NULL || expr->s==NULL || expr->len<=0)
--      {
-+      if(expr == NULL || expr->s == NULL || expr->len <= 0) {
-               LM_ERR("wrong parameters\n");
-               return NULL;
-       }
--      if(pv_parse_format(expr, &elem)<0) {
--              LM_ERR("parsing pcre expression: %.*s\n",
--                              expr->len, expr->s);
-+      if(pv_parse_format(expr, &elem) < 0) {
-+              LM_ERR("parsing pcre expression: %.*s\n", expr->len, expr->s);
-               return NULL;
-       }
-       LM_DBG("parsed pcre expression: %.*s\n", expr->len, expr->s);
-       if(dpl_detect_avp_indx(elem, &avp_elem)) {
-               l = pkg_malloc(sizeof(struct str_list));
--              if(l==NULL) {
-+              if(l == NULL) {
-                       PKG_MEM_ERROR;
-                       goto error;
-               }
-               memset(l, 0, sizeof(struct str_list));
--              if(dpl_get_avp_values(msg, elem, avp_elem, &l)<0) {
-+              if(dpl_get_avp_values(msg, elem, avp_elem, &l) < 0) {
-                       LM_ERR("can't get list of avp values\n");
-                       goto error;
-               }
-               t = l;
-               while(t) {
-                       re = dpl_dyn_pcre_comp(msg, &(t->s), &(t->s), &cnt);
--                      if(re!=NULL) {
-+                      if(re != NULL) {
-                               rt = pkg_malloc(sizeof(dpl_dyn_pcre_t));
--                              if(rt==NULL) {
-+                              if(rt == NULL) {
-                                       PKG_MEM_ERROR;
-                                       goto error;
-                               }
-@@ -259,17 +268,16 @@ dpl_dyn_pcre_p dpl_dynamic_pcre_list(sip
-                       }
-                       t = t->next;
-               }
--      }
--      else {
--              if(pv_printf_s(msg, elem, &vexpr)<0){
-+      } else {
-+              if(pv_printf_s(msg, elem, &vexpr) < 0) {
-                       LM_ERR("cannot get pcre dynamic expression value: %.*s\n",
-                                       expr->len, expr->s);
-                       goto error;
-               }
-               re = dpl_dyn_pcre_comp(msg, expr, &vexpr, &cnt);
--              if(re!=NULL) {
-+              if(re != NULL) {
-                       rt = pkg_malloc(sizeof(dpl_dyn_pcre_t));
--                      if(rt==NULL) {
-+                      if(rt == NULL) {
-                               PKG_MEM_ERROR;
-                               goto error;
-                       }
-@@ -285,15 +293,18 @@ dpl_dyn_pcre_p dpl_dynamic_pcre_list(sip
- error:
-       while(re_list) {
-               rt = re_list->next;
--              if(re_list->re) pcre_free(re_list->re);
-+              if(re_list->re)
-+                      pcre_free(re_list->re);
-               pkg_free(re_list);
-               re_list = rt;
-       }
- clean:
--      if(elem) pv_elem_free_all(elem);
-+      if(elem)
-+              pv_elem_free_all(elem);
-       while(l) {
-               t = l->next;
--              if(l->s.s) pkg_free(l->s.s);
-+              if(l->s.s)
-+                      pkg_free(l->s.s);
-               pkg_free(l);
-               l = t;
-       }
-@@ -305,7 +316,7 @@ void repl_expr_free(struct subst_expr *s
-       if(!se)
-               return;
--      if(se->replacement.s){
-+      if(se->replacement.s) {
-               shm_free(se->replacement.s);
-               se->replacement.s = 0;
-       }
-@@ -315,13 +326,13 @@ void repl_expr_free(struct subst_expr *s
- }
--struct subst_expr* repl_exp_parse(str subst)
-+struct subst_expr *repl_exp_parse(str subst)
- {
-       struct replace_with rw[MAX_REPLACE_WITH];
-       int rw_no;
--      struct subst_expr * se;
-+      struct subst_expr *se;
-       int replace_all;
--      char * p, *end, *repl, *repl_end;
-+      char *p, *end, *repl, *repl_end;
-       int max_pmatch, r;
-       str shms;
-@@ -329,7 +340,7 @@ struct subst_expr* repl_exp_parse(str su
-       replace_all = 0;
-       shms.s = NULL;
--      if (!(shms.s=shm_malloc((subst.len+1) * sizeof(char))) ){
-+      if(!(shms.s = shm_malloc((subst.len + 1) * sizeof(char)))) {
-               LM_ERR("out of shm memory\n");
-               goto error;
-       }
-@@ -342,39 +353,41 @@ struct subst_expr* repl_exp_parse(str su
-       rw_no = 0;
-       repl = p;
--      if((rw_no = parse_repl(rw, &p, end, &max_pmatch, WITHOUT_SEP))< 0) {
-+      if((rw_no = parse_repl(rw, &p, end, &max_pmatch, WITHOUT_SEP)) < 0) {
-               LM_ERR("parse repl failed\n");
-               goto error;
-       }
--      repl_end=p;
-+      repl_end = p;
-       /* construct the subst_expr structure */
--      se = shm_malloc(sizeof(struct subst_expr)+
--                      ((rw_no)?(rw_no-1)*sizeof(struct replace_with):0));
-+      se = shm_malloc(
-+                      sizeof(struct subst_expr)
-+                      + ((rw_no) ? (rw_no - 1) * sizeof(struct replace_with) : 0));
-       /* 1 replace_with structure is  already included in subst_expr */
--      if (se==0){
-+      if(se == 0) {
-               LM_ERR("out of shm memory (subst_expr)\n");
-               goto error;
-       }
--      memset((void*)se, 0, sizeof(struct subst_expr));
-+      memset((void *)se, 0, sizeof(struct subst_expr));
-       se->replacement.s = shms.s;
-       shms.s = NULL;
--      se->replacement.len=repl_end-repl;
--      if(!rw_no){
-+      se->replacement.len = repl_end - repl;
-+      if(!rw_no) {
-               replace_all = 1;
-       }
-       /* start copying */
-       LM_DBG("replacement expression is [%.*s]\n", se->replacement.len,
-                       se->replacement.s);
--      se->re=0;
--      se->replace_all=replace_all;
--      se->n_escapes=rw_no;
--      se->max_pmatch=max_pmatch;
-+      se->re = 0;
-+      se->replace_all = replace_all;
-+      se->n_escapes = rw_no;
-+      se->max_pmatch = max_pmatch;
-       /*replace_with is a simple structure, no shm alloc needed*/
--      for (r=0; r<rw_no; r++) se->replace[r]=rw[r];
-+      for(r = 0; r < rw_no; r++)
-+              se->replace[r] = rw[r];
-       return se;
- error:
-@@ -384,17 +397,17 @@ error:
- }
--#define MAX_PHONE_NB_DIGITS           127
--static char dp_output_buf[MAX_PHONE_NB_DIGITS+1];
-+#define MAX_PHONE_NB_DIGITS 127
-+static char dp_output_buf[MAX_PHONE_NB_DIGITS + 1];
- int rule_translate(sip_msg_t *msg, str *instr, dpl_node_t *rule,
-               pcre *subst_comp, str *result)
- {
-       int repl_nb, offset, match_nb, rc, cap_cnt;
-       struct replace_with token;
--      struct subst_expr * repl_comp;
-+      struct subst_expr *repl_comp;
-       str match;
-       pv_value_t sv;
--      str* uri;
-+      str *uri;
-       int ovector[3 * (MAX_REPLACE_WITH + 1)];
-       char *p;
-       int size;
-@@ -404,53 +417,50 @@ int rule_translate(sip_msg_t *msg, str *
-       result->len = 0;
-       repl_comp = rule->repl_comp;
--      if(!repl_comp){
-+      if(!repl_comp) {
-               LM_DBG("null replacement\n");
-               return 0;
-       }
--      if(subst_comp){
-+      if(subst_comp) {
-               /*just in case something went wrong at load time*/
--              rc = pcre_fullinfo(subst_comp, NULL, PCRE_INFO_CAPTURECOUNT,
--                              &cap_cnt);
--              if (rc != 0) {
--                      LM_ERR("pcre_fullinfo on compiled pattern yielded error: %d\n",
--                                      rc);
-+              rc = pcre_fullinfo(subst_comp, NULL, PCRE_INFO_CAPTURECOUNT, &cap_cnt);
-+              if(rc != 0) {
-+                      LM_ERR("pcre_fullinfo on compiled pattern yielded error: %d\n", rc);
-                       return -1;
-               }
--              if(repl_comp->max_pmatch > cap_cnt){
-+              if(repl_comp->max_pmatch > cap_cnt) {
-                       LM_ERR("illegal access to %i-th subexpr of subst expr (max %d)\n",
-                                       repl_comp->max_pmatch, cap_cnt);
-                       return -1;
-               }
--              if (rule->tflags&DP_TFLAGS_PV_SUBST && (cap_cnt > MAX_REPLACE_WITH)) {
-+              if(rule->tflags & DP_TFLAGS_PV_SUBST && (cap_cnt > MAX_REPLACE_WITH)) {
-                       LM_ERR("subst expression %.*s has too many sub-expressions\n",
--                              rule->subst_exp.len, rule->subst_exp.s);
-+                                      rule->subst_exp.len, rule->subst_exp.s);
-                       return -1;
-               }
-               /*search for the pattern from the compiled subst_exp*/
--              if (pcre_exec(subst_comp, NULL, instr->s, instr->len,
--                                      0, 0, ovector, 3 * (MAX_REPLACE_WITH + 1)) <= 0) {
-+              if(pcre_exec(subst_comp, NULL, instr->s, instr->len, 0, 0, ovector,
-+                                 3 * (MAX_REPLACE_WITH + 1))
-+                              <= 0) {
-                       LM_DBG("the string %.*s matched "
--                                      "the match_exp %.*s but not the subst_exp %.*s!\n",
--                                      instr->len, instr->s,
--                                      rule->match_exp.len, rule->match_exp.s,
--                                      rule->subst_exp.len, rule->subst_exp.s);
-+                                 "the match_exp %.*s but not the subst_exp %.*s!\n",
-+                                      instr->len, instr->s, rule->match_exp.len,
-+                                      rule->match_exp.s, rule->subst_exp.len, rule->subst_exp.s);
-                       return -1;
-               }
-       }
-       /*simply copy from the replacing string*/
--      if(!subst_comp || (repl_comp->n_escapes <=0)){
--              if(!repl_comp->replacement.s || repl_comp->replacement.len == 0){
-+      if(!subst_comp || (repl_comp->n_escapes <= 0)) {
-+              if(!repl_comp->replacement.s || repl_comp->replacement.len == 0) {
-                       LM_ERR("invalid replacing string\n");
-                       goto error;
-               }
-               LM_DBG("simply replace the string, subst_comp %p, n_escapes %i\n",
-                               subst_comp, repl_comp->n_escapes);
--              memcpy(result->s, repl_comp->replacement.s,
--                              repl_comp->replacement.len);
-+              memcpy(result->s, repl_comp->replacement.s, repl_comp->replacement.len);
-               result->len = repl_comp->replacement.len;
-               result->s[result->len] = '\0';
-               return 0;
-@@ -458,91 +468,90 @@ int rule_translate(sip_msg_t *msg, str *
-       /* offset- offset in the replacement string */
-       result->len = repl_nb = offset = 0;
--      p=repl_comp->replacement.s;
-+      p = repl_comp->replacement.s;
--      while( repl_nb < repl_comp->n_escapes){
-+      while(repl_nb < repl_comp->n_escapes) {
-               token = repl_comp->replace[repl_nb];
--              if(offset< token.offset){
--                      if((repl_comp->replacement.len < offset)||
--                                      (result->len + token.offset -offset >= MAX_PHONE_NB_DIGITS)){
-+              if(offset < token.offset) {
-+                      if((repl_comp->replacement.len < offset)
-+                                      || (result->len + token.offset - offset
-+                                                      >= MAX_PHONE_NB_DIGITS)) {
-                               LM_ERR("invalid length\n");
-                               goto error;
-                       }
-                       /*copy from the replacing string*/
-                       size = token.offset - offset;
-                       memcpy(result->s + result->len, p + offset, size);
--                      LM_DBG("copying <%.*s> from replacing string\n",
--                                      size, p + offset);
-+                      LM_DBG("copying <%.*s> from replacing string\n", size, p + offset);
-                       result->len += size;
-                       offset = token.offset;
-               }
-               switch(token.type) {
-                       case REPLACE_NMATCH:
--                              /*copy from the match subexpression*/   
-+                              /*copy from the match subexpression*/
-                               match_nb = token.u.nmatch * 2;
--                              match.s =  instr->s + ovector[match_nb];
-+                              match.s = instr->s + ovector[match_nb];
-                               match.len = ovector[match_nb + 1] - ovector[match_nb];
--                              if(result->len + match.len >= MAX_PHONE_NB_DIGITS){
-+                              if(result->len + match.len >= MAX_PHONE_NB_DIGITS) {
-                                       LM_ERR("overflow\n");
-                                       goto error;
-                               }
-                               memcpy(result->s + result->len, match.s, match.len);
--                              LM_DBG("copying match <%.*s> token size %d\n",
--                                              match.len, match.s, token.size);
-+                              LM_DBG("copying match <%.*s> token size %d\n", match.len,
-+                                              match.s, token.size);
-                               result->len += match.len;
-                               offset += token.size;
-                               break;
-                       case REPLACE_CHAR:
--                              if(result->len + 1>= MAX_PHONE_NB_DIGITS){
-+                              if(result->len + 1 >= MAX_PHONE_NB_DIGITS) {
-                                       LM_ERR("overflow\n");
-                                       goto error;
-                               }
-                               *(result->s + result->len) = token.u.c;
--                              LM_DBG("copying char <%c> token size %d\n",
--                                              token.u.c, token.size);
-+                              LM_DBG("copying char <%c> token size %d\n", token.u.c,
-+                                              token.size);
-                               result->len++;
-                               offset += token.size;
-                               break;
--                      case REPLACE_URI:       
--                              if ( msg== NULL || msg->first_line.type!=SIP_REQUEST){
-+                      case REPLACE_URI:
-+                              if(msg == NULL || msg->first_line.type != SIP_REQUEST) {
-                                       LM_CRIT("uri substitution attempt on no request"
-                                                       " message\n");
-                                       break; /* ignore, we can continue */
-                               }
--                              uri= (msg->new_uri.s)?(&msg->new_uri):
--                                      (&msg->first_line.u.request.uri);
--                              if(result->len+uri->len>=MAX_PHONE_NB_DIGITS){
-+                              uri = (msg->new_uri.s) ? (&msg->new_uri)
-+                                                                         : (&msg->first_line.u.request.uri);
-+                              if(result->len + uri->len >= MAX_PHONE_NB_DIGITS) {
-                                       LM_ERR("overflow\n");
-                                       goto error;
-                               }
-                               memcpy(result->s + result->len, uri->s, uri->len);
--                              LM_DBG("copying uri <%.*s> token size %d\n",
--                                              uri->len, uri->s, token.size);
--                              result->len+=uri->len;
-+                              LM_DBG("copying uri <%.*s> token size %d\n", uri->len, uri->s,
-+                                              token.size);
-+                              result->len += uri->len;
-                               offset += token.size;
-                               break;
-                       case REPLACE_SPEC:
--                              if (msg== NULL) {
-+                              if(msg == NULL) {
-                                       LM_DBG("replace spec attempted on no message\n");
-                                       break;
-                               }
--                              if (pv_get_spec_value(msg, &token.u.spec, &sv) != 0) {
-+                              if(pv_get_spec_value(msg, &token.u.spec, &sv) != 0) {
-                                       LM_CRIT("item substitution returned error\n");
-                                       break; /* ignore, we can continue */
-                               }
--                              if(result->len+sv.rs.len>=MAX_PHONE_NB_DIGITS){
-+                              if(result->len + sv.rs.len >= MAX_PHONE_NB_DIGITS) {
-                                       LM_ERR("rule_translate: overflow\n");
-                                       goto error;
-                               }
--                              memcpy(result->s + result->len, sv.rs.s,
--                                              sv.rs.len);
--                              LM_DBG("copying pvar value <%.*s> token size %d\n",
--                                              sv.rs.len, sv.rs.s, token.size);
--                              result->len+=sv.rs.len;
-+                              memcpy(result->s + result->len, sv.rs.s, sv.rs.len);
-+                              LM_DBG("copying pvar value <%.*s> token size %d\n", sv.rs.len,
-+                                              sv.rs.s, token.size);
-+                              result->len += sv.rs.len;
-                               offset += token.size;
-                               break;
-                       default:
-@@ -552,12 +561,12 @@ int rule_translate(sip_msg_t *msg, str *
-               repl_nb++;
-       }
-       /* anything left? */
--      if( repl_nb && offset < repl_comp->replacement.len){
-+      if(repl_nb && offset < repl_comp->replacement.len) {
-               /*copy from the replacing string*/
-               size = repl_comp->replacement.len - offset;
-               memcpy(result->s + result->len, p + offset, size);
--              LM_DBG("copying leftover <%.*s> from replacing string\n",
--                              size, p + offset);
-+              LM_DBG("copying leftover <%.*s> from replacing string\n", size,
-+                              p + offset);
-               result->len += size;
-       }
-@@ -570,10 +579,10 @@ error:
-       return -1;
- }
--#define DP_MAX_ATTRS_LEN      255
--static char dp_attrs_buf[DP_MAX_ATTRS_LEN+1];
--int dp_translate_helper(sip_msg_t *msg, str *input, str *output, dpl_id_p idp,
--              str *attrs)
-+#define DP_MAX_ATTRS_LEN 255
-+static char dp_attrs_buf[DP_MAX_ATTRS_LEN + 1];
-+int dp_translate_helper(
-+              sip_msg_t *msg, str *input, str *output, dpl_id_p idp, str *attrs)
- {
-       dpl_node_p rulep;
-       dpl_index_p indexp;
-@@ -588,70 +597,70 @@ int dp_translate_helper(sip_msg_t *msg,
-       }
-       user_len = input->len;
--      for(indexp = idp->first_index; indexp!=NULL; indexp = indexp->next)
--              if(!indexp->len || (indexp->len!=0 && indexp->len == user_len) )
-+      for(indexp = idp->first_index; indexp != NULL; indexp = indexp->next)
-+              if(!indexp->len || (indexp->len != 0 && indexp->len == user_len))
-                       break;
--      if(!indexp || (indexp!= NULL && !indexp->first_rule)){
-+      if(!indexp || (indexp != NULL && !indexp->first_rule)) {
-               LM_DBG("no rule for len %i\n", input->len);
-               return -1;
-       }
- search_rule:
--      for(rulep=indexp->first_rule; rulep!=NULL; rulep= rulep->next) {
-+      for(rulep = indexp->first_rule; rulep != NULL; rulep = rulep->next) {
-               switch(rulep->matchop) {
-                       case DP_REGEX_OP:
--                              LM_DBG("regex operator testing over [%.*s]\n",
--                                              input->len, input->s);
--                              if(rulep->tflags&DP_TFLAGS_PV_MATCH) {
-+                              LM_DBG("regex operator testing over [%.*s]\n", input->len,
-+                                              input->s);
-+                              if(rulep->tflags & DP_TFLAGS_PV_MATCH) {
-                                       re_list = dpl_dynamic_pcre_list(msg, &rulep->match_exp);
--                                      if(re_list==NULL) {
-+                                      if(re_list == NULL) {
-                                               /* failed to compile dynamic pcre -- ignore */
-                                               LM_DBG("failed to compile dynamic pcre[%.*s]\n",
--                                                      rulep->match_exp.len, rulep->match_exp.s);
-+                                                              rulep->match_exp.len, rulep->match_exp.s);
-                                               continue;
-                                       }
-                                       rez = -1;
-                                       do {
--                                              if(rez<0) {
--                                                      rez = pcre_exec(re_list->re, NULL, input->s, input->len,
--                                                                      0, 0, NULL, 0);
-+                                              if(rez < 0) {
-+                                                      rez = pcre_exec(re_list->re, NULL, input->s,
-+                                                                      input->len, 0, 0, NULL, 0);
-                                                       LM_DBG("match check: [%.*s] %d\n",
--                                                              re_list->expr.len, re_list->expr.s, rez);
--                                              }
--                                              else LM_DBG("match check skipped: [%.*s] %d\n",
--                                                              re_list->expr.len, re_list->expr.s, rez);
-+                                                                      re_list->expr.len, re_list->expr.s, rez);
-+                                              } else
-+                                                      LM_DBG("match check skipped: [%.*s] %d\n",
-+                                                                      re_list->expr.len, re_list->expr.s, rez);
-                                               rt = re_list->next;
-                                               pcre_free(re_list->re);
-                                               pkg_free(re_list);
-                                               re_list = rt;
-                                       } while(re_list);
-                               } else {
--                                      rez = pcre_exec(rulep->match_comp, NULL, input->s, input->len,
--                                              0, 0, NULL, 0);
-+                                      rez = pcre_exec(rulep->match_comp, NULL, input->s,
-+                                                      input->len, 0, 0, NULL, 0);
-                               }
-                               break;
-                       case DP_EQUAL_OP:
-                               LM_DBG("equal operator testing\n");
--                              if(rulep->match_exp.s==NULL
-+                              if(rulep->match_exp.s == NULL
-                                               || rulep->match_exp.len != input->len) {
-                                       rez = -1;
-                               } else {
-                                       rez = strncmp(rulep->match_exp.s, input->s, input->len);
--                                      rez = (rez==0)?0:-1;
-+                                      rez = (rez == 0) ? 0 : -1;
-                               }
-                               break;
-                       case DP_FNMATCH_OP:
-                               LM_DBG("fnmatch operator testing\n");
--                              if(rulep->match_exp.s!=NULL) {
-+                              if(rulep->match_exp.s != NULL) {
-                                       b = input->s[input->len];
-                                       input->s[input->len] = '\0';
-                                       rez = fnmatch(rulep->match_exp.s, input->s, 0);
-                                       input->s[input->len] = b;
--                                      rez = (rez==0)?0:-1;
-+                                      rez = (rez == 0) ? 0 : -1;
-                               } else {
-                                       rez = -1;
-                               }
-@@ -665,8 +674,8 @@ search_rule:
-                       goto repl;
-       }
-       /*test the rules with len 0*/
--      if(indexp->len){
--              for(indexp = indexp->next; indexp!=NULL; indexp = indexp->next)
-+      if(indexp->len) {
-+              for(indexp = indexp->next; indexp != NULL; indexp = indexp->next)
-                       if(!indexp->len)
-                               break;
-               if(indexp)
-@@ -677,63 +686,61 @@ search_rule:
-       return -1;
- repl:
--      LM_DBG("found a matching rule %p: pr %i, match_exp %.*s\n",
--                      rulep, rulep->pr, rulep->match_exp.len, rulep->match_exp.s);
-+      LM_DBG("found a matching rule %p: pr %i, match_exp %.*s\n", rulep,
-+                      rulep->pr, rulep->match_exp.len, rulep->match_exp.s);
-       if(attrs) {
-               attrs->len = 0;
-               attrs->s = 0;
--              if(rulep->attrs.len>0) {
--                      LM_DBG("the rule's attrs are %.*s\n",
--                                      rulep->attrs.len, rulep->attrs.s);
-+              if(rulep->attrs.len > 0) {
-+                      LM_DBG("the rule's attrs are %.*s\n", rulep->attrs.len,
-+                                      rulep->attrs.s);
-                       if(rulep->attrs.len >= DP_MAX_ATTRS_LEN) {
-                               LM_ERR("out of memory for attributes\n");
-                               return -1;
-                       }
-                       attrs->s = dp_attrs_buf;
--                      memcpy(attrs->s, rulep->attrs.s, rulep->attrs.len*sizeof(char));
-+                      memcpy(attrs->s, rulep->attrs.s, rulep->attrs.len * sizeof(char));
-                       attrs->len = rulep->attrs.len;
-                       attrs->s[attrs->len] = '\0';
--                      LM_DBG("the copied attributes are: %.*s\n",
--                                      attrs->len, attrs->s);
-+                      LM_DBG("the copied attributes are: %.*s\n", attrs->len, attrs->s);
-               }
-       }
-       if(!output) {
-               return 0;
-       }
--      if(rulep->tflags&DP_TFLAGS_PV_SUBST) {
-+      if(rulep->tflags & DP_TFLAGS_PV_SUBST) {
-               re_list = dpl_dynamic_pcre_list(msg, &rulep->subst_exp);
--              if(re_list==NULL) {
-+              if(re_list == NULL) {
-                       /* failed to compile dynamic pcre -- ignore */
-                       LM_DBG("failed to compile dynamic pcre[%.*s]\n",
--                              rulep->subst_exp.len, rulep->subst_exp.s);
-+                                      rulep->subst_exp.len, rulep->subst_exp.s);
-                       return -1;
-               }
-               rez = -1;
-               do {
--                      if(rez<0) {
-+                      if(rez < 0) {
-                               rez = rule_translate(msg, input, rulep, re_list->re, output);
--                              LM_DBG("subst check: [%.*s] %d\n",
--                                      re_list->expr.len, re_list->expr.s, rez);
--                      }
--                      else LM_DBG("subst check skipped: [%.*s] %d\n",
--                                      re_list->expr.len, re_list->expr.s, rez);
-+                              LM_DBG("subst check: [%.*s] %d\n", re_list->expr.len,
-+                                              re_list->expr.s, rez);
-+                      } else
-+                              LM_DBG("subst check skipped: [%.*s] %d\n", re_list->expr.len,
-+                                              re_list->expr.s, rez);
-                       rt = re_list->next;
-                       pcre_free(re_list->re);
-                       pkg_free(re_list);
-                       re_list = rt;
-               } while(re_list);
--              if(rez<0) {
-+              if(rez < 0) {
-                       LM_ERR("the string %.*s matched "
--                              "the match_exp %.*s but not the subst_exp %.*s!\n",
--                              input->len, input->s,
--                              rulep->match_exp.len, rulep->match_exp.s,
--                              rulep->subst_exp.len, rulep->subst_exp.s);
-+                                 "the match_exp %.*s but not the subst_exp %.*s!\n",
-+                                      input->len, input->s, rulep->match_exp.len,
-+                                      rulep->match_exp.s, rulep->subst_exp.len,
-+                                      rulep->subst_exp.s);
-               }
--      }
--      else {
--              if(rule_translate(msg, input, rulep, rulep->subst_comp, output)!=0){
-+      } else {
-+              if(rule_translate(msg, input, rulep, rulep->subst_comp, output) != 0) {
-                       LM_ERR("could not build the output\n");
-                       return -1;
-               }
diff --git a/net/kamailio/patches/011-dialplan-migrate-to-pcre2.patch b/net/kamailio/patches/011-dialplan-migrate-to-pcre2.patch
deleted file mode 100644 (file)
index 23eede0..0000000
+++ /dev/null
@@ -1,456 +0,0 @@
-From 374227b15ff7fbed8660beb93d52da15dcb4ba9e Mon Sep 17 00:00:00 2001
-From: Victor Seva <[email protected]>
-Date: Mon, 21 Aug 2023 12:27:43 +0200
-Subject: [PATCH] dialplan: migrate to pcre2
-
----
- src/modules/dialplan/Makefile   |  11 +---
- src/modules/dialplan/dialplan.c |   5 ++
- src/modules/dialplan/dialplan.h |  20 ++++---
- src/modules/dialplan/dp_db.c    | 103 +++++++++++++++++++-------------
- src/modules/dialplan/dp_repl.c  |  56 +++++++++++------
- 5 files changed, 121 insertions(+), 74 deletions(-)
-
---- a/src/modules/dialplan/Makefile
-+++ b/src/modules/dialplan/Makefile
-@@ -6,20 +6,15 @@ auto_gen=
- NAME=dialplan.so
- ifeq ($(CROSS_COMPILE),)
--PCRE_BUILDER = $(shell \
--      if pkg-config --exists libcre; then \
--              echo 'pkg-config libpcre'; \
--      else \
--              which pcre-config; \
--      fi)
-+PCRE_BUILDER = $(shell command -v pcre2-config)
- endif
- ifeq ($(PCRE_BUILDER),)
-       PCREDEFS=-I$(LOCALBASE)/include
--      PCRELIBS=-L$(LOCALBASE)/lib -lpcre
-+      PCRELIBS=-L$(LOCALBASE)/lib -lpcre2-8
- else
-       PCREDEFS = $(shell $(PCRE_BUILDER) --cflags)
--      PCRELIBS = $(shell $(PCRE_BUILDER) --libs)
-+      PCRELIBS = $(shell $(PCRE_BUILDER) --libs8)
- endif
- DEFS+=$(PCREDEFS)
- LIBS=$(PCRELIBS)
---- a/src/modules/dialplan/dialplan.c
-+++ b/src/modules/dialplan/dialplan.c
-@@ -5,6 +5,8 @@
-  *
-  * Copyright (C)  2014 Olle E. Johansson, Edvina AB
-  *
-+ * Copyright (C)  2023 Victor Seva
-+ *
-  * This file is part of Kamailio, a free SIP server.
-  *
-  * Kamailio is free software; you can redistribute it and/or modify
-@@ -79,6 +81,9 @@ static int ki_dp_translate_vars(
- int dp_replace_fixup(void **param, int param_no);
- int dp_replace_fixup_free(void **param, int param_no);
-+pcre2_general_context *dpl_gctx = NULL;
-+pcre2_compile_context *dpl_ctx = NULL;
-+
- str dp_attr_pvar_s = STR_NULL;
- pv_spec_t *dp_attr_pvar = NULL;
---- a/src/modules/dialplan/dialplan.h
-+++ b/src/modules/dialplan/dialplan.h
-@@ -13,8 +13,8 @@
-  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  * GNU General Public License for more details.
-  *
-- * You should have received a copy of the GNU General Public License 
-- * along with this program; if not, write to the Free Software 
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-  *
-  */
-@@ -30,7 +30,8 @@
- #ifndef _DP_DIALPLAN_H
- #define _DP_DIALPLAN_H
--#include <pcre.h>
-+#define PCRE2_CODE_UNIT_WIDTH 8
-+#include <pcre2.h>
- #include "../../core/pvar.h"
- #include "../../core/parser/msg_parser.h"
-@@ -43,6 +44,9 @@
- #define DP_TFLAGS_PV_MATCH (1 << 0)
- #define DP_TFLAGS_PV_SUBST (1 << 1)
-+extern pcre2_general_context *dpl_gctx;
-+extern pcre2_compile_context *dpl_ctx;
-+
- typedef struct dpl_node
- {
-       int dpid;                                         /* dialplan id */
-@@ -52,8 +56,8 @@ typedef struct dpl_node
-       str match_exp;                            /* match-first string */
-       str subst_exp;                            /* match string with subtitution groupping */
-       str repl_exp;                             /* replacement expression string */
--      pcre *match_comp;                         /* compiled matching expression */
--      pcre *subst_comp;                         /* compiled substitution expression */
-+      pcre2_code *match_comp;           /* compiled matching expression */
-+      pcre2_code *subst_comp;           /* compiled substitution expression */
-       struct subst_expr *repl_comp; /* compiled replacement */
-       str attrs;                                        /* attributes string */
-       unsigned int tflags;              /* flags for type of values for matching */
-@@ -103,8 +107,8 @@ struct subst_expr *repl_exp_parse(str su
- void repl_expr_free(struct subst_expr *se);
- int dp_translate_helper(
-               sip_msg_t *msg, str *user_name, str *repl_user, dpl_id_p idp, str *);
--int rule_translate(
--              sip_msg_t *msg, str *instr, dpl_node_t *rule, pcre *subst_comp, str *);
-+int rule_translate(sip_msg_t *msg, str *instr, dpl_node_t *rule,
-+              pcre2_code *subst_comp, str *);
--pcre *reg_ex_comp(const char *pattern, int *cap_cnt, int mtype);
-+pcre2_code *reg_ex_comp(const char *pattern, int *cap_cnt, int mtype);
- #endif
---- a/src/modules/dialplan/dp_db.c
-+++ b/src/modules/dialplan/dp_db.c
-@@ -196,11 +196,31 @@ void dp_disconnect_db(void)
-       }
- }
-+static void *pcre2_malloc(size_t size, void *ext)
-+{
-+      return shm_malloc(size);
-+}
-+
-+static void pcre2_free(void *ptr, void *ext)
-+{
-+      shm_free(ptr);
-+      ptr = NULL;
-+}
- int init_data(void)
- {
-       int *p;
-+      if((dpl_gctx = pcre2_general_context_create(pcre2_malloc, pcre2_free, NULL))
-+                      == NULL) {
-+              LM_ERR("pcre2 general context creation failed\n");
-+              return -1;
-+      }
-+      if((dpl_ctx = pcre2_compile_context_create(dpl_gctx)) == NULL) {
-+              LM_ERR("pcre2 compile context creation failed\n");
-+              return -1;
-+      }
-+
-       dp_rules_hash = (dpl_id_p *)shm_malloc(2 * sizeof(dpl_id_p));
-       if(!dp_rules_hash) {
-               LM_ERR("out of shm memory\n");
-@@ -227,6 +247,14 @@ int init_data(void)
- void destroy_data(void)
- {
-+      if(dpl_ctx) {
-+              pcre2_compile_context_free(dpl_ctx);
-+      }
-+
-+      if(dpl_gctx) {
-+              pcre2_general_context_free(dpl_gctx);
-+      }
-+
-       if(dp_rules_hash) {
-               destroy_hash(0);
-               destroy_hash(1);
-@@ -373,55 +401,50 @@ int dpl_str_to_shm(str src, str *dest, i
- /* Compile pcre pattern
-- * if mtype==0 - return pointer to shm copy of result
-- * if mtype==1 - return pcre pointer that has to be pcre_free() */
--pcre *reg_ex_comp(const char *pattern, int *cap_cnt, int mtype)
--{
--      pcre *re, *result;
--      const char *error;
--      int rc, err_offset;
--      size_t size;
-+ * if mtype==0 - return pointer using shm
-+ * if mtype==1 - return pcre2_code pointer that has to be pcre2_code_free() */
-+pcre2_code *reg_ex_comp(const char *pattern, int *cap_cnt, int mtype)
-+{
-+      pcre2_code *re;
-+      int pcre_error_num = 0;
-+      char pcre_error[128];
-+      size_t pcre_erroffset;
-+      int rc;
--      re = pcre_compile(pattern, 0, &error, &err_offset, NULL);
-+      re = pcre2_compile((PCRE2_SPTR)pattern, PCRE2_ZERO_TERMINATED, 0,
-+                      &pcre_error_num, &pcre_erroffset, mtype == 0 ? dpl_ctx : NULL);
-       if(re == NULL) {
--              LM_ERR("PCRE compilation of '%s' failed at offset %d: %s\n", pattern,
--                              err_offset, error);
--              return (pcre *)0;
--      }
--      rc = pcre_fullinfo(re, NULL, PCRE_INFO_SIZE, &size);
--      if(rc != 0) {
--              pcre_free(re);
--              LM_ERR("pcre_fullinfo on compiled pattern '%s' yielded error: %d\n",
--                              pattern, rc);
--              return (pcre *)0;
-+              switch(pcre2_get_error_message(
-+                              pcre_error_num, (PCRE2_UCHAR *)pcre_error, 128)) {
-+                      case PCRE2_ERROR_NOMEMORY:
-+                              snprintf(pcre_error, 128,
-+                                              "unknown error[%d]: pcre2 error buffer too small",
-+                                              pcre_error_num);
-+                              break;
-+                      case PCRE2_ERROR_BADDATA:
-+                              snprintf(pcre_error, 128, "unknown pcre2 error[%d]",
-+                                              pcre_error_num);
-+                              break;
-+              }
-+              LM_ERR("PCRE compilation of '%s' failed at offset %zu: %s\n", pattern,
-+                              pcre_erroffset, pcre_error);
-+              return NULL;
-       }
--      rc = pcre_fullinfo(re, NULL, PCRE_INFO_CAPTURECOUNT, cap_cnt);
-+      rc = pcre2_pattern_info(re, PCRE2_INFO_CAPTURECOUNT, cap_cnt);
-       if(rc != 0) {
--              pcre_free(re);
-+              pcre2_code_free(re);
-               LM_ERR("pcre_fullinfo on compiled pattern '%s' yielded error: %d\n",
-                               pattern, rc);
--              return (pcre *)0;
--      }
--      if(mtype == 0) {
--              result = (pcre *)shm_malloc(size);
--              if(result == NULL) {
--                      pcre_free(re);
--                      LM_ERR("not enough shared memory for compiled PCRE pattern\n");
--                      return (pcre *)0;
--              }
--              memcpy(result, re, size);
--              pcre_free(re);
--              return result;
--      } else {
--              return re;
-+              return NULL;
-       }
-+      return re;
- }
- /*compile the expressions, and if ok, build the rule */
- dpl_node_t *build_rule(db_val_t *values)
- {
--      pcre *match_comp, *subst_comp;
-+      pcre2_code *match_comp, *subst_comp;
-       struct subst_expr *repl_comp;
-       dpl_node_t *new_rule;
-       str match_exp, subst_exp, repl_exp, attrs;
-@@ -544,9 +567,9 @@ dpl_node_t *build_rule(db_val_t *values)
- err:
-       if(match_comp)
--              shm_free(match_comp);
-+              pcre2_code_free(match_comp);
-       if(subst_comp)
--              shm_free(subst_comp);
-+              pcre2_code_free(subst_comp);
-       if(repl_comp)
-               repl_expr_free(repl_comp);
-       if(new_rule)
-@@ -692,10 +715,10 @@ void destroy_rule(dpl_node_t *rule)
-       LM_DBG("destroying rule with priority %i\n", rule->pr);
-       if(rule->match_comp)
--              shm_free(rule->match_comp);
-+              pcre2_code_free(rule->match_comp);
-       if(rule->subst_comp)
--              shm_free(rule->subst_comp);
-+              pcre2_code_free(rule->subst_comp);
-       /*destroy repl_exp*/
-       if(rule->repl_comp)
---- a/src/modules/dialplan/dp_repl.c
-+++ b/src/modules/dialplan/dp_repl.c
-@@ -15,8 +15,8 @@
-  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  * GNU General Public License for more details.
-  *
-- * You should have received a copy of the GNU General Public License 
-- * along with this program; if not, write to the Free Software 
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-  *
-  */
-@@ -38,7 +38,7 @@
- typedef struct dpl_dyn_pcre
- {
--      pcre *re;
-+      pcre2_code *re;
-       int cnt;
-       str expr;
-@@ -186,9 +186,10 @@ int dpl_detect_avp_indx(const pv_elem_p
-       return 0;
- }
--pcre *dpl_dyn_pcre_comp(sip_msg_t *msg, str *expr, str *vexpr, int *cap_cnt)
-+pcre2_code *dpl_dyn_pcre_comp(
-+              sip_msg_t *msg, str *expr, str *vexpr, int *cap_cnt)
- {
--      pcre *re = NULL;
-+      pcre2_code *re = NULL;
-       int ccnt = 0;
-       if(expr == NULL || expr->s == NULL || expr->len <= 0 || vexpr == NULL
-@@ -225,7 +226,7 @@ dpl_dyn_pcre_p dpl_dynamic_pcre_list(sip
-       dpl_dyn_pcre_p rt = NULL;
-       struct str_list *l = NULL;
-       struct str_list *t = NULL;
--      pcre *re = NULL;
-+      pcre2_code *re = NULL;
-       int cnt = 0;
-       str vexpr = STR_NULL;
-@@ -294,7 +295,7 @@ error:
-       while(re_list) {
-               rt = re_list->next;
-               if(re_list->re)
--                      pcre_free(re_list->re);
-+                      pcre2_code_free(re_list->re);
-               pkg_free(re_list);
-               re_list = rt;
-       }
-@@ -400,15 +401,16 @@ error:
- #define MAX_PHONE_NB_DIGITS 127
- static char dp_output_buf[MAX_PHONE_NB_DIGITS + 1];
- int rule_translate(sip_msg_t *msg, str *instr, dpl_node_t *rule,
--              pcre *subst_comp, str *result)
-+              pcre2_code *subst_comp, str *result)
- {
-       int repl_nb, offset, match_nb, rc, cap_cnt;
-       struct replace_with token;
-       struct subst_expr *repl_comp;
-+      pcre2_match_data *pcre_md = NULL;
-       str match;
-       pv_value_t sv;
-       str *uri;
--      int ovector[3 * (MAX_REPLACE_WITH + 1)];
-+      PCRE2_SIZE *ovector = NULL;
-       char *p;
-       int size;
-@@ -424,7 +426,7 @@ int rule_translate(sip_msg_t *msg, str *
-       if(subst_comp) {
-               /*just in case something went wrong at load time*/
--              rc = pcre_fullinfo(subst_comp, NULL, PCRE_INFO_CAPTURECOUNT, &cap_cnt);
-+              rc = pcre2_pattern_info(subst_comp, PCRE2_INFO_CAPTURECOUNT, &cap_cnt);
-               if(rc != 0) {
-                       LM_ERR("pcre_fullinfo on compiled pattern yielded error: %d\n", rc);
-                       return -1;
-@@ -441,15 +443,19 @@ int rule_translate(sip_msg_t *msg, str *
-               }
-               /*search for the pattern from the compiled subst_exp*/
--              if(pcre_exec(subst_comp, NULL, instr->s, instr->len, 0, 0, ovector,
--                                 3 * (MAX_REPLACE_WITH + 1))
-+              pcre_md = pcre2_match_data_create_from_pattern(subst_comp, NULL);
-+              if(pcre2_match(subst_comp, (PCRE2_SPTR)instr->s, (PCRE2_SIZE)instr->len,
-+                                 0, 0, pcre_md, NULL)
-                               <= 0) {
-                       LM_DBG("the string %.*s matched "
-                                  "the match_exp %.*s but not the subst_exp %.*s!\n",
-                                       instr->len, instr->s, rule->match_exp.len,
-                                       rule->match_exp.s, rule->subst_exp.len, rule->subst_exp.s);
-+                      if(pcre_md)
-+                              pcre2_match_data_free(pcre_md);
-                       return -1;
-               }
-+              ovector = pcre2_get_ovector_pointer(pcre_md);
-       }
-       /*simply copy from the replacing string*/
-@@ -463,6 +469,8 @@ int rule_translate(sip_msg_t *msg, str *
-               memcpy(result->s, repl_comp->replacement.s, repl_comp->replacement.len);
-               result->len = repl_comp->replacement.len;
-               result->s[result->len] = '\0';
-+              if(pcre_md)
-+                      pcre2_match_data_free(pcre_md);
-               return 0;
-       }
-@@ -571,11 +579,15 @@ int rule_translate(sip_msg_t *msg, str *
-       }
-       result->s[result->len] = '\0';
-+      if(pcre_md)
-+              pcre2_match_data_free(pcre_md);
-       return 0;
- error:
-       result->s = 0;
-       result->len = 0;
-+      if(pcre_md)
-+              pcre2_match_data_free(pcre_md);
-       return -1;
- }
-@@ -584,6 +596,7 @@ static char dp_attrs_buf[DP_MAX_ATTRS_LE
- int dp_translate_helper(
-               sip_msg_t *msg, str *input, str *output, dpl_id_p idp, str *attrs)
- {
-+      pcre2_match_data *pcre_md = NULL;
-       dpl_node_p rulep;
-       dpl_index_p indexp;
-       int user_len, rez;
-@@ -624,21 +637,28 @@ search_rule:
-                                       rez = -1;
-                                       do {
-                                               if(rez < 0) {
--                                                      rez = pcre_exec(re_list->re, NULL, input->s,
--                                                                      input->len, 0, 0, NULL, 0);
-+                                                      pcre_md = pcre2_match_data_create_from_pattern(
-+                                                                      re_list->re, NULL);
-+                                                      rez = pcre2_match(re_list->re, (PCRE2_SPTR)input->s,
-+                                                                      (PCRE2_SIZE)input->len, 0, 0, pcre_md,
-+                                                                      NULL);
-                                                       LM_DBG("match check: [%.*s] %d\n",
-                                                                       re_list->expr.len, re_list->expr.s, rez);
-                                               } else
-                                                       LM_DBG("match check skipped: [%.*s] %d\n",
-                                                                       re_list->expr.len, re_list->expr.s, rez);
-                                               rt = re_list->next;
--                                              pcre_free(re_list->re);
-+                                              pcre2_match_data_free(pcre_md);
-+                                              pcre2_code_free(re_list->re);
-                                               pkg_free(re_list);
-                                               re_list = rt;
-                                       } while(re_list);
-                               } else {
--                                      rez = pcre_exec(rulep->match_comp, NULL, input->s,
--                                                      input->len, 0, 0, NULL, 0);
-+                                      pcre_md = pcre2_match_data_create_from_pattern(
-+                                                      rulep->match_comp, NULL);
-+                                      rez = pcre2_match(rulep->match_comp, (PCRE2_SPTR)input->s,
-+                                                      (PCRE2_SIZE)input->len, 0, 0, pcre_md, 0);
-+                                      pcre2_match_data_free(pcre_md);
-                               }
-                               break;
-@@ -728,7 +748,7 @@ repl:
-                               LM_DBG("subst check skipped: [%.*s] %d\n", re_list->expr.len,
-                                               re_list->expr.s, rez);
-                       rt = re_list->next;
--                      pcre_free(re_list->re);
-+                      pcre2_code_free(re_list->re);
-                       pkg_free(re_list);
-                       re_list = rt;
-               } while(re_list);
diff --git a/net/kamailio/patches/020-lcr-clang-format-for-coherent-indentation-and-coding.patch b/net/kamailio/patches/020-lcr-clang-format-for-coherent-indentation-and-coding.patch
deleted file mode 100644 (file)
index 8a5447c..0000000
+++ /dev/null
@@ -1,510 +0,0 @@
-From ecc2c9e54fa8f24c1e96860c1f59b43f2e1e8b7a Mon Sep 17 00:00:00 2001
-From: Victor Seva <[email protected]>
-Date: Wed, 17 May 2023 16:36:55 +0200
-Subject: [PATCH] lcr: clang-format for coherent indentation and coding style
-
----
- src/modules/lcr/lcr_mod.c | 125 +++++++++++++++++++++-----------------
- src/modules/lcr/lcr_rpc.c |  65 ++++++++++----------
- 2 files changed, 102 insertions(+), 88 deletions(-)
-
---- a/src/modules/lcr/lcr_mod.c
-+++ b/src/modules/lcr/lcr_mod.c
-@@ -259,7 +259,8 @@ static int inactivate_gw(struct sip_msg
- static int defunct_gw(struct sip_msg *_m, char *_s1, char *_s2);
- static int from_gw_1(struct sip_msg *_m, char *_s1, char *_s2);
- static int from_gw_3(struct sip_msg *_m, char *_s1, char *_s2, char *_s3);
--static int from_gw_4(struct sip_msg *_m, char *_s1, char *_s2, char *_s3, char *_s4);
-+static int from_gw_4(
-+              struct sip_msg *_m, char *_s1, char *_s2, char *_s3, char *_s4);
- static int from_any_gw_0(struct sip_msg *_m, char *_s1, char *_s2);
- static int from_any_gw_2(struct sip_msg *_m, char *_s1, char *_s2);
- static int from_any_gw_3(struct sip_msg *_m, char *_s1, char *_s2, char *_s3);
-@@ -554,7 +555,8 @@ static int mod_init(void)
-                       LM_ERR("malformed or non AVP definition <%s>\n", rule_id_avp_param);
-                       return -1;
-               }
--              if(pv_get_avp_name(0, &(avp_spec->pvp), &rule_id_avp, &avp_flags) != 0) {
-+              if(pv_get_avp_name(0, &(avp_spec->pvp), &rule_id_avp, &avp_flags)
-+                              != 0) {
-                       LM_ERR("invalid AVP definition <%s>\n", rule_id_avp_param);
-                       return -1;
-               }
-@@ -680,18 +682,21 @@ static int mod_init(void)
-               LM_ERR("unable to open database connection\n");
-               return -1;
-       }
--      if(db_check_table_version(&lcr_dbf, dbh, &lcr_rule_table,
--                      LCR_RULE_TABLE_VERSION) < 0) {
-+      if(db_check_table_version(
-+                         &lcr_dbf, dbh, &lcr_rule_table, LCR_RULE_TABLE_VERSION)
-+                      < 0) {
-               DB_TABLE_VERSION_ERROR(lcr_rule_table);
-               goto dberror;
-       }
-       if(db_check_table_version(&lcr_dbf, dbh, &lcr_rule_target_table,
--                      LCR_RULE_TARGET_TABLE_VERSION) < 0) {
-+                         LCR_RULE_TARGET_TABLE_VERSION)
-+                      < 0) {
-               DB_TABLE_VERSION_ERROR(lcr_rule_target_table);
-               goto dberror;
-       }
--      if (db_check_table_version(&lcr_dbf, dbh, &lcr_gw_table,
--                      LCR_GW_TABLE_VERSION) < 0) {
-+      if(db_check_table_version(
-+                         &lcr_dbf, dbh, &lcr_gw_table, LCR_GW_TABLE_VERSION)
-+                      < 0) {
-               DB_TABLE_VERSION_ERROR(lcr_gw_table);
-               goto dberror;
-       }
-@@ -923,20 +928,24 @@ static int comp_gws(const void *_g1, con
- /*
-  * Compare a gateway using IP address and the src port
-  */
--static struct gw_info * find_gateway_by_ip_and_port(struct gw_info * gw, struct gw_info * gws) {
-+static struct gw_info *find_gateway_by_ip_and_port(
-+              struct gw_info *gw, struct gw_info *gws)
-+{
-       int tmp = 0, gw_index = 0, i;
--      for (i = 1; i <= gws[0].ip_addr.u.addr32[0]; i++) {
--              tmp = memcmp(gws[i].ip_addr.u.addr, gw->ip_addr.u.addr, gws[i].ip_addr.len);
--              if (gws[i].ip_addr.af == gw->ip_addr.af &&
--                      gws[i].ip_addr.len == gw->ip_addr.len &&
--                      tmp == 0 &&     /* a comparison of the IP address value */
--                      gws[i].port == gw->port) {
--                              gw_index = i;
--                              break;
-+      for(i = 1; i <= gws[0].ip_addr.u.addr32[0]; i++) {
-+              tmp = memcmp(
-+                              gws[i].ip_addr.u.addr, gw->ip_addr.u.addr, gws[i].ip_addr.len);
-+              if(gws[i].ip_addr.af == gw->ip_addr.af
-+                              && gws[i].ip_addr.len == gw->ip_addr.len && tmp == 0
-+                              && /* a comparison of the IP address value */
-+                              gws[i].port == gw->port) {
-+                      gw_index = i;
-+                      break;
-               }
-       }
--      if (gw_index != 0) return &(gws[gw_index]);
-+      if(gw_index != 0)
-+              return &(gws[gw_index]);
-       return NULL;
- }
-@@ -1074,7 +1083,7 @@ static int insert_gws(db1_res_t *res, st
-               row = RES_ROWS(res) + i;
-               if((VAL_NULL(ROW_VALUES(row) + 12) == 1)
-                               || ((VAL_TYPE(ROW_VALUES(row) + 12) != DB1_INT)
--                                                 && (VAL_TYPE(ROW_VALUES(row) + 12) != DB1_UINT))) {
-+                                              && (VAL_TYPE(ROW_VALUES(row) + 12) != DB1_UINT))) {
-                       LM_ERR("lcr_gw id at row <%u> is null or not int\n", i);
-                       return 0;
-               }
-@@ -1501,8 +1510,7 @@ int reload_tables()
-                               if((VAL_NULL(ROW_VALUES(row)) == 1)
-                                               || ((VAL_TYPE(ROW_VALUES(row)) != DB1_INT)
--                                                                 && (VAL_TYPE(ROW_VALUES(row))
--                                                                                        != DB1_UINT))) {
-+                                                              && (VAL_TYPE(ROW_VALUES(row)) != DB1_UINT))) {
-                                       LM_ERR("lcr rule id at row <%u> is null or not int\n", i);
-                                       goto err;
-                               }
-@@ -1544,8 +1552,8 @@ int reload_tables()
-                               if((VAL_NULL(ROW_VALUES(row) + 3) == 1)
-                                               || ((VAL_TYPE(ROW_VALUES(row) + 3) != DB1_INT)
--                                                                 && (VAL_TYPE(ROW_VALUES(row) + 3)
--                                                                                        != DB1_UINT))) {
-+                                                              && (VAL_TYPE(ROW_VALUES(row) + 3)
-+                                                                              != DB1_UINT))) {
-                                       LM_ERR("lcr rule <%u> stopper is NULL or not int\n",
-                                                       rule_id);
-                                       goto err;
-@@ -1558,8 +1566,8 @@ int reload_tables()
-                               if((VAL_NULL(ROW_VALUES(row) + 4) == 1)
-                                               || ((VAL_TYPE(ROW_VALUES(row) + 4) != DB1_INT)
--                                                                 && (VAL_TYPE(ROW_VALUES(row) + 4)
--                                                                                        != DB1_UINT))) {
-+                                                              && (VAL_TYPE(ROW_VALUES(row) + 4)
-+                                                                              != DB1_UINT))) {
-                                       LM_ERR("lcr rule <%u> enabled is NULL or not int\n",
-                                                       rule_id);
-                                       goto err;
-@@ -1769,8 +1777,7 @@ int reload_tables()
-                               row = RES_ROWS(res) + i;
-                               if((VAL_NULL(ROW_VALUES(row)) == 1)
-                                               || ((VAL_TYPE(ROW_VALUES(row)) != DB1_INT)
--                                                                 && (VAL_TYPE(ROW_VALUES(row))
--                                                                                        != DB1_UINT))) {
-+                                                              && (VAL_TYPE(ROW_VALUES(row)) != DB1_UINT))) {
-                                       LM_ERR("lcr_rule_target rule_id at row <%u> is null "
-                                                  "or not int\n",
-                                                       i);
-@@ -1779,8 +1786,8 @@ int reload_tables()
-                               rule_id = (unsigned int)VAL_INT(ROW_VALUES(row));
-                               if((VAL_NULL(ROW_VALUES(row) + 1) == 1)
-                                               || ((VAL_TYPE(ROW_VALUES(row) + 1) != DB1_INT)
--                                                                 && (VAL_TYPE(ROW_VALUES(row) + 1)
--                                                                                        != DB1_UINT))) {
-+                                                              && (VAL_TYPE(ROW_VALUES(row) + 1)
-+                                                                              != DB1_UINT))) {
-                                       LM_ERR("lcr_rule_target gw_id at row <%u> is null "
-                                                  "or not int\n",
-                                                       i);
-@@ -1789,8 +1796,8 @@ int reload_tables()
-                               gw_id = (unsigned int)VAL_INT(ROW_VALUES(row) + 1);
-                               if((VAL_NULL(ROW_VALUES(row) + 2) == 1)
-                                               || ((VAL_TYPE(ROW_VALUES(row) + 2) != DB1_INT)
--                                                                 && (VAL_TYPE(ROW_VALUES(row) + 2)
--                                                                                        != DB1_UINT))) {
-+                                                              && (VAL_TYPE(ROW_VALUES(row) + 2)
-+                                                                              != DB1_UINT))) {
-                                       LM_ERR("lcr_rule_target priority at row <%u> is null "
-                                                  "or not int\n",
-                                                       i);
-@@ -1805,8 +1812,8 @@ int reload_tables()
-                               }
-                               if((VAL_NULL(ROW_VALUES(row) + 3) == 1)
-                                               || ((VAL_TYPE(ROW_VALUES(row) + 3) != DB1_INT)
--                                                                 && (VAL_TYPE(ROW_VALUES(row) + 3)
--                                                                                        != DB1_UINT))) {
-+                                                              && (VAL_TYPE(ROW_VALUES(row) + 3)
-+                                                                              != DB1_UINT))) {
-                                       LM_ERR("lcr_rule_target weight at row <%u> is null "
-                                                  "or not int\n",
-                                                       i);
-@@ -2087,10 +2094,10 @@ void add_gws_into_avps(struct gw_info *g
-               if(5 /* gw_index */ + 5 /* scheme */ + 4 /* strip */ + prefix_len
-                                               + tag_len + 1 /* @ */
-                                               + ((hostname_len > IP6_MAX_STR_SIZE + 2)
--                                                                                ? hostname_len
--                                                                                : IP6_MAX_STR_SIZE + 2)
-+                                                                              ? hostname_len
-+                                                                              : IP6_MAX_STR_SIZE + 2)
-                                               + 6 /* port */ + params_len /* params */
--                                              + 15 /* transport */ + 10   /* flags */
-+                                              + 15 /* transport */ + 10       /* flags */
-                                               + 7                                                     /* separators */
-                                               + 10                                            /* rule_id */
-                               > MAX_URI_LEN) {
-@@ -2174,7 +2181,7 @@ int load_gws_dummy(int lcr_id, str *ruri
-                       if((rule->from_uri_len != 0)
-                                       && (pcre_exec(rule->from_uri_re, NULL, from_uri->s,
-                                                               from_uri->len, 0, 0, NULL, 0)
--                                                         < 0))
-+                                                      < 0))
-                               goto next;
-                       if((from_uri->len > 0) && (rule->mt_tvalue_len > 0)) {
-@@ -2339,7 +2346,7 @@ static int ki_load_gws_furi(
-                       if((rule->from_uri_len != 0)
-                                       && (pcre_exec(rule->from_uri_re, NULL, from_uri->s,
-                                                               from_uri->len, 0, 0, NULL, 0)
--                                                         < 0)) {
-+                                                      < 0)) {
-                               LM_DBG("from uri <%.*s> did not match to from regex <%.*s>\n",
-                                               from_uri->len, from_uri->s, rule->from_uri_len,
-                                               rule->from_uri);
-@@ -2375,7 +2382,7 @@ static int ki_load_gws_furi(
-                       if((rule->request_uri_len != 0)
-                                       && (pcre_exec(rule->request_uri_re, NULL, request_uri->s,
-                                                               request_uri->len, 0, 0, NULL, 0)
--                                                         < 0)) {
-+                                                      < 0)) {
-                               LM_DBG("request uri <%.*s> did not match to request regex "
-                                          "<%.*s>\n",
-                                               request_uri->len, request_uri->s, rule->request_uri_len,
-@@ -2549,7 +2556,8 @@ static int generate_uris(struct sip_msg
-               return 0; /* No more gateways left */
-       decode_avp_value(gw_uri_val.s.s, gw_index, &scheme, &strip, &prefix,
--                      &tmp_tag, addr, &hostname, &port, &params, &transport, flags, rule_id);
-+                      &tmp_tag, addr, &hostname, &port, &params, &transport, flags,
-+                      rule_id);
-       if(addr->af != 0) {
-               addr_str.s = ip_addr2a(addr);
-@@ -2560,8 +2568,8 @@ static int generate_uris(struct sip_msg
-       if(scheme.len + r_uri_user->len - strip + prefix.len + 1 /* @ */
-                                       + ((hostname.len > IP6_MAX_STR_SIZE + 2)
--                                                                        ? hostname.len
--                                                                        : IP6_MAX_STR_SIZE + 2)
-+                                                                      ? hostname.len
-+                                                                      : IP6_MAX_STR_SIZE + 2)
-                                       + 1 /* : */ + port.len + params.len + transport.len
-                                       + 1 /* null */
-                       > MAX_URI_LEN) {
-@@ -2992,7 +3000,7 @@ static int ki_next_gw(sip_msg_t *_m)
-       if(rule_id_avp_param) {
-               val.n = rule_id;
-               add_avp(rule_id_avp_type, rule_id_avp, val);
--                              LM_DBG("added rule_id_avp <%u>\n", (unsigned int)val.n);
-+              LM_DBG("added rule_id_avp <%u>\n", (unsigned int)val.n);
-       }
-       /* Add index of selected gw to defunct gw AVP */
-@@ -3018,7 +3026,8 @@ static int next_gw(struct sip_msg *_m, c
-  * Checks if request comes from ip address of a gateway
-  */
- static int do_from_gw(struct sip_msg *_m, unsigned int lcr_id,
--              struct ip_addr *src_addr, uri_transport transport, unsigned int src_port)
-+              struct ip_addr *src_addr, uri_transport transport,
-+              unsigned int src_port)
- {
-       struct gw_info *res, gw, *gws;
-       int_str val;
-@@ -3032,18 +3041,20 @@ static int do_from_gw(struct sip_msg *_m
-       }
-       gw.ip_addr = *src_addr;
--      if (src_port != 0) {
-+      if(src_port != 0) {
-               /* Search for gw based on its ip address and port */
-               gw.port = src_port;
-               res = find_gateway_by_ip_and_port(&gw, gws);
-       } else {
-               /* Search for gw based on its ip address */
--              res = (struct gw_info *)bsearch(&gw, &(gws[1]), gws[0].ip_addr.u.addr32[0],
--                              sizeof(struct gw_info), comp_gws);
-+              res = (struct gw_info *)bsearch(&gw, &(gws[1]),
-+                              gws[0].ip_addr.u.addr32[0], sizeof(struct gw_info), comp_gws);
-       }
-       /* Store tag and flags and return result */
--      if((res != NULL) && ((transport == PROTO_NONE) || (res->transport_code == transport))) {
-+      if((res != NULL)
-+                      && ((transport == PROTO_NONE)
-+                                      || (res->transport_code == transport))) {
-               LM_DBG("request came from gw\n");
-               if(tag_avp_param) {
-                       val.s.s = res->tag;
-@@ -3178,8 +3189,8 @@ static int from_gw_3(
-       return ki_from_gw_addr_port(_m, lcr_id, &addr_str, transport, 0);
- }
--static int from_gw_4(
--              struct sip_msg *_m, char *_lcr_id, char *_addr, char *_transport, char *_src_port)
-+static int from_gw_4(struct sip_msg *_m, char *_lcr_id, char *_addr,
-+              char *_transport, char *_src_port)
- {
-       int lcr_id;
-       str addr_str;
-@@ -3202,7 +3213,7 @@ static int from_gw_4(
-               LM_ERR("invalid transport parameter %s\n", _lcr_id);
-               return -1;
-       }
--      tmp=0;
-+      tmp = 0;
-       src_port = strtol(_src_port, &tmp, 10);
-       if((tmp == 0) || (*tmp) || (tmp == _src_port)) {
-               LM_ERR("invalid port parameter %s\n", _src_port);
-@@ -3243,8 +3254,8 @@ static int from_any_gw_0(struct sip_msg
-  * Checks if request comes from ip address of a gateway taking source
-  * IP address, transport protocol and source port from parameters.
-  */
--static int ki_from_any_gw_addr_port(sip_msg_t *_m, str *addr_str, int transport,
--              int src_port)
-+static int ki_from_any_gw_addr_port(
-+              sip_msg_t *_m, str *addr_str, int transport, int src_port)
- {
-       unsigned int i;
-       struct ip_addr *ip, src_addr;
-@@ -3307,7 +3318,8 @@ static int from_any_gw_2(struct sip_msg
-       return ki_from_any_gw_addr_port(_m, &addr_str, transport, 0);
- }
--static int from_any_gw_3(struct sip_msg *_m, char *_addr, char *_transport, char *_src_port)
-+static int from_any_gw_3(
-+              struct sip_msg *_m, char *_addr, char *_transport, char *_src_port)
- {
-       str addr_str;
-       uri_transport transport;
-@@ -3323,7 +3335,7 @@ static int from_any_gw_3(struct sip_msg
-               LM_ERR("invalid transport parameter %s\n", _transport);
-               return -1;
-       }
--      tmp=0;
-+      tmp = 0;
-       src_port = strtol(_src_port, &tmp, 10);
-       if((tmp == 0) || (*tmp) || (tmp == _src_port)) {
-               LM_ERR("invalid port parameter %s\n", _src_port);
-@@ -3355,8 +3367,9 @@ static int do_to_gw(struct sip_msg *_m,
-                       sizeof(struct gw_info), comp_gws);
-       /* Return result */
--      if((res != NULL) && ((transport == PROTO_NONE)
--                                                              || (res->transport_code == transport))) {
-+      if((res != NULL)
-+                      && ((transport == PROTO_NONE)
-+                                      || (res->transport_code == transport))) {
-               LM_DBG("request goes to gw\n");
-               return 1;
-       } else {
---- a/src/modules/lcr/lcr_rpc.c
-+++ b/src/modules/lcr/lcr_rpc.c
-@@ -48,7 +48,8 @@ static void reload(rpc_t *rpc, void *c)
- static const char *dump_gws_doc[2] = {"Dump the contents of lcr_gws table.", 0};
--static void dump_gw(rpc_t *rpc, void *st, struct gw_info *gw, unsigned int gw_index, unsigned int lcr_id)
-+static void dump_gw(rpc_t *rpc, void *st, struct gw_info *gw,
-+              unsigned int gw_index, unsigned int lcr_id)
- {
-       str scheme, gw_name, hostname, params, transport;
-       str prefix, tag;
-@@ -72,14 +73,10 @@ static void dump_gw(rpc_t *rpc, void *st
-                       break;
-               case AF_INET6:
-                       rpc->struct_printf(st, "ip_addr", "%x:%x:%x:%x:%x:%x:%x:%x",
--                                      gw->ip_addr.u.addr16[0],
--                                      gw->ip_addr.u.addr16[1],
--                                      gw->ip_addr.u.addr16[2],
--                                      gw->ip_addr.u.addr16[3],
--                                      gw->ip_addr.u.addr16[4],
--                                      gw->ip_addr.u.addr16[5],
--                                      gw->ip_addr.u.addr16[6],
--                                      gw->ip_addr.u.addr16[7]);
-+                                      gw->ip_addr.u.addr16[0], gw->ip_addr.u.addr16[1],
-+                                      gw->ip_addr.u.addr16[2], gw->ip_addr.u.addr16[3],
-+                                      gw->ip_addr.u.addr16[4], gw->ip_addr.u.addr16[5],
-+                                      gw->ip_addr.u.addr16[6], gw->ip_addr.u.addr16[7]);
-                       break;
-               case 0:
-                       rpc->struct_add(st, "s", "ip_addr", "0.0.0.0");
-@@ -99,11 +96,10 @@ static void dump_gw(rpc_t *rpc, void *st
-       prefix.len = gw->prefix_len;
-       tag.s = gw->tag;
-       tag.len = gw->tag_len;
--      start = int2strbuf(
--                      gw->defunct_until, &(buf[0]), INT2STR_MAX_LEN, &len);
--      rpc->struct_add(st, "dSSdds", "strip", gw->strip, "prefix",
--                      &prefix, "tag", &tag, "flags", gw->flags, "state",
--                      gw->state, "defunct_until", start);
-+      start = int2strbuf(gw->defunct_until, &(buf[0]), INT2STR_MAX_LEN, &len);
-+      rpc->struct_add(st, "dSSdds", "strip", gw->strip, "prefix", &prefix, "tag",
-+                      &tag, "flags", gw->flags, "state", gw->state, "defunct_until",
-+                      start);
- }
- static void dump_gws(rpc_t *rpc, void *c)
-@@ -119,7 +115,7 @@ static void dump_gws(rpc_t *rpc, void *c
-               gws = gw_pt[j];
-               for(i = 1; i <= gws[0].ip_addr.u.addr32[0]; i++) {
--                      if (srec==NULL) {
-+                      if(srec == NULL) {
-                               /* We create one array per lcr_id */
-                               if(rpc->add(c, "{", &rec) < 0)
-                                       return;
-@@ -143,7 +139,7 @@ static void dump_rules(rpc_t *rpc, void
-       int i, j;
-       int _filter_by_prefix = 0;
-       int _lcr_id = 0;
--      str _prefix = {NULL,0};
-+      str _prefix = {NULL, 0};
-       struct rule_info **rules, *rule;
-       struct target *t;
-       void *rec = NULL;
-@@ -151,29 +147,32 @@ static void dump_rules(rpc_t *rpc, void
-       void *st, *sst, *ssst;
-       str prefix, from_uri, request_uri;
--      if (rpc->scan(c, "d", &_lcr_id)>0) {
--              if (rpc->scan(c, ".S", &_prefix)>0) {
-+      if(rpc->scan(c, "d", &_lcr_id) > 0) {
-+              if(rpc->scan(c, ".S", &_prefix) > 0) {
-                       _filter_by_prefix = 1;
-               }
-       }
-       for(j = 1; j <= lcr_count_param; j++) {
--              if (_lcr_id && _lcr_id!=j) continue;
-+              if(_lcr_id && _lcr_id != j)
-+                      continue;
-               rules = rule_pt[j];
-               for(i = 0; i < lcr_rule_hash_size_param; i++) {
-                       rule = rules[i];
-                       while(rule) {
--                              if (_filter_by_prefix && _prefix.len && _prefix.s) {
--                                      if (_prefix.len < rule->prefix_len ||
--                                              strncmp(_prefix.s, rule->prefix,  rule->prefix_len)!=0) {
-+                              if(_filter_by_prefix && _prefix.len && _prefix.s) {
-+                                      if(_prefix.len < rule->prefix_len
-+                                                      || strncmp(_prefix.s, rule->prefix,
-+                                                                         rule->prefix_len)
-+                                                                         != 0) {
-                                               rule = rule->next;
-                                               continue;
-                                       }
-                               }
--                              if (srec==NULL) {
-+                              if(srec == NULL) {
-                                       /* We create one array per lcr_id */
-                                       if(rpc->add(c, "{", &rec) < 0)
-                                               return;
-@@ -192,11 +191,11 @@ static void dump_rules(rpc_t *rpc, void
-                                               rule->rule_id, "prefix", &prefix, "from_uri", &from_uri,
-                                               "request_uri", &request_uri, "stopper", rule->stopper);
-                               t = rule->targets;
--                              if (t) {
--                                      if (rpc->struct_add(st, "[", "gw", &sst) < 0)
-+                              if(t) {
-+                                      if(rpc->struct_add(st, "[", "gw", &sst) < 0)
-                                               return;
-                                       while(t) {
--                                              if (rpc->array_add(sst, "{", &ssst) < 0)
-+                                              if(rpc->array_add(sst, "{", &ssst) < 0)
-                                                       return;
-                                               rpc->struct_add(ssst, "ddd", "gw_index", t->gw_index,
-                                                               "priority", t->priority, "weight", t->weight);
-@@ -210,10 +209,10 @@ static void dump_rules(rpc_t *rpc, void
-               /* Mark the end of rule array */
-               srec = NULL;
--              if (_filter_by_prefix)
-+              if(_filter_by_prefix)
-                       continue;
-               rule = rules[lcr_rule_hash_size_param];
--              if (rule) {
-+              if(rule) {
-                       if(rpc->struct_add(rec, "[", "prefix_len", &st) < 0)
-                               return;
-                       while(rule) {
-@@ -222,7 +221,8 @@ static void dump_rules(rpc_t *rpc, void
-                       }
-               }
-       }
--      if (rec==NULL) rpc->fault(c, 404, "Empty reply");
-+      if(rec == NULL)
-+              rpc->fault(c, 404, "Empty reply");
- }
-@@ -269,8 +269,9 @@ static void load_gws(rpc_t *rpc, void *c
-       ret = rpc->scan(c, "dS*SS", &lcr_id, &uri_user, &caller_uri, &request_uri);
-       if(ret == -1) {
--              rpc->fault(c, 400, "parameter error; if using cli, remember to prefix "
--                                                 "numeric uri_user param value with 's:'");
-+              rpc->fault(c, 400,
-+                              "parameter error; if using cli, remember to prefix "
-+                              "numeric uri_user param value with 's:'");
-               return;
-       }
-@@ -289,7 +290,7 @@ static void load_gws(rpc_t *rpc, void *c
-       gws = gw_pt[lcr_id];
-       for(j = 0; j < gw_count; j++) {
--              if (rec==NULL) {
-+              if(rec == NULL) {
-                       if(rpc->add(c, "[", &rec) < 0)
-                               return;
-               }
diff --git a/net/kamailio/patches/021-lcr-typos.patch b/net/kamailio/patches/021-lcr-typos.patch
deleted file mode 100644 (file)
index 4029f39..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-From 70a9ea2b1e5cceeaf050356e7baf00127a58567d Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?=D0=94=D0=B8=D0=BB=D1=8F=D0=BD=20=D0=9F=D0=B0=D0=BB=D0=B0?=
- =?UTF-8?q?=D1=83=D0=B7=D0=BE=D0=B2?= <[email protected]>
-Date: Mon, 8 May 2023 13:13:49 +0200
-Subject: [PATCH] lcr: typos
-
----
- src/modules/lcr/doc/lcr_admin.xml | 2 +-
- src/modules/lcr/lcr_mod.c         | 6 +++---
- 2 files changed, 4 insertions(+), 4 deletions(-)
-
---- a/src/modules/lcr/doc/lcr_admin.xml
-+++ b/src/modules/lcr/doc/lcr_admin.xml
-@@ -1641,7 +1641,7 @@ if (to_any_gw("192.55.66.2", 1)) {
-               <para>
-                       Causes lcr module to dump the contents of its
-                       in-memory lcr_rule and lcr_rule_target tables.
--                      Rules can be filetered by lcr_id or lcr_id and prefix.
-+                      Rules can be filtered by lcr_id or lcr_id and prefix.
-                       The filters are passed as optional parameters.
-               </para>
-               <para>Parameters:</para>
---- a/src/modules/lcr/lcr_mod.c
-+++ b/src/modules/lcr/lcr_mod.c
-@@ -188,7 +188,7 @@ unsigned int lcr_gw_count_param = DEF_LC
- /* can gws be defuncted */
- static unsigned int defunct_capability_param = 0;
--/* dont strip or tag param */
-+/* don't strip or tag param */
- static int dont_strip_or_prefix_flag_param = -1;
- /* ping related params */
-@@ -846,7 +846,7 @@ static int comp_matched(const void *m1,
-               if(mi1->priority < mi2->priority)
-                       return 1;
-               if(mi1->priority == mi2->priority) {
--                      /* Sort by randomized weigth */
-+                      /* Sort by randomized weight */
-                       if(mi1->weight > mi2->weight)
-                               return 1;
-                       if(mi1->weight == mi2->weight)
-@@ -863,7 +863,7 @@ static int comp_matched(const void *m1,
-               if(mi1->priority < mi2->priority)
-                       return 1;
-               if(mi1->priority == mi2->priority) {
--                      /* Sort by randomized weigth */
-+                      /* Sort by randomized weight */
-                       if(mi1->weight > mi2->weight)
-                               return 1;
-                       if(mi1->weight == mi2->weight)
diff --git a/net/kamailio/patches/022-lcr-pcre2-migration.patch b/net/kamailio/patches/022-lcr-pcre2-migration.patch
deleted file mode 100644 (file)
index c894e3a..0000000
+++ /dev/null
@@ -1,508 +0,0 @@
-From e3e2c41e8c46a13bad18dd40fd9e3540020dd5eb Mon Sep 17 00:00:00 2001
-From: Victor Seva <[email protected]>
-Date: Mon, 21 Aug 2023 13:30:36 +0200
-Subject: [PATCH] lcr: pcre2 migration
-
----
- src/modules/lcr/Makefile  |  12 +--
- src/modules/lcr/hash.c    |  24 ++---
- src/modules/lcr/hash.h    |  10 +-
- src/modules/lcr/lcr_mod.c | 187 +++++++++++++++++++++++++-------------
- src/modules/lcr/lcr_mod.h |   8 +-
- 5 files changed, 150 insertions(+), 91 deletions(-)
-
---- a/src/modules/lcr/Makefile
-+++ b/src/modules/lcr/Makefile
-@@ -9,20 +9,15 @@ auto_gen=
- NAME=lcr.so
- ifeq ($(CROSS_COMPILE),)
--PCRE_BUILDER = $(shell \
--      if pkg-config --exists libcre; then \
--              echo 'pkg-config libpcre'; \
--      else \
--              which pcre-config; \
--      fi)
-+PCRE_BUILDER = $(shell command -v pcre2-config)
- endif
- ifeq ($(PCRE_BUILDER),)
-       PCREDEFS=-I$(LOCALBASE)/include
--      PCRELIBS=-L$(LOCALBASE)/lib -lpcre
-+      PCRELIBS=-L$(LOCALBASE)/lib -lpcre2-8
- else
-       PCREDEFS = $(shell $(PCRE_BUILDER) --cflags)
--      PCRELIBS = $(shell $(PCRE_BUILDER) --libs)
-+      PCRELIBS = $(shell $(PCRE_BUILDER) --libs8)
- endif
- DEFS+=$(PCREDEFS)
-@@ -31,4 +26,3 @@ LIBS+=$(PCRELIBS)
- SERLIBPATH=../../lib
- SER_LIBS+=$(SERLIBPATH)/srdb1/srdb1
- include ../../Makefile.modules
--
---- a/src/modules/lcr/hash.c
-+++ b/src/modules/lcr/hash.c
-@@ -15,8 +15,8 @@
-  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  * GNU General Public License for more details.
-  *
-- * You should have received a copy of the GNU General Public License 
-- * along with this program; if not, write to the Free Software 
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-  */
-@@ -36,10 +36,10 @@
- /* Add lcr entry into hash table */
- int rule_hash_table_insert(struct rule_info **hash_table, unsigned int lcr_id,
-               unsigned int rule_id, unsigned short prefix_len, char *prefix,
--              unsigned short from_uri_len, char *from_uri, pcre *from_uri_re,
-+              unsigned short from_uri_len, char *from_uri, pcre2_code *from_uri_re,
-               unsigned short mt_tvalue_len, char *mt_tvalue,
--              unsigned short request_uri_len, char *request_uri, pcre *request_uri_re,
--              unsigned short stopper)
-+              unsigned short request_uri_len, char *request_uri,
-+              pcre2_code *request_uri_re, unsigned short stopper)
- {
-       struct rule_info *rule;
-       str prefix_str;
-@@ -50,9 +50,9 @@ int rule_hash_table_insert(struct rule_i
-       if(rule == NULL) {
-               SHM_MEM_ERROR_FMT("for rule hash table entry\n");
-               if(from_uri_re)
--                      shm_free(from_uri_re);
-+                      pcre2_code_free(from_uri_re);
-               if(request_uri_re)
--                      shm_free(request_uri_re);
-+                      pcre2_code_free(request_uri_re);
-               return 0;
-       }
-       memset(rule, 0, sizeof(struct rule_info));
-@@ -99,9 +99,9 @@ int rule_hash_table_insert(struct rule_i
-       if(rid == NULL) {
-               PKG_MEM_ERROR_FMT("for rule_id hash table entry\n");
-               if(from_uri_re)
--                      shm_free(from_uri_re);
-+                      pcre2_code_free(from_uri_re);
-               if(request_uri_re)
--                      shm_free(request_uri_re);
-+                      pcre2_code_free(request_uri_re);
-               shm_free(rule);
-               return 0;
-       }
-@@ -180,7 +180,7 @@ int rule_hash_table_insert_target(struct
- }
--/* 
-+/*
-  * Return pointer to lcr hash table entry to which given prefix hashes to.
-  */
- struct rule_info *rule_hash_table_lookup(
-@@ -209,10 +209,10 @@ void rule_hash_table_contents_free(struc
-               r = hash_table[i];
-               while(r) {
-                       if(r->from_uri_re) {
--                              shm_free(r->from_uri_re);
-+                              pcre2_code_free(r->from_uri_re);
-                       }
-                       if(r->request_uri_re)
--                              shm_free(r->request_uri_re);
-+                              pcre2_code_free(r->request_uri_re);
-                       t = r->targets;
-                       while(t) {
-                               next_t = t->next;
---- a/src/modules/lcr/hash.h
-+++ b/src/modules/lcr/hash.h
-@@ -15,8 +15,8 @@
-  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  * GNU General Public License for more details.
-  *
-- * You should have received a copy of the GNU General Public License 
-- * along with this program; if not, write to the Free Software 
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-  */
-@@ -34,10 +34,10 @@
- int rule_hash_table_insert(struct rule_info **hash_table, unsigned int lcr_id,
-               unsigned int rule_id, unsigned short prefix_len, char *prefix,
--              unsigned short from_uri_len, char *from_uri, pcre *from_uri_re,
-+              unsigned short from_uri_len, char *from_uri, pcre2_code *from_uri_re,
-               unsigned short mt_tvalue_len, char *mt_tvalue,
--              unsigned short request_uri_len, char *request_uri, pcre *request_uri_re,
--              unsigned short stopper);
-+              unsigned short request_uri_len, char *request_uri,
-+              pcre2_code *request_uri_re, unsigned short stopper);
- int rule_hash_table_insert_target(struct rule_info **hash_table,
-               struct gw_info *gws, unsigned int rule_id, unsigned int gw_id,
---- a/src/modules/lcr/lcr_mod.c
-+++ b/src/modules/lcr/lcr_mod.c
-@@ -16,8 +16,8 @@
-  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  * GNU General Public License for more details.
-  *
-- * You should have received a copy of the GNU General Public License 
-- * along with this program; if not, write to the Free Software 
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-  *
-  */
-@@ -43,7 +43,8 @@
- #include <stdlib.h>
- #include <string.h>
- #include <arpa/inet.h>
--#include <pcre.h>
-+#define PCRE2_CODE_UNIT_WIDTH 8
-+#include <pcre2.h>
- #include "../../core/locking.h"
- #include "../../core/sr_module.h"
- #include "../../core/dprint.h"
-@@ -204,6 +205,9 @@ static unsigned int priority_ordering_pa
- /* mtree tree name */
- str mtree_param = {"lcr", 3};
-+static pcre2_general_context *lcr_gctx = NULL;
-+static pcre2_compile_context *lcr_ctx = NULL;
-+
- /*
-  * Other module types and variables
-  */
-@@ -364,7 +368,7 @@ static param_export_t params[] = {
-  * Module interface
-  */
- struct module_exports exports = {
--      "lcr", 
-+      "lcr",
-       DEFAULT_DLFLAGS, /* dlopen flags */
-       cmds,            /* Exported functions */
-       params,          /* Exported parameters */
-@@ -422,6 +426,16 @@ static void lcr_db_close(void)
-       }
- }
-+static void *pcre2_malloc(size_t size, void *ext)
-+{
-+      return shm_malloc(size);
-+}
-+
-+static void pcre2_free(void *ptr, void *ext)
-+{
-+      shm_free(ptr);
-+      ptr = NULL;
-+}
- /*
-  * Module initialization function that is called before the main process forks
-@@ -703,7 +717,15 @@ static int mod_init(void)
-       lcr_db_close();
-       /* rule shared memory */
--
-+      if((lcr_gctx = pcre2_general_context_create(pcre2_malloc, pcre2_free, NULL))
-+                      == NULL) {
-+              LM_ERR("pcre2 general context creation failed\n");
-+              goto err;
-+      }
-+      if((lcr_ctx = pcre2_compile_context_create(lcr_gctx)) == NULL) {
-+              LM_ERR("pcre2 compile context creation failed\n");
-+              goto err;
-+      }
-       /* rule hash table pointer table */
-       /* pointer at index 0 points to temp rule hash table */
-       rule_pt = (struct rule_info ***)shm_malloc(
-@@ -779,6 +801,12 @@ dberror:
-       lcr_db_close();
- err:
-+      if(lcr_ctx) {
-+              pcre2_compile_context_free(lcr_ctx);
-+      }
-+      if(lcr_gctx) {
-+              pcre2_general_context_free(lcr_gctx);
-+      }
-       free_shared_memory();
-       return -1;
- }
-@@ -794,7 +822,12 @@ static int child_init(int rank)
- static void destroy(void)
- {
-       lcr_db_close();
--
-+      if(lcr_ctx) {
-+              pcre2_compile_context_free(lcr_ctx);
-+      }
-+      if(lcr_gctx) {
-+              pcre2_general_context_free(lcr_gctx);
-+      }
-       free_shared_memory();
- }
-@@ -875,33 +908,32 @@ static int comp_matched(const void *m1,
- /* Compile pattern into shared memory and return pointer to it. */
--static pcre *reg_ex_comp(const char *pattern)
-+static pcre2_code *reg_ex_comp(const char *pattern)
- {
--      pcre *re, *result;
--      const char *error;
--      int rc, err_offset;
--      size_t size;
--
--      re = pcre_compile(pattern, 0, &error, &err_offset, NULL);
--      if(re == NULL) {
--              LM_ERR("pcre compilation of '%s' failed at offset %d: %s\n", pattern,
--                              err_offset, error);
--              return (pcre *)0;
--      }
--      rc = pcre_fullinfo(re, NULL, PCRE_INFO_SIZE, &size);
--      if(rc != 0) {
--              LM_ERR("pcre_fullinfo on compiled pattern '%s' yielded error: %d\n",
--                              pattern, rc);
--              return (pcre *)0;
--      }
--      result = (pcre *)shm_malloc(size);
-+      pcre2_code *result;
-+      int pcre_error_num = 0;
-+      char pcre_error[128];
-+      size_t pcre_erroffset;
-+
-+      result = pcre2_compile((PCRE2_SPTR)pattern, PCRE2_ZERO_TERMINATED, 0,
-+                      &pcre_error_num, &pcre_erroffset, lcr_ctx);
-       if(result == NULL) {
--              pcre_free(re);
--              SHM_MEM_ERROR_FMT("for compiled PCRE pattern\n");
--              return (pcre *)0;
-+              switch(pcre2_get_error_message(
-+                              pcre_error_num, (PCRE2_UCHAR *)pcre_error, 128)) {
-+                      case PCRE2_ERROR_NOMEMORY:
-+                              snprintf(pcre_error, 128,
-+                                              "unknown error[%d]: pcre2 error buffer too small",
-+                                              pcre_error_num);
-+                              break;
-+                      case PCRE2_ERROR_BADDATA:
-+                              snprintf(pcre_error, 128, "unknown pcre2 error[%d]",
-+                                              pcre_error_num);
-+                              break;
-+              }
-+              LM_ERR("pcre compilation of '%s' failed at offset %zu: %s\n", pattern,
-+                              pcre_erroffset, pcre_error);
-+              return NULL;
-       }
--      memcpy(result, re, size);
--      pcre_free(re);
-       return result;
- }
-@@ -950,7 +982,7 @@ static struct gw_info *find_gateway_by_i
-       return NULL;
- }
--/* 
-+/*
-  * Insert gw info into index i or gws table
-  */
- static int insert_gw(struct gw_info *gws, unsigned int i, unsigned int gw_id,
-@@ -1024,7 +1056,7 @@ static int insert_gw(struct gw_info *gws
- /*
-- * Insert prefix_len into list pointed by last rule hash table entry 
-+ * Insert prefix_len into list pointed by last rule hash table entry
-  * if not there already. Keep list in decending prefix_len order.
-  */
- static int prefix_len_insert(
-@@ -1414,7 +1446,7 @@ int reload_tables()
-       db_key_t gw_cols[13];
-       db_key_t rule_cols[7];
-       db_key_t target_cols[4];
--      pcre *from_uri_re, *request_uri_re;
-+      pcre2_code *from_uri_re, *request_uri_re;
-       struct gw_info *gws, *gw_pt_tmp;
-       struct rule_info **rules, **rule_pt_tmp;
-@@ -2129,11 +2161,12 @@ void add_gws_into_avps(struct gw_info *g
- int load_gws_dummy(int lcr_id, str *ruri_user, str *from_uri, str *request_uri,
-               unsigned int *gw_indexes)
- {
--      int i, j;
-+      int i, j, rc;
-       unsigned int gw_index, now, dex;
-       struct rule_info **rules, *rule, *pl;
-       struct gw_info *gws;
-       struct target *t;
-+      pcre2_match_data *pcre_md = NULL;
-       struct matched_gw_info matched_gws[MAX_NO_OF_GWS + 1];
-       struct sip_uri furi;
-       struct usr_avp *avp;
-@@ -2178,12 +2211,18 @@ int load_gws_dummy(int lcr_id, str *ruri
-                                       || strncmp(rule->prefix, ruri_user->s, pl->prefix_len))
-                               goto next;
--                      if((rule->from_uri_len != 0)
--                                      && (pcre_exec(rule->from_uri_re, NULL, from_uri->s,
--                                                              from_uri->len, 0, 0, NULL, 0)
--                                                      < 0))
--                              goto next;
--
-+                      if(rule->from_uri_len != 0) {
-+                              pcre_md = pcre2_match_data_create_from_pattern(
-+                                              rule->from_uri_re, NULL);
-+                              rc = pcre2_match(rule->from_uri_re, (PCRE2_SPTR)from_uri->s,
-+                                              (PCRE2_SIZE)from_uri->len, 0, 0, pcre_md, NULL);
-+                              if(pcre_md) {
-+                                      pcre2_match_data_free(pcre_md);
-+                                      pcre_md = NULL;
-+                              }
-+                              if(rc < 0)
-+                                      goto next;
-+                      }
-                       if((from_uri->len > 0) && (rule->mt_tvalue_len > 0)) {
-                               if(mtree_api.mt_match(&msg, &mtree_param, &(furi.user), 2)
-                                               == -1) {
-@@ -2216,9 +2255,16 @@ int load_gws_dummy(int lcr_id, str *ruri
-                                                  "param has not been given.\n");
-                                       return -1;
-                               }
--                              if(pcre_exec(rule->request_uri_re, NULL, request_uri->s,
--                                                 request_uri->len, 0, 0, NULL, 0)
--                                              < 0)
-+                              pcre_md = pcre2_match_data_create_from_pattern(
-+                                              rule->request_uri_re, NULL);
-+                              rc = pcre2_match(rule->request_uri_re,
-+                                              (PCRE2_SPTR)request_uri->s,
-+                                              (PCRE2_SIZE)request_uri->len, 0, 0, pcre_md, NULL);
-+                              if(pcre_md) {
-+                                      pcre2_match_data_free(pcre_md);
-+                                      pcre_md = NULL;
-+                              }
-+                              if(rc < 0)
-                                       goto next;
-                       }
-@@ -2282,9 +2328,10 @@ static int ki_load_gws_furi(
-               sip_msg_t *_m, int lcr_id, str *ruri_user, str *from_uri)
- {
-       str *request_uri;
--      int i, j;
-+      int i, j, rc;
-       unsigned int gw_index, now, dex;
-       int_str val;
-+      pcre2_match_data *pcre_md = NULL;
-       struct matched_gw_info matched_gws[MAX_NO_OF_GWS + 1];
-       struct rule_info **rules, *rule, *pl;
-       struct gw_info *gws;
-@@ -2343,14 +2390,22 @@ static int ki_load_gws_furi(
-                               goto next;
-                       /* Match from uri */
--                      if((rule->from_uri_len != 0)
--                                      && (pcre_exec(rule->from_uri_re, NULL, from_uri->s,
--                                                              from_uri->len, 0, 0, NULL, 0)
--                                                      < 0)) {
--                              LM_DBG("from uri <%.*s> did not match to from regex <%.*s>\n",
--                                              from_uri->len, from_uri->s, rule->from_uri_len,
--                                              rule->from_uri);
--                              goto next;
-+                      if(rule->from_uri_len != 0) {
-+                              pcre_md = pcre2_match_data_create_from_pattern(
-+                                              rule->from_uri_re, NULL);
-+                              rc = pcre2_match(rule->from_uri_re, (PCRE2_SPTR)from_uri->s,
-+                                              (PCRE2_SIZE)from_uri->len, 0, 0, pcre_md, NULL);
-+                              if(pcre_md) {
-+                                      pcre2_match_data_free(pcre_md);
-+                                      pcre_md = NULL;
-+                              }
-+                              if(rc < 0) {
-+                                      LM_DBG("from uri <%.*s> did not match to from regex "
-+                                                 "<%.*s>\n",
-+                                                      from_uri->len, from_uri->s, rule->from_uri_len,
-+                                                      rule->from_uri);
-+                                      goto next;
-+                              }
-                       }
-                       /* Match from uri user */
-@@ -2379,15 +2434,23 @@ static int ki_load_gws_furi(
-                       }
-                       /* Match request uri */
--                      if((rule->request_uri_len != 0)
--                                      && (pcre_exec(rule->request_uri_re, NULL, request_uri->s,
--                                                              request_uri->len, 0, 0, NULL, 0)
--                                                      < 0)) {
--                              LM_DBG("request uri <%.*s> did not match to request regex "
--                                         "<%.*s>\n",
--                                              request_uri->len, request_uri->s, rule->request_uri_len,
--                                              rule->request_uri);
--                              goto next;
-+                      if(rule->request_uri_len != 0) {
-+                              pcre_md = pcre2_match_data_create_from_pattern(
-+                                              rule->request_uri_re, NULL);
-+                              rc = pcre2_match(rule->request_uri_re,
-+                                              (PCRE2_SPTR)request_uri->s,
-+                                              (PCRE2_SIZE)request_uri->len, 0, 0, pcre_md, NULL);
-+                              if(pcre_md) {
-+                                      pcre2_match_data_free(pcre_md);
-+                                      pcre_md = NULL;
-+                              }
-+                              if(rc < 0) {
-+                                      LM_DBG("request uri <%.*s> did not match to request regex "
-+                                                 "<%.*s>\n",
-+                                                      request_uri->len, request_uri->s,
-+                                                      rule->request_uri_len, rule->request_uri);
-+                                      goto next;
-+                              }
-                       }
-                       /* Load gws associated with this rule */
-@@ -3015,7 +3078,7 @@ static int ki_next_gw(sip_msg_t *_m)
- }
- /**
-- * 
-+ *
-  */
- static int next_gw(struct sip_msg *_m, char *_s1, char *_s2)
- {
---- a/src/modules/lcr/lcr_mod.h
-+++ b/src/modules/lcr/lcr_mod.h
-@@ -2,6 +2,7 @@
-  * Various lcr related constant, types, and external variables
-  *
-  * Copyright (C) 2005-2014 Juha Heinanen
-+ * Copyright (C) 2023 Victor Seva
-  *
-  * This file is part of Kamailio, a free SIP server.
-  *
-@@ -33,7 +34,8 @@
- #define LCR_MOD_H
- #include <stdio.h>
--#include <pcre.h>
-+#define PCRE2_CODE_UNIT_WIDTH 8
-+#include <pcre2.h>
- #include "../../core/locking.h"
- #include "../../core/parser/parse_uri.h"
- #include "../../core/ip_addr.h"
-@@ -60,10 +62,10 @@ struct rule_info
-       unsigned short from_uri_len;
-       char mt_tvalue[MAX_MT_TVALUE_LEN + 1];
-       unsigned short mt_tvalue_len;
--      pcre *from_uri_re;
-+      pcre2_code *from_uri_re;
-       char request_uri[MAX_URI_LEN + 1];
-       unsigned short request_uri_len;
--      pcre *request_uri_re;
-+      pcre2_code *request_uri_re;
-       unsigned short stopper;
-       unsigned int enabled;
-       struct target *targets;
diff --git a/net/kamailio/patches/030-regex-clang-format-for-coherent-indentation-and-codi.patch b/net/kamailio/patches/030-regex-clang-format-for-coherent-indentation-and-codi.patch
deleted file mode 100644 (file)
index 485fa69..0000000
+++ /dev/null
@@ -1,715 +0,0 @@
-From fb7c59cafceb35628d40c727dbfa2990335b922a Mon Sep 17 00:00:00 2001
-From: Victor Seva <[email protected]>
-Date: Wed, 17 May 2023 16:37:10 +0200
-Subject: [PATCH] regex: clang-format for coherent indentation and coding style
-
----
- src/modules/regex/regex_mod.c | 313 ++++++++++++++++------------------
- 1 file changed, 150 insertions(+), 163 deletions(-)
-
---- a/src/modules/regex/regex_mod.c
-+++ b/src/modules/regex/regex_mod.c
-@@ -49,9 +49,9 @@ MODULE_VERSION
- #define START 0
- #define RELOAD 1
--#define FILE_MAX_LINE 500        /*!< Max line size in the file */
--#define MAX_GROUPS 20            /*!< Max number of groups */
--#define GROUP_MAX_SIZE 8192      /*!< Max size of a group */
-+#define FILE_MAX_LINE 500     /*!< Max line size in the file */
-+#define MAX_GROUPS 20         /*!< Max number of groups */
-+#define GROUP_MAX_SIZE 8192 /*!< Max size of a group */
- static int regex_init_rpc(void);
-@@ -66,12 +66,12 @@ gen_lock_t *reload_lock;
-  * Module exported parameter variables
-  */
- static char *file;
--static int max_groups            = MAX_GROUPS;
--static int group_max_size        = GROUP_MAX_SIZE;
--static int pcre_caseless         = 0;
--static int pcre_multiline        = 0;
--static int pcre_dotall           = 0;
--static int pcre_extended         = 0;
-+static int max_groups = MAX_GROUPS;
-+static int group_max_size = GROUP_MAX_SIZE;
-+static int pcre_caseless = 0;
-+static int pcre_multiline = 0;
-+static int pcre_dotall = 0;
-+static int pcre_extended = 0;
- /*
-@@ -100,119 +100,117 @@ static void free_shared_memory(void);
- /*
-  * Script functions
-  */
--static int w_pcre_match(struct sip_msg* _msg, char* _s1, char* _s2);
--static int w_pcre_match_group(struct sip_msg* _msg, char* _s1, char* _s2);
-+static int w_pcre_match(struct sip_msg *_msg, char *_s1, char *_s2);
-+static int w_pcre_match_group(struct sip_msg *_msg, char *_s1, char *_s2);
- /*
-  * Exported functions
-  */
--static cmd_export_t cmds[] =
--{
--      { "pcre_match", (cmd_function)w_pcre_match, 2, fixup_spve_spve, 0,
--              REQUEST_ROUTE|FAILURE_ROUTE|ONREPLY_ROUTE|BRANCH_ROUTE|LOCAL_ROUTE },
--      { "pcre_match_group", (cmd_function)w_pcre_match_group, 2, fixup_spve_spve, 0,
--              REQUEST_ROUTE|FAILURE_ROUTE|ONREPLY_ROUTE|BRANCH_ROUTE|LOCAL_ROUTE },
--      { "pcre_match_group", (cmd_function)w_pcre_match_group, 1, fixup_spve_null, 0,
--              REQUEST_ROUTE|FAILURE_ROUTE|ONREPLY_ROUTE|BRANCH_ROUTE|LOCAL_ROUTE },
--      { 0, 0, 0, 0, 0, 0 }
--};
-+static cmd_export_t cmds[] = {
-+              {"pcre_match", (cmd_function)w_pcre_match, 2, fixup_spve_spve, 0,
-+                              REQUEST_ROUTE | FAILURE_ROUTE | ONREPLY_ROUTE | BRANCH_ROUTE
-+                                              | LOCAL_ROUTE},
-+              {"pcre_match_group", (cmd_function)w_pcre_match_group, 2,
-+                              fixup_spve_spve, 0,
-+                              REQUEST_ROUTE | FAILURE_ROUTE | ONREPLY_ROUTE | BRANCH_ROUTE
-+                                              | LOCAL_ROUTE},
-+              {"pcre_match_group", (cmd_function)w_pcre_match_group, 1,
-+                              fixup_spve_null, 0,
-+                              REQUEST_ROUTE | FAILURE_ROUTE | ONREPLY_ROUTE | BRANCH_ROUTE
-+                                              | LOCAL_ROUTE},
-+              {0, 0, 0, 0, 0, 0}};
- /*
-  * Exported parameters
-  */
--static param_export_t params[] = {
--      {"file",                PARAM_STRING,  &file                },
--      {"max_groups",          INT_PARAM,  &max_groups          },
--      {"group_max_size",      INT_PARAM,  &group_max_size      },
--      {"pcre_caseless",       INT_PARAM,  &pcre_caseless       },
--      {"pcre_multiline",      INT_PARAM,  &pcre_multiline      },
--      {"pcre_dotall",         INT_PARAM,  &pcre_dotall         },
--      {"pcre_extended",       INT_PARAM,  &pcre_extended       },
--      {0, 0, 0}
--};
-+static param_export_t params[] = {{"file", PARAM_STRING, &file},
-+              {"max_groups", INT_PARAM, &max_groups},
-+              {"group_max_size", INT_PARAM, &group_max_size},
-+              {"pcre_caseless", INT_PARAM, &pcre_caseless},
-+              {"pcre_multiline", INT_PARAM, &pcre_multiline},
-+              {"pcre_dotall", INT_PARAM, &pcre_dotall},
-+              {"pcre_extended", INT_PARAM, &pcre_extended}, {0, 0, 0}};
- /*
-  * Module interface
-  */
- struct module_exports exports = {
--      "regex",         /*!< module name */
--      DEFAULT_DLFLAGS, /*!< dlopen flags */
--      cmds,            /*!< exported functions */
--      params,          /*!< exported parameters */
--      0,               /*!< exported RPC functions */
--      0,               /*!< exported pseudo-variables */
--      0,               /*!< response handling function */
--      mod_init,        /*!< module initialization function */
--      0,               /*!< per-child init function */
--      destroy          /*!< destroy function */
-+              "regex",                 /*!< module name */
-+              DEFAULT_DLFLAGS, /*!< dlopen flags */
-+              cmds,                    /*!< exported functions */
-+              params,                  /*!< exported parameters */
-+              0,                               /*!< exported RPC functions */
-+              0,                               /*!< exported pseudo-variables */
-+              0,                               /*!< response handling function */
-+              mod_init,                /*!< module initialization function */
-+              0,                               /*!< per-child init function */
-+              destroy                  /*!< destroy function */
- };
--
- /*! \brief
-  * Init module function
-  */
- static int mod_init(void)
- {
--      if(regex_init_rpc()<0)
--      {
-+      if(regex_init_rpc() < 0) {
-               LM_ERR("failed to register RPC commands\n");
-               return -1;
-       }
-       /* Group matching feature */
--      if (file == NULL) {
-+      if(file == NULL) {
-               LM_NOTICE("'file' parameter is not set, group matching disabled\n");
-       } else {
-               /* Create and init the lock */
-               reload_lock = lock_alloc();
--              if (reload_lock == NULL) {
-+              if(reload_lock == NULL) {
-                       LM_ERR("cannot allocate reload_lock\n");
-                       goto err;
-               }
--              if (lock_init(reload_lock) == NULL) {
-+              if(lock_init(reload_lock) == NULL) {
-                       LM_ERR("cannot init the reload_lock\n");
-                       lock_dealloc(reload_lock);
-                       goto err;
-               }
-               /* PCRE options */
--              if (pcre_caseless != 0) {
-+              if(pcre_caseless != 0) {
-                       LM_DBG("PCRE CASELESS enabled\n");
-                       pcre_options = pcre_options | PCRE_CASELESS;
-               }
--              if (pcre_multiline != 0) {
-+              if(pcre_multiline != 0) {
-                       LM_DBG("PCRE MULTILINE enabled\n");
-                       pcre_options = pcre_options | PCRE_MULTILINE;
-               }
--              if (pcre_dotall != 0) {
-+              if(pcre_dotall != 0) {
-                       LM_DBG("PCRE DOTALL enabled\n");
-                       pcre_options = pcre_options | PCRE_DOTALL;
-               }
--              if (pcre_extended != 0) {
-+              if(pcre_extended != 0) {
-                       LM_DBG("PCRE EXTENDED enabled\n");
-                       pcre_options = pcre_options | PCRE_EXTENDED;
-               }
-               LM_DBG("PCRE options: %i\n", pcre_options);
-               /* Pointer to pcres */
--              if ((pcres_addr = shm_malloc(sizeof(pcre **))) == 0) {
-+              if((pcres_addr = shm_malloc(sizeof(pcre **))) == 0) {
-                       LM_ERR("no memory for pcres_addr\n");
-                       goto err;
-               }
-               /* Integer containing the number of pcres */
--              if ((num_pcres = shm_malloc(sizeof(int))) == 0) {
-+              if((num_pcres = shm_malloc(sizeof(int))) == 0) {
-                       LM_ERR("no memory for num_pcres\n");
-                       goto err;
-               }
-               /* Load the pcres */
-               LM_DBG("loading pcres...\n");
--              if (load_pcres(START)) {
-+              if(load_pcres(START)) {
-                       LM_ERR("failed to load pcres\n");
-                       goto err;
-               }
-@@ -251,21 +249,21 @@ static int load_pcres(int action)
-       /* Get the lock */
-       lock_get(reload_lock);
--      if (!(f = fopen(file, "r"))) {
-+      if(!(f = fopen(file, "r"))) {
-               LM_ERR("could not open file '%s'\n", file);
-               goto err;
-       }
-       /* Array containing each pattern in the file */
--      if ((patterns = pkg_malloc(sizeof(char*) * max_groups)) == 0) {
-+      if((patterns = pkg_malloc(sizeof(char *) * max_groups)) == 0) {
-               LM_ERR("no more memory for patterns\n");
-               fclose(f);
-               goto err;
-       }
--      memset(patterns, 0, sizeof(char*) * max_groups);
-+      memset(patterns, 0, sizeof(char *) * max_groups);
--      for (i=0; i<max_groups; i++) {
--              if ((patterns[i] = pkg_malloc(sizeof(char) * group_max_size)) == 0) {
-+      for(i = 0; i < max_groups; i++) {
-+              if((patterns[i] = pkg_malloc(sizeof(char) * group_max_size)) == 0) {
-                       LM_ERR("no more memory for patterns[%d]\n", i);
-                       fclose(f);
-                       goto err;
-@@ -276,26 +274,27 @@ static int load_pcres(int action)
-       /* Read the file and extract the patterns */
-       memset(line, 0, FILE_MAX_LINE);
-       i = -1;
--      while (fgets(line, FILE_MAX_LINE-4, f) != NULL) {
-+      while(fgets(line, FILE_MAX_LINE - 4, f) != NULL) {
-               /* Ignore comments and lines starting by space, tab, CR, LF */
--              if(isspace(line[0]) || line[0]=='#') {
-+              if(isspace(line[0]) || line[0] == '#') {
-                       memset(line, 0, FILE_MAX_LINE);
-                       continue;
-               }
-               /* First group */
--              if (i == -1 && line[0] != '[') {
--                      LM_ERR("first group must be initialized with [0] before any regular expression\n");
-+              if(i == -1 && line[0] != '[') {
-+                      LM_ERR("first group must be initialized with [0] before any "
-+                                 "regular expression\n");
-                       fclose(f);
-                       goto err;
-               }
-               /* New group */
--              if (line[0] == '[') {
-+              if(line[0] == '[') {
-                       i++;
-                       /* Check if there are more patterns than the max value */
--                      if (i >= max_groups) {
-+                      if(i >= max_groups) {
-                               LM_ERR("max patterns exceeded\n");
-                               fclose(f);
-                               goto err;
-@@ -309,14 +308,14 @@ static int load_pcres(int action)
-               llen = strlen(line);
-               /* Check if the patter size is too big (aprox) */
--              if (strlen(patterns[i]) + llen >= group_max_size - 4) {
-+              if(strlen(patterns[i]) + llen >= group_max_size - 4) {
-                       LM_ERR("pattern max file exceeded\n");
-                       fclose(f);
-                       goto err;
-               }
-               /* Append ')' at the end of the line */
--              if (line[llen - 1] == '\n') {
-+              if(line[llen - 1] == '\n') {
-                       line[llen - 1] = ')';
-                       line[llen] = '\n';
-                       line[llen + 1] = '\0';
-@@ -328,7 +327,7 @@ static int load_pcres(int action)
-               /* Append '(' at the beginning of the line */
-               llen = strlen(patterns[i]);
--              memcpy(patterns[i]+llen, "(", 1);
-+              memcpy(patterns[i] + llen, "(", 1);
-               llen++;
-               /* Append the line to the current pattern (including the ending 0) */
-@@ -340,16 +339,16 @@ static int load_pcres(int action)
-       fclose(f);
--      if(num_pcres_tmp==0) {
-+      if(num_pcres_tmp == 0) {
-               LM_ERR("no expressions in the file\n");
-               goto err;
-       }
-       /* Fix the patterns */
--      for (i=0; i < num_pcres_tmp; i++) {
-+      for(i = 0; i < num_pcres_tmp; i++) {
-               /* Convert empty groups in unmatcheable regular expression ^$ */
--              if (strlen(patterns[i]) == 1) {
-+              if(strlen(patterns[i]) == 1) {
-                       patterns[i][0] = '^';
-                       patterns[i][1] = '$';
-                       patterns[i][2] = '\0';
-@@ -357,13 +356,13 @@ static int load_pcres(int action)
-               }
-               /* Delete possible '\n' at the end of the pattern */
--              if (patterns[i][strlen(patterns[i])-1] == '\n') {
--                      patterns[i][strlen(patterns[i])-1] = '\0';
-+              if(patterns[i][strlen(patterns[i]) - 1] == '\n') {
-+                      patterns[i][strlen(patterns[i]) - 1] = '\0';
-               }
-               /* Replace '\n' with '|' (except at the end of the pattern) */
--              for (j=0; j < strlen(patterns[i]); j++) {
--                      if (patterns[i][j] == '\n' && j != strlen(patterns[i])-1) {
-+              for(j = 0; j < strlen(patterns[i]); j++) {
-+                      if(patterns[i][j] == '\n' && j != strlen(patterns[i]) - 1) {
-                               patterns[i][j] = '|';
-                       }
-               }
-@@ -374,38 +373,38 @@ static int load_pcres(int action)
-       /* Log the group patterns */
-       LM_INFO("num groups = %d\n", num_pcres_tmp);
--      for (i=0; i < num_pcres_tmp; i++) {
--              LM_INFO("<group[%d]>%s</group[%d]> (size = %i)\n", i, patterns[i],
--                              i, (int)strlen(patterns[i]));
-+      for(i = 0; i < num_pcres_tmp; i++) {
-+              LM_INFO("<group[%d]>%s</group[%d]> (size = %i)\n", i, patterns[i], i,
-+                              (int)strlen(patterns[i]));
-       }
-       /* Temporal pointer of pcres */
--      if ((pcres_tmp = pkg_malloc(sizeof(pcre *) * num_pcres_tmp)) == 0) {
-+      if((pcres_tmp = pkg_malloc(sizeof(pcre *) * num_pcres_tmp)) == 0) {
-               LM_ERR("no more memory for pcres_tmp\n");
-               goto err;
-       }
--      for (i=0; i<num_pcres_tmp; i++) {
-+      for(i = 0; i < num_pcres_tmp; i++) {
-               pcres_tmp[i] = NULL;
-       }
-       /* Compile the patters */
--      for (i=0; i<num_pcres_tmp; i++) {
-+      for(i = 0; i < num_pcres_tmp; i++) {
--              pcre_tmp = pcre_compile(patterns[i], pcre_options, &pcre_error,
--                              &pcre_erroffset, NULL);
--              if (pcre_tmp == NULL) {
-+              pcre_tmp = pcre_compile(
-+                              patterns[i], pcre_options, &pcre_error, &pcre_erroffset, NULL);
-+              if(pcre_tmp == NULL) {
-                       LM_ERR("pcre_tmp compilation of '%s' failed at offset %d: %s\n",
-                                       patterns[i], pcre_erroffset, pcre_error);
-                       goto err;
-               }
-               pcre_rc = pcre_fullinfo(pcre_tmp, NULL, PCRE_INFO_SIZE, &pcre_size);
--              if (pcre_rc) {
-+              if(pcre_rc) {
-                       printf("pcre_fullinfo on compiled pattern[%i] yielded error: %d\n",
-                                       i, pcre_rc);
-                       goto err;
-               }
--              if ((pcres_tmp[i] = pkg_malloc(pcre_size)) == 0) {
-+              if((pcres_tmp[i] = pkg_malloc(pcre_size)) == 0) {
-                       LM_ERR("no more memory for pcres_tmp[%i]\n", i);
-                       goto err;
-               }
-@@ -417,22 +416,22 @@ static int load_pcres(int action)
-       }
-       /* Copy to shared memory */
--      if (action == RELOAD) {
--              for(i=0; i<*num_pcres; i++) {  /* Use the previous num_pcres value */
--                      if (pcres[i]) {
-+      if(action == RELOAD) {
-+              for(i = 0; i < *num_pcres; i++) { /* Use the previous num_pcres value */
-+                      if(pcres[i]) {
-                               shm_free(pcres[i]);
-                       }
-               }
-               shm_free(pcres);
-       }
--      if ((pcres = shm_malloc(sizeof(pcre *) * num_pcres_tmp)) == 0) {
-+      if((pcres = shm_malloc(sizeof(pcre *) * num_pcres_tmp)) == 0) {
-               LM_ERR("no more memory for pcres\n");
-               goto err;
-       }
-       memset(pcres, 0, sizeof(pcre *) * num_pcres_tmp);
--      for (i=0; i<num_pcres_tmp; i++) {
-+      for(i = 0; i < num_pcres_tmp; i++) {
-               pcre_rc = pcre_fullinfo(pcres_tmp[i], NULL, PCRE_INFO_SIZE, &pcre_size);
--              if ((pcres[i] = shm_malloc(pcre_size)) == 0) {
-+              if((pcres[i] = shm_malloc(pcre_size)) == 0) {
-                       LM_ERR("no more memory for pcres[%i]\n", i);
-                       goto err;
-               }
-@@ -442,12 +441,12 @@ static int load_pcres(int action)
-       *pcres_addr = pcres;
-       /* Free used memory */
--      for (i=0; i<num_pcres_tmp; i++) {
-+      for(i = 0; i < num_pcres_tmp; i++) {
-               pkg_free(pcres_tmp[i]);
-       }
-       pkg_free(pcres_tmp);
-       /* Free allocated slots for unused patterns */
--      for (i = num_pcres_tmp; i < max_groups; i++) {
-+      for(i = num_pcres_tmp; i < max_groups; i++) {
-               pkg_free(patterns[i]);
-       }
-       pkg_free(patterns);
-@@ -456,26 +455,26 @@ static int load_pcres(int action)
-       return 0;
- err:
--      if (patterns) {
--              for(i=0; i<max_groups; i++) {
--                      if (patterns[i]) {
-+      if(patterns) {
-+              for(i = 0; i < max_groups; i++) {
-+                      if(patterns[i]) {
-                               pkg_free(patterns[i]);
-                       }
-               }
-               pkg_free(patterns);
-       }
--      if (pcres_tmp) {
--              for (i=0; i<num_pcres_tmp; i++) {
--                      if (pcres_tmp[i]) {
-+      if(pcres_tmp) {
-+              for(i = 0; i < num_pcres_tmp; i++) {
-+                      if(pcres_tmp[i]) {
-                               pkg_free(pcres_tmp[i]);
-                       }
-               }
-               pkg_free(pcres_tmp);
-       }
--      if (reload_lock) {
-+      if(reload_lock) {
-               lock_release(reload_lock);
-       }
--      if (action == START) {
-+      if(action == START) {
-               free_shared_memory();
-       }
-       return -1;
-@@ -486,9 +485,9 @@ static void free_shared_memory(void)
- {
-       int i;
--      if (pcres) {
--              for(i=0; i<*num_pcres; i++) {
--                      if (pcres[i]) {
-+      if(pcres) {
-+              for(i = 0; i < *num_pcres; i++) {
-+                      if(pcres[i]) {
-                               shm_free(pcres[i]);
-                       }
-               }
-@@ -496,21 +495,21 @@ static void free_shared_memory(void)
-               pcres = NULL;
-       }
--      if (num_pcres) {
-+      if(num_pcres) {
-               shm_free(num_pcres);
-               num_pcres = NULL;
-       }
--      if (pcres_addr) {
-+      if(pcres_addr) {
-               shm_free(pcres_addr);
-               pcres_addr = NULL;
-       }
--      if (reload_lock) {
-+      if(reload_lock) {
-               lock_destroy(reload_lock);
-               lock_dealloc(reload_lock);
-               reload_lock = NULL;
--    }
-+      }
- }
-@@ -519,32 +518,32 @@ static void free_shared_memory(void)
-  */
- /*! \brief Return true if the argument matches the regular expression parameter */
--static int ki_pcre_match(sip_msg_t* msg, str* string, str* regex)
-+static int ki_pcre_match(sip_msg_t *msg, str *string, str *regex)
- {
-       pcre *pcre_re = NULL;
-       int pcre_rc;
-       const char *pcre_error;
-       int pcre_erroffset;
--      pcre_re = pcre_compile(regex->s, pcre_options, &pcre_error, &pcre_erroffset, NULL);
--      if (pcre_re == NULL) {
-+      pcre_re = pcre_compile(
-+                      regex->s, pcre_options, &pcre_error, &pcre_erroffset, NULL);
-+      if(pcre_re == NULL) {
-               LM_ERR("pcre_re compilation of '%s' failed at offset %d: %s\n",
-                               regex->s, pcre_erroffset, pcre_error);
-               return -4;
-       }
--      pcre_rc = pcre_exec(
--              pcre_re,                    /* the compiled pattern */
--              NULL,                       /* no extra data - we didn't study the pattern */
--              string->s,                  /* the matching string */
--              (int)(string->len),         /* the length of the subject */
--              0,                          /* start at offset 0 in the string */
--              0,                          /* default options */
--              NULL,                       /* output vector for substring information */
--              0);                         /* number of elements in the output vector */
-+      pcre_rc = pcre_exec(pcre_re, /* the compiled pattern */
-+                      NULL,      /* no extra data - we didn't study the pattern */
-+                      string->s, /* the matching string */
-+                      (int)(string->len), /* the length of the subject */
-+                      0,                                      /* start at offset 0 in the string */
-+                      0,                                      /* default options */
-+                      NULL,                           /* output vector for substring information */
-+                      0);                                     /* number of elements in the output vector */
-       /* Matching failed: handle error cases */
--      if (pcre_rc < 0) {
-+      if(pcre_rc < 0) {
-               switch(pcre_rc) {
-                       case PCRE_ERROR_NOMATCH:
-                               LM_DBG("'%s' doesn't match '%s'\n", string->s, regex->s);
-@@ -562,28 +561,26 @@ static int ki_pcre_match(sip_msg_t* msg,
- }
- /*! \brief Return true if the argument matches the regular expression parameter */
--static int w_pcre_match(struct sip_msg* _msg, char* _s1, char* _s2)
-+static int w_pcre_match(struct sip_msg *_msg, char *_s1, char *_s2)
- {
-       str string;
-       str regex;
--      if (_s1 == NULL) {
-+      if(_s1 == NULL) {
-               LM_ERR("bad parameters\n");
-               return -2;
-       }
--      if (_s2 == NULL) {
-+      if(_s2 == NULL) {
-               LM_ERR("bad parameters\n");
-               return -2;
-       }
--      if (fixup_get_svalue(_msg, (gparam_p)_s1, &string))
--      {
-+      if(fixup_get_svalue(_msg, (gparam_p)_s1, &string)) {
-               LM_ERR("cannot print the format for string\n");
-               return -3;
-       }
--      if (fixup_get_svalue(_msg, (gparam_p)_s2, &regex))
--      {
-+      if(fixup_get_svalue(_msg, (gparam_p)_s2, &regex)) {
-               LM_ERR("cannot print the format for regex\n");
-               return -3;
-       }
-@@ -592,17 +589,17 @@ static int w_pcre_match(struct sip_msg*
- }
- /*! \brief Return true if the string argument matches the pattern group parameter */
--static int ki_pcre_match_group(sip_msg_t* _msg, str* string, int num_pcre)
-+static int ki_pcre_match_group(sip_msg_t *_msg, str *string, int num_pcre)
- {
-       int pcre_rc;
-       /* Check if group matching feature is enabled */
--      if (file == NULL) {
-+      if(file == NULL) {
-               LM_ERR("group matching is disabled\n");
-               return -2;
-       }
--      if (num_pcre >= *num_pcres) {
-+      if(num_pcre >= *num_pcres) {
-               LM_ERR("invalid pcre index '%i', there are %i pcres\n", num_pcre,
-                               *num_pcres);
-               return -4;
-@@ -610,20 +607,19 @@ static int ki_pcre_match_group(sip_msg_t
-       lock_get(reload_lock);
--      pcre_rc = pcre_exec(
--              (*pcres_addr)[num_pcre],    /* the compiled pattern */
--              NULL,                       /* no extra data - we didn't study the pattern */
--              string->s,                  /* the matching string */
--              (int)(string->len),         /* the length of the subject */
--              0,                          /* start at offset 0 in the string */
--              0,                          /* default options */
--              NULL,                       /* output vector for substring information */
--              0);                         /* number of elements in the output vector */
-+      pcre_rc = pcre_exec((*pcres_addr)[num_pcre], /* the compiled pattern */
-+                      NULL,      /* no extra data - we didn't study the pattern */
-+                      string->s, /* the matching string */
-+                      (int)(string->len), /* the length of the subject */
-+                      0,                                      /* start at offset 0 in the string */
-+                      0,                                      /* default options */
-+                      NULL,                           /* output vector for substring information */
-+                      0);                                     /* number of elements in the output vector */
-       lock_release(reload_lock);
-       /* Matching failed: handle error cases */
--      if (pcre_rc < 0) {
-+      if(pcre_rc < 0) {
-               switch(pcre_rc) {
-                       case PCRE_ERROR_NOMATCH:
-                               LM_DBG("'%s' doesn't match pcres[%i]\n", string->s, num_pcre);
-@@ -640,29 +636,27 @@ static int ki_pcre_match_group(sip_msg_t
- }
- /*! \brief Return true if the string argument matches the pattern group parameter */
--static int w_pcre_match_group(struct sip_msg* _msg, char* _s1, char* _s2)
-+static int w_pcre_match_group(struct sip_msg *_msg, char *_s1, char *_s2)
- {
-       str string, group;
-       unsigned int num_pcre = 0;
--      if (_s1 == NULL) {
-+      if(_s1 == NULL) {
-               LM_ERR("bad parameters\n");
-               return -3;
-       }
--      if (_s2 == NULL) {
-+      if(_s2 == NULL) {
-               num_pcre = 0;
-       } else {
--              if (fixup_get_svalue(_msg, (gparam_p)_s2, &group))
--              {
-+              if(fixup_get_svalue(_msg, (gparam_p)_s2, &group)) {
-                       LM_ERR("cannot print the format for second param\n");
-                       return -5;
-               }
-               str2int(&group, &num_pcre);
-       }
--      if (fixup_get_svalue(_msg, (gparam_p)_s1, &string))
--      {
-+      if(fixup_get_svalue(_msg, (gparam_p)_s1, &string)) {
-               LM_ERR("cannot print the format for first param\n");
-               return -5;
-       }
-@@ -676,42 +670,35 @@ static int w_pcre_match_group(struct sip
-  */
- /*! \brief Reload pcres by reading the file again */
--void regex_rpc_reload(rpc_t* rpc, void* ctx)
-+void regex_rpc_reload(rpc_t *rpc, void *ctx)
- {
-       /* Check if group matching feature is enabled */
--      if (file == NULL) {
-+      if(file == NULL) {
-               LM_NOTICE("'file' parameter is not set, group matching disabled\n");
-               rpc->fault(ctx, 500, "Group matching not enabled");
-               return;
-       }
-       LM_INFO("reloading pcres...\n");
--      if (load_pcres(RELOAD)) {
-+      if(load_pcres(RELOAD)) {
-               LM_ERR("failed to reload pcres\n");
-               rpc->fault(ctx, 500, "Failed to reload");
-               return;
-       }
-       LM_INFO("reload success\n");
--
- }
--static const char* regex_rpc_reload_doc[2] = {
--      "Reload regex file",
--      0
--};
-+static const char *regex_rpc_reload_doc[2] = {"Reload regex file", 0};
- rpc_export_t regex_rpc_cmds[] = {
--      {"regex.reload", regex_rpc_reload,
--              regex_rpc_reload_doc, 0},
--      {0, 0, 0, 0}
--};
-+              {"regex.reload", regex_rpc_reload, regex_rpc_reload_doc, 0},
-+              {0, 0, 0, 0}};
- /**
-  * register RPC commands
-  */
- static int regex_init_rpc(void)
- {
--      if (rpc_register_array(regex_rpc_cmds)!=0)
--      {
-+      if(rpc_register_array(regex_rpc_cmds) != 0) {
-               LM_ERR("failed to register RPC commands\n");
-               return -1;
-       }
diff --git a/net/kamailio/patches/031-regex-typos.patch b/net/kamailio/patches/031-regex-typos.patch
deleted file mode 100644 (file)
index e08b413..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-From 650b109dbcfe2c3083e09c987bae7ca39e4a19d2 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?=D0=94=D0=B8=D0=BB=D1=8F=D0=BD=20=D0=9F=D0=B0=D0=BB=D0=B0?=
- =?UTF-8?q?=D1=83=D0=B7=D0=BE=D0=B2?= <[email protected]>
-Date: Wed, 21 Jun 2023 21:34:21 +0200
-Subject: [PATCH] regex: typos
-
----
- src/modules/regex/regex_mod.c | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
---- a/src/modules/regex/regex_mod.c
-+++ b/src/modules/regex/regex_mod.c
-@@ -230,7 +230,7 @@ static void destroy(void)
- }
--/*! \brief Convert the file content into regular expresions and store them in pcres */
-+/*! \brief Convert the file content into regular expressions and store them in pcres */
- static int load_pcres(int action)
- {
-       int i, j;
-@@ -307,7 +307,7 @@ static int load_pcres(int action)
-               }
-               llen = strlen(line);
--              /* Check if the patter size is too big (aprox) */
-+              /* Check if the pattern size is too big (approx) */
-               if(strlen(patterns[i]) + llen >= group_max_size - 4) {
-                       LM_ERR("pattern max file exceeded\n");
-                       fclose(f);
-@@ -387,7 +387,7 @@ static int load_pcres(int action)
-               pcres_tmp[i] = NULL;
-       }
--      /* Compile the patters */
-+      /* Compile the patterns */
-       for(i = 0; i < num_pcres_tmp; i++) {
-               pcre_tmp = pcre_compile(
diff --git a/net/kamailio/patches/032-regex-convert-to-memory-error-logging-helper.patch b/net/kamailio/patches/032-regex-convert-to-memory-error-logging-helper.patch
deleted file mode 100644 (file)
index 573cc4e..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-From 5c7de00bc0826cf739577010ba7b4882e83819cc Mon Sep 17 00:00:00 2001
-From: Victor Seva <[email protected]>
-Date: Wed, 9 Aug 2023 10:52:47 +0000
-Subject: [PATCH] regex: convert to memory error logging helper
-
----
- src/modules/regex/regex_mod.c | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
---- a/src/modules/regex/regex_mod.c
-+++ b/src/modules/regex/regex_mod.c
-@@ -198,13 +198,13 @@ static int mod_init(void)
-               /* Pointer to pcres */
-               if((pcres_addr = shm_malloc(sizeof(pcre **))) == 0) {
--                      LM_ERR("no memory for pcres_addr\n");
-+                      SHM_MEM_ERROR;
-                       goto err;
-               }
-               /* Integer containing the number of pcres */
-               if((num_pcres = shm_malloc(sizeof(int))) == 0) {
--                      LM_ERR("no memory for num_pcres\n");
-+                      SHM_MEM_ERROR;
-                       goto err;
-               }
-@@ -425,14 +425,14 @@ static int load_pcres(int action)
-               shm_free(pcres);
-       }
-       if((pcres = shm_malloc(sizeof(pcre *) * num_pcres_tmp)) == 0) {
--              LM_ERR("no more memory for pcres\n");
-+              SHM_MEM_ERROR;
-               goto err;
-       }
-       memset(pcres, 0, sizeof(pcre *) * num_pcres_tmp);
-       for(i = 0; i < num_pcres_tmp; i++) {
-               pcre_rc = pcre_fullinfo(pcres_tmp[i], NULL, PCRE_INFO_SIZE, &pcre_size);
-               if((pcres[i] = shm_malloc(pcre_size)) == 0) {
--                      LM_ERR("no more memory for pcres[%i]\n", i);
-+                      SHM_MEM_ERROR;
-                       goto err;
-               }
-               memcpy(pcres[i], pcres_tmp[i], pcre_size);
diff --git a/net/kamailio/patches/033-regex-migration-to-pcre2.patch b/net/kamailio/patches/033-regex-migration-to-pcre2.patch
deleted file mode 100644 (file)
index 957affa..0000000
+++ /dev/null
@@ -1,433 +0,0 @@
-From 325c7a34fca74770a4351e00e27fcae75d57852e Mon Sep 17 00:00:00 2001
-From: Victor Seva <[email protected]>
-Date: Wed, 9 Aug 2023 10:48:41 +0000
-Subject: [PATCH] regex: migration to pcre2
-
----
- src/modules/regex/Makefile    |  11 +-
- src/modules/regex/regex_mod.c | 240 ++++++++++++++++++++++------------
- 2 files changed, 158 insertions(+), 93 deletions(-)
-
---- a/src/modules/regex/Makefile
-+++ b/src/modules/regex/Makefile
-@@ -5,20 +5,15 @@ auto_gen=
- NAME=regex.so
- ifeq ($(CROSS_COMPILE),)
--PCRE_BUILDER = $(shell \
--      if pkg-config --exists libcre; then \
--              echo 'pkg-config libpcre'; \
--      else \
--              which pcre-config; \
--      fi)
-+PCRE_BUILDER = $(shell command -v pcre2-config)
- endif
- ifeq ($(PCRE_BUILDER),)
-       PCREDEFS=-I$(LOCALBASE)/include
--      PCRELIBS=-L$(LOCALBASE)/lib -lpcre
-+      PCRELIBS=-L$(LOCALBASE)/lib -lpcre2-8
- else
-       PCREDEFS = $(shell $(PCRE_BUILDER) --cflags)
--      PCRELIBS = $(shell $(PCRE_BUILDER) --libs)
-+      PCRELIBS = $(shell $(PCRE_BUILDER) --libs8)
- endif
- DEFS+=$(PCREDEFS)
---- a/src/modules/regex/regex_mod.c
-+++ b/src/modules/regex/regex_mod.c
-@@ -2,6 +2,7 @@
-  * regex module - pcre operations
-  *
-  * Copyright (C) 2008 Iñaki Baz Castillo
-+ * Copyright (C) 2023 Victor Seva
-  *
-  * This file is part of Kamailio, a free SIP server.
-  *
-@@ -25,6 +26,7 @@
-  * \file
-  * \brief REGEX :: Perl-compatible regular expressions using PCRE library
-  * Copyright (C) 2008 Iñaki Baz Castillo
-+ * Copyright (C) 2023 Victor Seva
-  * \ingroup regex
-  */
-@@ -32,7 +34,8 @@
- #include <stdlib.h>
- #include <string.h>
- #include <sys/stat.h>
--#include <pcre.h>
-+#define PCRE2_CODE_UNIT_WIDTH 8
-+#include <pcre2.h>
- #include "../../core/sr_module.h"
- #include "../../core/dprint.h"
- #include "../../core/pt.h"
-@@ -77,8 +80,11 @@ static int pcre_extended = 0;
- /*
-  * Module internal parameter variables
-  */
--static pcre **pcres;
--static pcre ***pcres_addr;
-+static pcre2_general_context *pcres_gctx = NULL;
-+static pcre2_match_context *pcres_mctx = NULL;
-+static pcre2_compile_context *pcres_ctx = NULL;
-+static pcre2_code **pcres;
-+static pcre2_code ***pcres_addr;
- static int *num_pcres;
- static int pcre_options = 0x00000000;
-@@ -151,6 +157,17 @@ struct module_exports exports = {
- };
-+static void *pcre2_malloc(size_t size, void *ext)
-+{
-+      return shm_malloc(size);
-+}
-+
-+static void pcre2_free(void *ptr, void *ext)
-+{
-+      shm_free(ptr);
-+      ptr = NULL;
-+}
-+
- /*! \brief
-  * Init module function
-  */
-@@ -180,24 +197,39 @@ static int mod_init(void)
-               /* PCRE options */
-               if(pcre_caseless != 0) {
-                       LM_DBG("PCRE CASELESS enabled\n");
--                      pcre_options = pcre_options | PCRE_CASELESS;
-+                      pcre_options = pcre_options | PCRE2_CASELESS;
-               }
-               if(pcre_multiline != 0) {
-                       LM_DBG("PCRE MULTILINE enabled\n");
--                      pcre_options = pcre_options | PCRE_MULTILINE;
-+                      pcre_options = pcre_options | PCRE2_MULTILINE;
-               }
-               if(pcre_dotall != 0) {
-                       LM_DBG("PCRE DOTALL enabled\n");
--                      pcre_options = pcre_options | PCRE_DOTALL;
-+                      pcre_options = pcre_options | PCRE2_DOTALL;
-               }
-               if(pcre_extended != 0) {
-                       LM_DBG("PCRE EXTENDED enabled\n");
--                      pcre_options = pcre_options | PCRE_EXTENDED;
-+                      pcre_options = pcre_options | PCRE2_EXTENDED;
-               }
-               LM_DBG("PCRE options: %i\n", pcre_options);
-+              if((pcres_gctx = pcre2_general_context_create(
-+                                      pcre2_malloc, pcre2_free, NULL))
-+                              == NULL) {
-+                      LM_ERR("pcre2 general context creation failed\n");
-+                      return -1;
-+              }
-+              if((pcres_ctx = pcre2_compile_context_create(pcres_gctx)) == NULL) {
-+                      LM_ERR("pcre2 compile context creation failed\n");
-+                      return -1;
-+              }
-+              if((pcres_mctx = pcre2_match_context_create(pcres_gctx)) == NULL) {
-+                      LM_ERR("pcre2 match context creation failed\n");
-+                      return -1;
-+              }
-+
-               /* Pointer to pcres */
--              if((pcres_addr = shm_malloc(sizeof(pcre **))) == 0) {
-+              if((pcres_addr = shm_malloc(sizeof(pcre2_code **))) == 0) {
-                       SHM_MEM_ERROR;
-                       goto err;
-               }
-@@ -227,6 +259,18 @@ err:
- static void destroy(void)
- {
-       free_shared_memory();
-+
-+      if(pcres_ctx) {
-+              pcre2_compile_context_free(pcres_ctx);
-+      }
-+
-+      if(pcres_mctx) {
-+              pcre2_match_context_free(pcres_mctx);
-+      }
-+
-+      if(pcres_gctx) {
-+              pcre2_general_context_free(pcres_gctx);
-+      }
- }
-@@ -237,13 +281,11 @@ static int load_pcres(int action)
-       FILE *f;
-       char line[FILE_MAX_LINE];
-       char **patterns = NULL;
--      pcre *pcre_tmp = NULL;
--      size_t pcre_size;
--      int pcre_rc;
--      const char *pcre_error;
--      int pcre_erroffset;
-+      int pcre_error_num = 0;
-+      char pcre_error[128];
-+      size_t pcre_erroffset;
-       int num_pcres_tmp = 0;
--      pcre **pcres_tmp = NULL;
-+      pcre2_code **pcres_tmp = NULL;
-       int llen;
-       /* Get the lock */
-@@ -379,38 +421,34 @@ static int load_pcres(int action)
-       }
-       /* Temporal pointer of pcres */
--      if((pcres_tmp = pkg_malloc(sizeof(pcre *) * num_pcres_tmp)) == 0) {
-+      if((pcres_tmp = pkg_malloc(sizeof(pcre2_code *) * num_pcres_tmp)) == 0) {
-               LM_ERR("no more memory for pcres_tmp\n");
-               goto err;
-       }
--      for(i = 0; i < num_pcres_tmp; i++) {
--              pcres_tmp[i] = NULL;
--      }
-+      memset(pcres_tmp, 0, sizeof(pcre2_code *) * num_pcres_tmp);
-       /* Compile the patterns */
-       for(i = 0; i < num_pcres_tmp; i++) {
--
--              pcre_tmp = pcre_compile(
--                              patterns[i], pcre_options, &pcre_error, &pcre_erroffset, NULL);
--              if(pcre_tmp == NULL) {
--                      LM_ERR("pcre_tmp compilation of '%s' failed at offset %d: %s\n",
-+              pcres_tmp[i] = pcre2_compile((PCRE2_SPTR)patterns[i],
-+                              PCRE2_ZERO_TERMINATED, pcre_options, &pcre_error_num,
-+                              &pcre_erroffset, pcres_ctx);
-+              if(pcres_tmp[i] == NULL) {
-+                      switch(pcre2_get_error_message(
-+                                      pcre_error_num, (PCRE2_UCHAR *)pcre_error, 128)) {
-+                              case PCRE2_ERROR_NOMEMORY:
-+                                      snprintf(pcre_error, 128,
-+                                                      "unknown error[%d]: pcre2 error buffer too small",
-+                                                      pcre_error_num);
-+                                      break;
-+                              case PCRE2_ERROR_BADDATA:
-+                                      snprintf(pcre_error, 128, "unknown pcre2 error[%d]",
-+                                                      pcre_error_num);
-+                                      break;
-+                      }
-+                      LM_ERR("pcre_tmp compilation of '%s' failed at offset %zu: %s\n",
-                                       patterns[i], pcre_erroffset, pcre_error);
-                       goto err;
-               }
--              pcre_rc = pcre_fullinfo(pcre_tmp, NULL, PCRE_INFO_SIZE, &pcre_size);
--              if(pcre_rc) {
--                      printf("pcre_fullinfo on compiled pattern[%i] yielded error: %d\n",
--                                      i, pcre_rc);
--                      goto err;
--              }
--
--              if((pcres_tmp[i] = pkg_malloc(pcre_size)) == 0) {
--                      LM_ERR("no more memory for pcres_tmp[%i]\n", i);
--                      goto err;
--              }
--
--              memcpy(pcres_tmp[i], pcre_tmp, pcre_size);
--              pcre_free(pcre_tmp);
-               pkg_free(patterns[i]);
-               patterns[i] = NULL;
-       }
-@@ -419,31 +457,15 @@ static int load_pcres(int action)
-       if(action == RELOAD) {
-               for(i = 0; i < *num_pcres; i++) { /* Use the previous num_pcres value */
-                       if(pcres[i]) {
--                              shm_free(pcres[i]);
-+                              pcre2_code_free(pcres[i]);
-                       }
-               }
-               shm_free(pcres);
-       }
--      if((pcres = shm_malloc(sizeof(pcre *) * num_pcres_tmp)) == 0) {
--              SHM_MEM_ERROR;
--              goto err;
--      }
--      memset(pcres, 0, sizeof(pcre *) * num_pcres_tmp);
--      for(i = 0; i < num_pcres_tmp; i++) {
--              pcre_rc = pcre_fullinfo(pcres_tmp[i], NULL, PCRE_INFO_SIZE, &pcre_size);
--              if((pcres[i] = shm_malloc(pcre_size)) == 0) {
--                      SHM_MEM_ERROR;
--                      goto err;
--              }
--              memcpy(pcres[i], pcres_tmp[i], pcre_size);
--      }
-       *num_pcres = num_pcres_tmp;
-+      *pcres = *pcres_tmp;
-       *pcres_addr = pcres;
--      /* Free used memory */
--      for(i = 0; i < num_pcres_tmp; i++) {
--              pkg_free(pcres_tmp[i]);
--      }
-       pkg_free(pcres_tmp);
-       /* Free allocated slots for unused patterns */
-       for(i = num_pcres_tmp; i < max_groups; i++) {
-@@ -466,7 +488,7 @@ err:
-       if(pcres_tmp) {
-               for(i = 0; i < num_pcres_tmp; i++) {
-                       if(pcres_tmp[i]) {
--                              pkg_free(pcres_tmp[i]);
-+                              pcre2_code_free(pcres_tmp[i]);
-                       }
-               }
-               pkg_free(pcres_tmp);
-@@ -520,42 +542,73 @@ static void free_shared_memory(void)
- /*! \brief Return true if the argument matches the regular expression parameter */
- static int ki_pcre_match(sip_msg_t *msg, str *string, str *regex)
- {
--      pcre *pcre_re = NULL;
-+      pcre2_code *pcre_re = NULL;
-+      pcre2_match_data *pcre_md = NULL;
-       int pcre_rc;
--      const char *pcre_error;
--      int pcre_erroffset;
-+      int pcre_error_num = 0;
-+      char pcre_error[128];
-+      size_t pcre_erroffset;
--      pcre_re = pcre_compile(
--                      regex->s, pcre_options, &pcre_error, &pcre_erroffset, NULL);
-+      pcre_re = pcre2_compile((PCRE2_SPTR)regex->s, PCRE2_ZERO_TERMINATED,
-+                      pcre_options, &pcre_error_num, &pcre_erroffset, pcres_ctx);
-       if(pcre_re == NULL) {
--              LM_ERR("pcre_re compilation of '%s' failed at offset %d: %s\n",
-+              switch(pcre2_get_error_message(
-+                              pcre_error_num, (PCRE2_UCHAR *)pcre_error, 128)) {
-+                      case PCRE2_ERROR_NOMEMORY:
-+                              snprintf(pcre_error, 128,
-+                                              "unknown error[%d]: pcre2 error buffer too small",
-+                                              pcre_error_num);
-+                              break;
-+                      case PCRE2_ERROR_BADDATA:
-+                              snprintf(pcre_error, 128, "unknown pcre2 error[%d]",
-+                                              pcre_error_num);
-+                              break;
-+              }
-+              LM_ERR("pcre_re compilation of '%s' failed at offset %zu: %s\n",
-                               regex->s, pcre_erroffset, pcre_error);
-               return -4;
-       }
--      pcre_rc = pcre_exec(pcre_re, /* the compiled pattern */
--                      NULL,      /* no extra data - we didn't study the pattern */
--                      string->s, /* the matching string */
--                      (int)(string->len), /* the length of the subject */
--                      0,                                      /* start at offset 0 in the string */
--                      0,                                      /* default options */
--                      NULL,                           /* output vector for substring information */
--                      0);                                     /* number of elements in the output vector */
-+      pcre_md = pcre2_match_data_create_from_pattern(pcre_re, pcres_gctx);
-+      pcre_rc = pcre2_match(pcre_re,     /* the compiled pattern */
-+                      (PCRE2_SPTR)string->s,     /* the matching string */
-+                      (PCRE2_SIZE)(string->len), /* the length of the subject */
-+                      0,                                                 /* start at offset 0 in the string */
-+                      0,                                                 /* default options */
-+                      pcre_md,                                   /* the match data block */
-+                      pcres_mctx); /* a match context; NULL means use defaults */
-       /* Matching failed: handle error cases */
-       if(pcre_rc < 0) {
-               switch(pcre_rc) {
--                      case PCRE_ERROR_NOMATCH:
-+                      case PCRE2_ERROR_NOMATCH:
-                               LM_DBG("'%s' doesn't match '%s'\n", string->s, regex->s);
-                               break;
-                       default:
--                              LM_DBG("matching error '%d'\n", pcre_rc);
-+                              switch(pcre2_get_error_message(
-+                                              pcre_rc, (PCRE2_UCHAR *)pcre_error, 128)) {
-+                                      case PCRE2_ERROR_NOMEMORY:
-+                                              snprintf(pcre_error, 128,
-+                                                              "unknown error[%d]: pcre2 error buffer too "
-+                                                              "small",
-+                                                              pcre_rc);
-+                                              break;
-+                                      case PCRE2_ERROR_BADDATA:
-+                                              snprintf(pcre_error, 128, "unknown pcre2 error[%d]",
-+                                                              pcre_rc);
-+                                              break;
-+                              }
-+                              LM_ERR("matching error:'%s' failed[%d]\n", pcre_error, pcre_rc);
-                               break;
-               }
--              pcre_free(pcre_re);
-+              if(pcre_md)
-+                      pcre2_match_data_free(pcre_md);
-+              pcre2_code_free(pcre_re);
-               return -1;
-       }
--      pcre_free(pcre_re);
-+      if(pcre_md)
-+              pcre2_match_data_free(pcre_md);
-+      pcre2_code_free(pcre_re);
-       LM_DBG("'%s' matches '%s'\n", string->s, regex->s);
-       return 1;
- }
-@@ -592,6 +645,8 @@ static int w_pcre_match(struct sip_msg *
- static int ki_pcre_match_group(sip_msg_t *_msg, str *string, int num_pcre)
- {
-       int pcre_rc;
-+      pcre2_match_data *pcre_md = NULL;
-+      char pcre_error[128];
-       /* Check if group matching feature is enabled */
-       if(file == NULL) {
-@@ -606,26 +661,41 @@ static int ki_pcre_match_group(sip_msg_t
-       }
-       lock_get(reload_lock);
--
--      pcre_rc = pcre_exec((*pcres_addr)[num_pcre], /* the compiled pattern */
--                      NULL,      /* no extra data - we didn't study the pattern */
--                      string->s, /* the matching string */
--                      (int)(string->len), /* the length of the subject */
--                      0,                                      /* start at offset 0 in the string */
--                      0,                                      /* default options */
--                      NULL,                           /* output vector for substring information */
--                      0);                                     /* number of elements in the output vector */
-+      pcre_md = pcre2_match_data_create_from_pattern(
-+                      (*pcres_addr)[num_pcre], pcres_gctx);
-+      pcre_rc = pcre2_match((*pcres_addr)[num_pcre], /* the compiled pattern */
-+                      (PCRE2_SPTR)string->s,                             /* the matching string */
-+                      (PCRE2_SIZE)(string->len), /* the length of the subject */
-+                      0,                                                 /* start at offset 0 in the string */
-+                      0,                                                 /* default options */
-+                      pcre_md,                                   /* the match data block */
-+                      pcres_mctx); /* a match context; NULL means use defaults */
-       lock_release(reload_lock);
-+      if(pcre_md)
-+              pcre2_match_data_free(pcre_md);
-       /* Matching failed: handle error cases */
-       if(pcre_rc < 0) {
-               switch(pcre_rc) {
--                      case PCRE_ERROR_NOMATCH:
-+                      case PCRE2_ERROR_NOMATCH:
-                               LM_DBG("'%s' doesn't match pcres[%i]\n", string->s, num_pcre);
-                               break;
-                       default:
--                              LM_DBG("matching error '%d'\n", pcre_rc);
-+                              switch(pcre2_get_error_message(
-+                                              pcre_rc, (PCRE2_UCHAR *)pcre_error, 128)) {
-+                                      case PCRE2_ERROR_NOMEMORY:
-+                                              snprintf(pcre_error, 128,
-+                                                              "unknown error[%d]: pcre2 error buffer too "
-+                                                              "small",
-+                                                              pcre_rc);
-+                                              break;
-+                                      case PCRE2_ERROR_BADDATA:
-+                                              snprintf(pcre_error, 128, "unknown pcre2 error[%d]",
-+                                                              pcre_rc);
-+                                              break;
-+                              }
-+                              LM_ERR("matching error:'%s' failed[%d]\n", pcre_error, pcre_rc);
-                               break;
-               }
-               return -1;
index a620e895256afaf5b8ca734f5afa1c50602d6e96..9f972892a1c00e67c23af7ee76efc34f793cce14 100644 (file)
@@ -1,6 +1,6 @@
 --- a/utils/kamctl/kamctlrc
 +++ b/utils/kamctl/kamctlrc
-@@ -166,3 +166,6 @@
+@@ -174,3 +174,6 @@
  ## Extra start options - default is: not set
  ## example: start Kamailio with 64MB shared memory: STARTOPTIONS="-m 64"
  # STARTOPTIONS=
diff --git a/net/kamailio/patches/100-kamcmd-don-t-clash-with-ENV-NAME-or-ctl.so-module.patch b/net/kamailio/patches/100-kamcmd-don-t-clash-with-ENV-NAME-or-ctl.so-module.patch
deleted file mode 100644 (file)
index 893cf6a..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-From 8421e2be8331a03b0087eb33241fac98e1fd821f Mon Sep 17 00:00:00 2001
-From: Christian Marangi <[email protected]>
-Date: Fri, 3 Nov 2023 03:09:21 +0100
-Subject: [PATCH] kamcmd: don't clash with ENV NAME or ctl.so module
-
-NAME variable might be set to the current HOSTNAME in some shell and
-also clash with the value set by the module calling MOD_INSTALL_UTILS by
-passing a NAME variable.
-
-With commit 1774cee62098 ("kamcmd: allow defining the name of the
-application from command line") this resulted in the kamcmd bin being
-renamed to all kind of name from hostname to ctl.so.
-
-Fix this by checking the variable to a more safe name that is not
-already defined in shell by default and also that doesn't clash with
-module variables, use UTIL_NAME as an alternative to NAME.
-
-UTIL_NAME now needs to be used to create kamcmd with custom name.
-
-Fixes: 1774cee62098 ("kamcmd: allow defining the name of the application from command line")
-Signed-off-by: Christian Marangi <[email protected]>
----
- utils/kamcmd/Makefile | 9 +++++++--
- 1 file changed, 7 insertions(+), 2 deletions(-)
-
---- a/utils/kamcmd/Makefile
-+++ b/utils/kamcmd/Makefile
-@@ -8,10 +8,15 @@ include $(COREPATH)/Makefile.targets
- auto_gen=
- RELEASE=1.5
- UTIL_SRC_NAME=kamcmd
-+# Pass CUSTOM_NAME to overwrite the kamcmd/sercmd bin name
-+ifeq ($(CUSTOM_NAME),)
- ifeq ($(FLAVOUR),ser)
--      NAME?=sercmd
-+      NAME=sercmd
- else
--      NAME?=kamcmd
-+      NAME=kamcmd
-+endif
-+else
-+      NAME=$(CUSTOM_NAME)
- endif
- readline_localpath=$(LOCALBASE)/include/readline/readline.h
index b3aa328a061ab558c1128140a1eff9852c55e203..e7f894d373ba1ffbddeb9f34e1bc615edfb07e43 100644 (file)
@@ -7,4 +7,4 @@
 +#include <event2/buffer.h>
  #include <event2/bufferevent.h>
  
- typedef struct {
+ typedef struct