Update upstream source from tag 'upstream/6.0.1'

Update to upstream version '6.0.1'
with Debian dir c905705194
mr13.3
Victor Seva 1 year ago
commit 76989fef91

@ -3,7 +3,7 @@ FROM mcr.microsoft.com/devcontainers/base:bookworm
RUN apt-get update && \
export DEBIAN_FRONTEND=noninteractive && \
apt-get -y install --no-install-recommends \
apt-utils dialog clang-format clang pbuilder
apt-utils dialog clang-format clang pbuilder cmake
# bookworm packaging
RUN mkdir -p /usr/local/src/pkg

@ -4,7 +4,7 @@
*/
"name": "Debian",
"build": {
"cacheFrom": "ghcr.io/kamailio/kamailio-5.8-devcontainer",
"cacheFrom": "ghcr.io/kamailio/kamailio-6.0-devcontainer",
"context": "../pkg/kamailio/deb",
"dockerfile": "Dockerfile"
},
@ -28,7 +28,9 @@
"ms-vscode.cpptools-extension-pack",
"GitHub.vscode-github-actions",
"eamodio.gitlens",
"xaver.clang-format"
"xaver.clang-format",
"cheshirekow.cmake-format",
"brobeson.vscode-cmake-lint"
]
}
},

@ -11,4 +11,15 @@ repos:
- repo: https://github.com/pre-commit/mirrors-clang-format
rev: v15.0.7
hooks:
- id: clang-format
- id: clang-format
- repo: https://github.com/cheshirekow/cmake-format-precommit
rev: v0.6.13
hooks:
- id: cmake-format
verbose: true
args:
- -c cmake/cmake-format.py
- id: cmake-lint
verbose: true
args:
- -c cmake/cmake-format.py

@ -0,0 +1,81 @@
cmake_minimum_required(VERSION 3.10)
# Use cmake -DCMAKE_SYSTEM_NAME .. for cross-compiling (inside build directory)
# Set the project name
project(
kamailio
VERSION 6.0.0
DESCRIPTION "Kamailio SIP Server"
HOMEPAGE_URL "https://www.kamailio.org")
# Set the version number
set(EXTRAVERSION "-rc0")
set(RELEASE "${PROJECT_VERSION}${EXTRAVERSION}")
message(STATUS "PROJECT_VERSION: ${PROJECT_VERSION}")
message(STATUS "RELEASE: ${RELEASE}")
# cmake-format: off
# Set the version number as a single integer
math(EXPR VERSIONVAL
"${PROJECT_VERSION_MAJOR}*1000000
+ ${PROJECT_VERSION_MINOR}*1000
+ ${PROJECT_VERSION_PATCH}"
)
message(STATUS "VERSIONVAL: ${VERSIONVAL}")
# cmake-format: on
# Specify the C standard if non provided by user
if(NOT CMAKE_C_STANDARD)
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED True)
endif()
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules")
include(${CMAKE_SOURCE_DIR}/cmake/BuildType.cmake)
# -----------------------
# Main project name
# -----------------------
# main binary name
set(MAIN_NAME
"kamailio"
CACHE STRING "Main binary name")
# use kamailio config
set(CFG_NAME
"kamailio"
CACHE STRING "Config name")
include(GNUInstallDirs)
include(${CMAKE_SOURCE_DIR}/cmake/defs.cmake)
# Add the source directory
add_subdirectory(src)
# Add utils
# add_subdirectory(utils)
add_subdirectory(utils/kamctl)
add_subdirectory(utils/kamcmd)
# TODO: Packaging stuuf. These should be on different file propably
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
set(CPACK_PACKAGE_NAME kamailio)
set(CPACK_GENERATOR DEB)
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "test")
include(CPack)
# Add uninstall target
if(NOT TARGET uninstall)
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake-uninstall.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/cmake/cmake-uninstall.cmake" IMMEDIATE @ONLY)
add_custom_target(
uninstall
COMMAND ${CMAKE_COMMAND} -P
${CMAKE_CURRENT_BINARY_DIR}/cmake/cmake-uninstall.cmake
COMMENT "Uninstalling")
endif()

@ -0,0 +1,54 @@
USE_TCP is required
---
error: invalid use of undefined type struct tcp_connection
==================
USE_DANGLE is required
----
warning: tcp_proto_no defined but not used [-Wunused-variable]
==================
USE_TLS requires TLS_HOOKS support
#ifdef CORE_TLS
#include "core/tls/tls_init.h" THIS FOLDER DOES not exist
#define tls_has_init_si() 1
#define tls_loaded() 1
#else
#include "core/tls_hooks_init.h"
CORE_TLS obsolete?
==================
USE_NAPTR is required also requires USE_DNS_CACHE
create_srv_name is not defined
==================
F_MALLOC and Q_MALLOC and TSLF_MALLOC are required
undefined reference to `fm_malloc_init_shm_manager' same for others
This also requires MALLOC_STATS to compile or else it will give
```
error: SREV_PKG_UPDATE_STATS undeclared (first use in this function)
820 | sr_event_exec(SREV_PKG_UPDATE_STATS, 0);
```
==================
REQUIRES #ifdef STATISTICS
pv_stats.c:49:2: error: unknown type name stat_var
49 | stat_var *stat;
tmx_mod.c:92:1: error: unknown type name stat_var; did you mean start_retr?
registrar.h:117:8: error: unknown type name stat_var
usrloc/udomain.h:53:2: error: unknown type name stat_var
53 | stat_var *users;
==================
presence requires libxml

20424
ChangeLog

File diff suppressed because it is too large Load Diff

@ -1,6 +1,6 @@
Kamailio v5.8
Kamailio v6.0
=============
https://www.kamailio.org

@ -0,0 +1,21 @@
# Set a default build type if none was specified
set(default_build_type "Release")
if(EXISTS "${CMAKE_SOURCE_DIR}/.git")
set(default_build_type "Debug")
endif()
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
message(
STATUS
"Setting build type to '${default_build_type}' as none was specified."
)
set(CMAKE_BUILD_TYPE
"${default_build_type}"
CACHE STRING "Choose the type of build." FORCE
)
# Set the possible values of build type for cmake-gui
set_property(
CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel"
"RelWithDebInfo"
)
endif()

@ -0,0 +1,28 @@
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)
find_program(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
find_program(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)
if(NOT CMAKE_C_COMPILER)
message(FATAL_ERROR "aarch64-linux-gnu-g++")
endif()
if(NOT CMAKE_CXX_COMPILER)
message(FATAL_ERROR "aarch64-linux-gnu-g++")
endif()
# Where to look for the target environment. (More paths can be added here)
set(CMAKE_FIND_ROOT_PATH /usr/aarch64-linux-gnu)
# set(CMAKE_SYSROOT /usr/aarch64-linux-gnu)
# Adjust the default behavior of the FIND_XXX() commands: search programs in the
# host environment only.
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# Search headers and libraries in the target environment only.
# set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
# set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
# set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE arm64)

@ -0,0 +1,240 @@
# ----------------------------------
# Options affecting listfile parsing
# ----------------------------------
with section("parse"): # type: ignore
# Specify structure for custom cmake functions
additional_commands = { 'foo': { 'flags': ['BAR', 'BAZ'],
'kwargs': {'DEPENDS': '*', 'HEADERS': '*', 'SOURCES': '*'}}}
# Override configurations per-command where available
override_spec = {}
# Specify variable tags.
vartags = []
# Specify property tags.
proptags = []
# -----------------------------
# Options affecting formatting.
# -----------------------------
with section("format"): # type: ignore
# Disable formatting entirely, making cmake-format a no-op
disable = False
# How wide to allow formatted cmake files
line_width = 80
# How many spaces to tab for indent
tab_size = 2
# If true, lines are indented using tab characters (utf-8 0x09) instead of
# <tab_size> space characters (utf-8 0x20). In cases where the layout would
# require a fractional tab character, the behavior of the fractional
# indentation is governed by <fractional_tab_policy>
use_tabchars = False
# If <use_tabchars> is True, then the value of this variable indicates how
# fractional indentions are handled during whitespace replacement. If set to
# 'use-space', fractional indentation is left as spaces (utf-8 0x20). If set
# to `round-up` fractional indentation is replaced with a single tab character
# (utf-8 0x09) effectively shifting the column to the next tabstop
fractional_tab_policy = 'use-space'
# If an argument group contains more than this many sub-groups (parg or kwarg
# groups) then force it to a vertical layout.
max_subgroups_hwrap = 2
# If a positional argument group contains more than this many arguments, then
# force it to a vertical layout.
max_pargs_hwrap = 6
# If a cmdline positional group consumes more than this many lines without
# nesting, then invalidate the layout (and nest)
max_rows_cmdline = 2
# If true, separate flow control names from their parentheses with a space
separate_ctrl_name_with_space = False
# If true, separate function names from parentheses with a space
separate_fn_name_with_space = False
# If a statement is wrapped to more than one line, than dangle the closing
# parenthesis on its own line.
dangle_parens = True
# If the trailing parenthesis must be 'dangled' on its on line, then align it
# to this reference: `prefix`: the start of the statement, `prefix-indent`:
# the start of the statement, plus one indentation level, `child`: align to
# the column of the arguments
dangle_align = 'prefix'
# If the statement spelling length (including space and parenthesis) is
# smaller than this amount, then force reject nested layouts.
min_prefix_chars = 4
# If the statement spelling length (including space and parenthesis) is larger
# than the tab width by more than this amount, then force reject un-nested
# layouts.
max_prefix_chars = 10
# If a candidate layout is wrapped horizontally but it exceeds this many
# lines, then reject the layout.
max_lines_hwrap = 2
# What style line endings to use in the output.
line_ending = 'unix'
# Format command names consistently as 'lower' or 'upper' case
command_case = 'canonical'
# Format keywords consistently as 'lower' or 'upper' case
keyword_case = 'unchanged'
# A list of command names which should always be wrapped
always_wrap = []
# If true, the argument lists which are known to be sortable will be sorted
# lexicographicall
enable_sort = True
# If true, the parsers may infer whether or not an argument list is sortable
# (without annotation).
autosort = False
# By default, if cmake-format cannot successfully fit everything into the
# desired linewidth it will apply the last, most agressive attempt that it
# made. If this flag is True, however, cmake-format will print error, exit
# with non-zero status code, and write-out nothing
require_valid_layout = False
# A dictionary mapping layout nodes to a list of wrap decisions. See the
# documentation for more information.
layout_passes = {}
# ------------------------------------------------
# Options affecting comment reflow and formatting.
# ------------------------------------------------
with section("markup"): # type: ignore
# What character to use for bulleted lists
bullet_char = '*'
# What character to use as punctuation after numerals in an enumerated list
enum_char = '.'
# If comment markup is enabled, don't reflow the first comment block in each
# listfile. Use this to preserve formatting of your copyright/license
# statements.
first_comment_is_literal = False
# If comment markup is enabled, don't reflow any comment block which matches
# this (regex) pattern. Default is `None` (disabled).
literal_comment_pattern = None
# Regular expression to match preformat fences in comments default=
# ``r'^\s*([`~]{3}[`~]*)(.*)$'``
fence_pattern = '^\\s*([`~]{3}[`~]*)(.*)$'
# Regular expression to match rulers in comments default=
# ``r'^\s*[^\w\s]{3}.*[^\w\s]{3}$'``
ruler_pattern = '^\\s*[^\\w\\s]{3}.*[^\\w\\s]{3}$'
# If a comment line matches starts with this pattern then it is explicitly a
# trailing comment for the preceeding argument. Default is '#<'
explicit_trailing_pattern = '#<'
# If a comment line starts with at least this many consecutive hash
# characters, then don't lstrip() them off. This allows for lazy hash rulers
# where the first hash char is not separated by space
hashruler_min_length = 10
# If true, then insert a space between the first hash char and remaining hash
# chars in a hash ruler, and normalize its length to fill the column
canonicalize_hashrulers = True
# enable comment markup parsing and reflow
enable_markup = False
# ----------------------------
# Options affecting the linter
# ----------------------------
with section("lint"): # type: ignore
# a list of lint codes to disable
disabled_codes = []
# regular expression pattern describing valid function names
function_pattern = '[0-9a-z_]+'
# regular expression pattern describing valid macro names
macro_pattern = '[0-9A-Z_]+'
# regular expression pattern describing valid names for variables with global
# (cache) scope
global_var_pattern = '[A-Z][0-9A-Z_]+'
# regular expression pattern describing valid names for variables with global
# scope (but internal semantic)
internal_var_pattern = '_[A-Z][0-9A-Z_]+'
# regular expression pattern describing valid names for variables with local
# scope
local_var_pattern = '[a-z][a-z0-9_]+'
# regular expression pattern describing valid names for privatedirectory
# variables
private_var_pattern = '_[0-9a-z_]+'
# regular expression pattern describing valid names for public directory
# variables
public_var_pattern = '[A-Z][0-9A-Z_]+'
# regular expression pattern describing valid names for function/macro
# arguments and loop variables.
argument_var_pattern = '[a-z][a-z0-9_]+'
# regular expression pattern describing valid names for keywords used in
# functions or macros
keyword_pattern = '[A-Z][0-9A-Z_]+'
# In the heuristic for C0201, how many conditionals to match within a loop in
# before considering the loop a parser.
max_conditionals_custom_parser = 2
# Require at least this many newlines between statements
min_statement_spacing = 1
# Require no more than this many newlines between statements
max_statement_spacing = 2
max_returns = 6
max_branches = 12
max_arguments = 5
max_localvars = 15
max_statements = 50
# -------------------------------
# Options affecting file encoding
# -------------------------------
with section("encode"): # type: ignore
# If true, emit the unicode byte-order mark (BOM) at the start of the file
emit_byteorder_mark = False
# Specify the encoding of the input file. Defaults to utf-8
input_encoding = 'utf-8'
# Specify the encoding of the output file. Defaults to utf-8. Note that cmake
# only claims to support utf-8 so be careful when using anything else
output_encoding = 'utf-8'
# -------------------------------------
# Miscellaneous configurations options.
# -------------------------------------
with section("misc"): # type: ignore
# A dictionary containing any per-command configuration overrides. Currently
# only `command_case` is supported.
per_command = {}

@ -0,0 +1,34 @@
if(NOT EXISTS "@CMAKE_BINARY_DIR@/install_manifest.txt")
message(
FATAL_ERROR
"Cannot find install manifest: @CMAKE_BINARY_DIR@/install_manifest.txt"
)
endif()
file(READ "@CMAKE_BINARY_DIR@/install_manifest.txt" files)
string(REGEX REPLACE "\n" ";" files "${files}")
list(APPEND files "@CMAKE_INSTALL_PREFIX@/etc/@MAIN_NAME@/@CFG_NAME@.cfg")
list(APPEND files "@CMAKE_INSTALL_PREFIX@/etc/@MAIN_NAME@/kamctlrc")
list(REMOVE_DUPLICATES files)
foreach(file ${files})
message(STATUS "Uninstalling $ENV{DESTDIR}${file}")
if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
execute_process(
COMMAND "${CMAKE_COMMAND}" -E remove "$ENV{DESTDIR}${file}"
RESULT_VARIABLE rm_retval
OUTPUT_VARIABLE rm_out
)
# exec_program(
# "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\""
# OUTPUT_VARIABLE rm_out
# RETURN_VALUE rm_retval
# )
if(NOT "${rm_retval}" STREQUAL 0)
message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}")
endif()
else()
message(STATUS "File $ENV{DESTDIR}${file} does not exist.")
endif()
endforeach()

@ -0,0 +1,73 @@
# Quite analogous to the Makefile.defs file This file is used to define the
# common flags and options for the project The flags are defined as INTERFACE
# properties of the common library The flags are then used by the other
# libraries and executables
# Define the common flags and options for GCC
option(PROFILE "Enable profiling" OFF)
add_library(common_compiler_flags INTERFACE)
# Define the flags for the C compiler
if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64")
if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
target_compile_definitions(common_compiler_flags INTERFACE CC_GCC_LIKE_ASM)
target_compile_options(
common_compiler_flags
INTERFACE -Wall -funroll-loops -Wcast-align
-Werror=implicit-function-declaration -Werror=implicit-int)
# If GCC version is greater than 4.2.0, enable the following flags
if(CMAKE_C_COMPILER_VERSION VERSION_GREATER 4.2.0)
target_compile_options(
common_compiler_flags
INTERFACE -m64 -minline-all-stringops -falign-loops -ftree-vectorize
-fno-strict-overflow -mtune=generic)
target_link_options(common_compiler_flags INTERFACE -m64)
endif()
elseif(CMAKE_C_COMPILER_ID STREQUAL "Clang")
target_compile_definitions(common_compiler_flags INTERFACE CC_GCC_LIKE_ASM)
target_compile_options(common_compiler_flags INTERFACE -m64)
target_link_options(common_compiler_flags INTERFACE -m64)
endif()
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i386|i486|i586|i686")
if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
target_compile_definitions(common_compiler_flags INTERFACE CC_GCC_LIKE_ASM)
target_compile_options(
common_compiler_flags
INTERFACE -Wall -funroll-loops -Wcast-align
-Werror=implicit-function-declaration -Werror=implicit-int)
# If GCC version is greater than 4.2.0, enable the following flags
if(CMAKE_C_COMPILER_VERSION VERSION_GREATER 4.2.0)
target_compile_options(
common_compiler_flags
INTERFACE -m32 -minline-all-stringops -falign-loops -ftree-vectorize
-fno-strict-overflow -mtune=generic)
endif()
elseif(CMAKE_C_COMPILER_ID STREQUAL "Clang")
target_compile_definitions(common_compiler_flags INTERFACE CC_GCC_LIKE_ASM)
target_compile_options(common_compiler_flags INTERFACE -m32)
target_link_options(common_compiler_flags INTERFACE -m32)
endif()
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
target_compile_definitions(common_compiler_flags INTERFACE CC_GCC_LIKE_ASM)
# target_compile_options(common INTERFACE -O0 # <$<$<BOOL:${PROFILE}>:-pg> )
# target_compile_options( common INTERFACE -marm -march=armv5t
# -funroll-loops -fsigned-char )
# # If GCC version is greater than 4.2.0, enable the following flags
# if(CMAKE_C_COMPILER_VERSION VERSION_GREATER 4.2.0) target_compile_options(
# common INTERFACE -ftree-vectorize -fno-strict-overflow ) endif()
endif()
endif()

@ -0,0 +1,358 @@
# Quite analogous to the Makefile.defs file This file is used to define the
# common flags and options for the project The flags are defined as INTERFACE
# properties of the common library The flags are then used by the other
# libraries and executables
add_library(common INTERFACE)
# This interface is populated by common and some extra module specific flags
# See end of file
add_library(common_modules INTERFACE)
# This interface is populated by common compiler flags and some os specific
# flags. See each os specific file for more details.
add_library(common_utils INTERFACE)
#
set(OS ${CMAKE_SYSTEM_NAME})
message(STATUS "OS: ${OS}")
set(OSREL ${CMAKE_SYSTEM_VERSION})
message(STATUS "OS version: ${OSREL}")
# set(HOST_ARCH "__CPU_${CMAKE_HOST_SYSTEM_PROCESSOR}")
if(CMAKE_SYSTEM_PROCESSOR MATCHES "i386|i486|i586|i686")
set(TARGET_ARCH "i386")
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64")
set(TARGET_ARCH "x86_64")
else()
set(TARGET_ARCH "${CMAKE_SYSTEM_PROCESSOR}")
endif()
message(STATUS "Host Processor: ${CMAKE_HOST_SYSTEM_PROCESSOR}")
# message(STATUS "Processor compile definition: ${HOST_ARCH}")
message(STATUS "Target Processor: ${CMAKE_SYSTEM_PROCESSOR}")
message(STATUS "Target Processor Alias: ${TARGET_ARCH}")
# TODO Check if target arch is supported if(NOT TARGET_ARCH IN_LIST
# supported_archs) message(FATAL_ERROR "Target architecture not supported")
# endif()
# Flavor of the project flavour: sip-router, ser or kamailio This is used to
# define the MAIN_NAME flag TODO: Kamailio only
set(flavours kamailio)
set(FLAVOUR
"kamailio"
CACHE STRING "Flavour of the project")
set_property(CACHE FLAVOUR PROPERTY STRINGS ${flavours})
# Verbose option (for debugging purposes) (was quiet in Makefile.defs) Probably
# not needed in CMake and can be removed Use the -DCMAKE_VERBOSE_MAKEFILE=ON
# option to enable verbose mode
option(VERBOSE "Verbose " OFF)
if(VERBOSE)
set(CMAKE_VERBOSE_MAKEFILE ON)
endif()
option(KMSTATS "Kamailio statistics" ON)
option(FMSTATS "Fast memory statistics" ON)
option(WITHAS "With Application server support" ON)
option(RAW_SOCKS "Raw sockets support" ON)
option(MEMPKG "Package memory or sys " ON)
option(NO_KQUEUE "No kqueue support" OFF)
option(NO_SELECT "No select support" OFF)
option(NO_EPOLL "No epoll support" OFF)
option(NO_SIGIO_RT "No poll support" OFF)
option(NO_DEV_POLL "No /dev/poll support" OFF)
option(USE_TCP "Use TCP" ON)
option(USE_TLS "Use TLS" ON)
option(USE_NAPTR "Use NAPTR" ON)
option(USE_DNS_CACHE "Use DNS cache" ON)
# Not strictly required to build
option(USE_SCTP "Use SCTP" ON)
option(DISABLE_NAGLE "Disable Nagle algorithm" ON)
option(USE_MCAST "Use Multicast" ON)
option(DNS_IP_HACK "Use DNS IP hack" ON)
option(SHM_MMAP "Use mmap for shared memory" ON)
option(PKG_MALLOC "Use package memory" ON)
option(MEM_JOIN_FREE "Use mem_join_free" ON)
option(F_MALLOC "Use f_malloc" ON)
option(Q_MALLOC "Use q_malloc" ON)
option(TLSF_MALLOC "Use tlsf_malloc" ON)
option(MALLOC_STATS "Use malloc stats" ON)
option(DBG_SR_MEMORY "Use memory debugging system" ON)
option(USE_DNS_FAILOVER "Use DNS failover" ON)
option(USE_DST_BLOCKLIST "Use destination blacklist" ON)
option(HAVE_RESOLV_RES "Have resolv_res" ON)
option(KSR_PTHREAD_MUTEX_SHARED "Use shared mutex for TLS" ON)
option(STATISTICS "Statistics" ON)
# if(${MEMPKG}) target_compile_definitions(common INTERFACE PKG_MALLOC) else()
# if(${MEMDBGSYS}) target_compile_definitions(common INTERFACE DDBG_SYS_MEMORY)
# endif() endif()
# -----------------------
# TLS support
# -----------------------
option(TLS_HOOKS "TLS hooks support" ON)
option(CORE_TLS "CORE_TLS" OFF)
# set(CORE_TLS "" CACHE STRING "CORE_TLS") set(TLS_HOOKS ON CACHE BOOL "TLS
# hooks support")
if(${CORE_TLS})
set(RELEASE "${RELEASE}-tls")
set(TLS_HOOKS OFF)
else()
set(TLS_HOOKS ON)
endif()
set(LIBSSL_SET_MUTEX_SHARED
ON
CACHE BOOL
"enable workaround for libssl 1.1+ to set shared mutex attribute")
if(NOT ${LIBSSL_SET_MUTEX_SHARED})
message(
STATUS
"Checking if can enable workaround for libssl 1.1+ to set shared mutex attribute"
)
# TODO: This can probably be reduced to a just a find_package(OpenSSL) call
# and then check the version
# If we are cross-compiling, cmake should search for library on the target
# or both target/host
if(NOT DEFINED CMAKE_CROSSCOMPILING OR NOT ${CMAKE_CROSSCOMPILING})
message(STATUS "Checking for OpenSSL 1.1.0")
find_package(OpenSSL 1.1.0)
if(OPENSSL_FOUND)
message(STATUS "OpenSSL version: ${OPENSSL_VERSION}")
if(${OPENSSL_VERSION} VERSION_GREATER_EQUAL "1.1.0")
message(
STATUS
"Enabling workaround for libssl 1.1+ to set shared mutex attribute")
set(LIBSSL_SET_MUTEX_SHARED ON)
endif()
endif()
endif()
endif()
# -----------------------
# Locking mechanism macro
# -----------------------
option(USE_FAST_LOCK "Use fast locking if available" ON)
# TODO: Discuss if we need to expose this to the user to choose between
# different locking methods
# set(locking_methods FAST_LOCK USE_FUTEX USE_PTHREAD_MUTEX USE_POSIX_SEM
# USE_SYSV_SEM)
# set(LOCK_METHOD
# ""
# CACHE STRING "Locking method to use. Fast-lock if available is default")
# # List of locking methods in option
# set_property(CACHE LOCK_METHOD PROPERTY STRINGS ${locking_methods})
# mark_as_advanced(LOCK_METHOD)
# Fast-lock not available for all platforms like mips
# Check the system processor type and set USE_FAST_LOCK accordingly
if(USE_FAST_LOCK)
if(CMAKE_SYSTEM_PROCESSOR MATCHES
"i386|i486|i586|i686|x86_64|amd64|sparc64|sparc|ppc|ppc64|alpha|mips2|mips64")
set(USE_FAST_LOCK YES)
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm64")
set(USE_FAST_LOCK NO)
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm6|arm7")
set(USE_FAST_LOCK YES)
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm|aarch64")
set(USE_FAST_LOCK YES)
target_compile_definitions(common INTERFACE NOSMP) # memory barriers not
# implemented for arm
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "mips")
set(USE_FAST_LOCK NO)
target_compile_definitions(common INTERFACE MIPS_HAS_LLSC) # likely
target_compile_definitions(common INTERFACE NOSMP) # very likely
elseif()
message(
STATUS
"Fast locking not available for this platform, disabling USE_FAST_LOCK")
set(USE_FAST_LOCK NO)
endif()
endif()
# Add definitions if USE_FAST_LOCK is YES
message(STATUS "Fast lock available: ${USE_FAST_LOCK}")
if(USE_FAST_LOCK)
# If fast lock is available, add the definitions for it, else each OS will
# have its own locking method
target_compile_definitions(common INTERFACE FAST_LOCK ADAPTIVE_WAIT
ADAPTIVE_WAIT_LOOPS=1024)
endif()
# set(LOCKING_DEFINITION "${locking_method}")
# message(STATUS "Locking method: ${LOCK_METHOD}")
# -----------------------
# Setting all the flags from options
if(USE_TCP)
target_compile_definitions(common INTERFACE USE_TCP)
endif()
if(USE_TLS)
target_compile_definitions(common INTERFACE USE_TLS)
endif()
if(TLS_HOOKS)
target_compile_definitions(common INTERFACE TLS_HOOKS)
endif()
if(USE_NAPTR)
target_compile_definitions(common INTERFACE USE_NAPTR)
endif()
if(USE_DNS_CACHE)
target_compile_definitions(common INTERFACE USE_DNS_CACHE)
endif()
if(F_MALLOC)
target_compile_definitions(common INTERFACE F_MALLOC)
endif()
if(Q_MALLOC)
target_compile_definitions(common INTERFACE Q_MALLOC)
endif()
if(TLSF_MALLOC)
target_compile_definitions(common INTERFACE TLSF_MALLOC)
endif()
if(MALLOC_STATS)
target_compile_definitions(common INTERFACE MALLOC_STATS)
endif()
if(DBG_SR_MEMORY)
target_compile_definitions(common INTERFACE DBG_SR_MEMORY)
endif()
if(USE_DNS_FAILOVER)
target_compile_definitions(common INTERFACE USE_DNS_FAILOVER)
endif()
if(USE_DST_BLOCKLIST)
target_compile_definitions(common INTERFACE USE_DST_BLOCKLIST)
endif()
if(HAVE_RESOLV_RES)
target_compile_definitions(common INTERFACE HAVE_RESOLV_RES)
endif()
if(USE_MCAST)
target_compile_definitions(common INTERFACE USE_MCAST)
endif()
if(DISABLE_NAGLE)
target_compile_definitions(common INTERFACE DISABLE_NAGLE)
endif()
if(DNS_IP_HACK)
target_compile_definitions(common INTERFACE DNS_IP_HACK)
endif()
if(SHM_MMAP)
target_compile_definitions(common INTERFACE SHM_MMAP)
endif()
if(PKG_MALLOC)
target_compile_definitions(common INTERFACE PKG_MALLOC)
endif()
if(NO_KQUEUE)
target_compile_definitions(common INTERFACE NO_KQUEUE)
endif()
if(NO_SELECT)
target_compile_definitions(common INTERFACE NO_SELECT)
endif()
if(NO_EPOLL)
target_compile_definitions(common INTERFACE NO_EPOLL)
endif()
if(NO_SIGIO_RT)
target_compile_definitions(common INTERFACE NO_SIGIO_RT)
endif()
if(NO_DEV_POLL)
target_compile_definitions(common INTERFACE NO_DEV_POLL)
endif()
if(RAW_SOCKS)
target_compile_definitions(common INTERFACE RAW_SOCKS)
endif()
if(KSR_PTHREAD_MUTEX_SHARED)
target_compile_definitions(common INTERFACE KSR_PTHREAD_MUTEX_SHARED)
endif()
if(FMSTATS)
target_compile_definitions(common INTERFACE FMSTATS)
endif()
if(KMSTATS)
target_compile_definitions(common INTERFACE KMSTATS)
endif()
include(${CMAKE_SOURCE_DIR}/cmake/compiler-specific.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/os-specific.cmake)
set(COMPILER_NAME ${CMAKE_C_COMPILER_ID})
if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
set(COMPILER_NAME "gcc")
elseif(CMAKE_C_COMPILER_ID STREQUAL "Clang")
set(COMPILER_NAME "clang")
endif()
if(NOT DEFINED RUN_DIR)
set(RUN_DIR "run/${MAIN_NAME}")
endif()
string(TOLOWER ${OS} OS_LOWER)
target_compile_definitions(
common
INTERFACE NAME="${MAIN_NAME}"
VERSION="${RELEASE}"
ARCH="${TARGET_ARCH}"
OS=${OS}
OS_QUOTED="${OS}"
COMPILER="${COMPILER_NAME} ${CMAKE_C_COMPILER_VERSION}"
# ${HOST_ARCH}
__CPU_${TARGET_ARCH}
__OS_${OS_LOWER}
VERSIONVAL=${VERSIONVAL}
CFG_DIR="${CMAKE_INSTALL_FULL_SYSCONFDIR}/${CFG_NAME}/"
SHARE_DIR="${CMAKE_INSTALL_FULL_DATADIR}/${MAIN_NAME}/"
# Absolute path this run is always /var/run/kamailio either for
# local or system installs
RUN_DIR="${RUN_PREFIX}/${RUN_DIR}"
# Module stuff?
# PIC
# TODO: We can use the generator expression to define extra flags
# instead of checking the options each time
$<$<BOOL:${USE_SCTP}>:USE_SCTP>
$<$<BOOL:${STATISTICS}>:STATISTICS>)
target_link_libraries(common INTERFACE common_compiler_flags)
# ----------------------
# Common modules
# ---------------------
target_compile_options(common_modules INTERFACE -fPIC)
# TODO: Do we need all the option from common as well?
target_link_libraries(common_modules INTERFACE common)
# ----------------------
# Common utils
# ---------------------
target_link_libraries(common_utils INTERFACE common_compiler_flags)

@ -0,0 +1,796 @@
# Kamailio build system Module groups definitions
#
# lists are sets of modules that don't include modules that are in other lists -
# break the lists as needed in order to use them to build desired groups and
# packages
#
# * basic used modules, with no extra dependency (widespread usage)
set(MOD_LIST_BASIC
async
auth
benchmark
blst
cfg_rpc
cfgutils
corex
counters
ctl
debugger
diversion
enum
exec
ipops
kex
mangler
maxfwd
mediaproxy
mqueue
nat_traversal
nathelper
path
pike
pv
ratelimit
rr
rtimer
rtpproxy
sanity
sdpops
siputils
sl
statistics
textops
textopsx
tm
tmx
topoh
xlog
rtpengine
stun
sipt
tcpops
auth_xkeys
smsops
tsilo
cfgt
statsc
topos
topos_htable
sipdump
pv_headers
kemix)
# * extra used modules, with no extra dependency
set(MOD_LIST_EXTRA
avp
auth_diameter
call_control
call_obj
dmq
domainpolicy
msrp
carrierroute
pdb
qos
sca
seas
sms
sst
timer
tmrec
uac_redirect
xhttp
xhttp_rpc
xprint
jsonrpcs
nosip
dmq_usrloc
statsd
rtjson
log_custom
keepalive
ss7ops
acc_diameter
evrexec
file_out
sipjson
lrkproxy
math
posops
xhttp_prom
dlgs
sworker
influxdbc)
# * common modules depending on database
set(MOD_LIST_DB
acc
alias_db
auth_db
avpops
cfg_db
db_text
db_flatstore
db_cluster
dialog
dispatcher
domain
drouting
group
htable
imc
matrix
mohqueue
msilo
mtree
p_usrloc
pdt
permissions
pipelimit
prefix_route
registrar
sipcapture
siptrace
speeddial
sqlops
uac
uri_db
userblocklist
usrloc
secfilter)
# * common modules depending on database, using UID db schema
set(MOD_LIST_DBUID db2_ops uid_auth_db uid_avp_db uid_domain uid_gflags
uid_uri_db)
# * modules for devel purposes
set(MOD_LIST_DEVEL misctest)
# * modules depending on pcre3 library
set(MOD_LIST_PCRE dialplan lcr regex)
# * modules depending on radius client library
set(MOD_LIST_RADIUS acc_radius auth_radius misc_radius peering)
# * modules depending on ldap client library
set(MOD_LIST_LDAP db2_ldap h350 ldap)
# * modules depending on mysql client library
set(MOD_LIST_MYSQL db_mysql)
# * modules depending on postgres client library
set(MOD_LIST_POSTGRES db_postgres)
# * modules depending on unixodbc library
set(MOD_LIST_UNIXODBC db_unixodbc)
# * modules depending on xml2 library
set(MOD_LIST_CPL cplc)
# * modules depending on xml2 library
set(MOD_LIST_XMLDEPS xhttp_pi xmlrpc xmlops)
# * modules depending on net-snmp library
set(MOD_LIST_SNMPSTATS snmpstats)
# * modules depending on expat library
set(MOD_LIST_XMPP xmpp)
# * modules depending on bdb (db4) library
set(MOD_LIST_BERKELEY db_berkeley)
# * modules depending on curl library
set(MOD_LIST_UTILS utils http_client lost slack)
# * modules depending on curl and libevent2 library
set(MOD_LIST_HTTP_ASYNC http_async_client)
# * modules depending on memcache library
set(MOD_LIST_MEMCACHED memcached)
# * modules depending on openssl library
set(MOD_LIST_TLSDEPS crypto tls)
# * modules depending on static openssl library
set(MOD_LIST_TLSA tlsa)
# * modules depending on static wolfssl library
set(MOD_LIST_TLS_WOLFSSL tls_wolfssl)
# * modules depending on openssl library
set(MOD_LIST_OUTBOUND outbound)
# * modules depending on openssl and unistring library
set(MOD_LIST_WEBSOCKET websocket)
# * modules depending on libval-threads libcrypto libsres libpthread
set(MOD_LIST_DNSSEC dnssec)
# * modules depending on libsctp
set(MOD_LIST_SCTP sctp)
# * modules depending on openssl library
set(MOD_LIST_AUTHEPH auth_ephemeral)
# * modules related to SIMPLE presence extensions
set(MOD_LIST_PRESENCE
presence
presence_conference
presence_dfks
presence_dialoginfo
presence_mwi
presence_profile
presence_reginfo
presence_xml
pua
pua_bla
pua_dialoginfo
pua_reginfo
pua_rpc
pua_usrloc
pua_xmpp
rls
xcap_client
xcap_server)
# * modules depending on lua library
set(MOD_LIST_LUA app_lua)
# * modules depending on perl library
set(MOD_LIST_PERLDEPS app_perl db_perlvdb)
# * modules depending on python library
set(MOD_LIST_PYTHON app_python)
# * modules depending on python3 library
set(MOD_LIST_PYTHON3 app_python3 app_python3s)
# * modules depending on libm (math library - standard system library)
set(MOD_LIST_JSDT app_jsdt)
# * modules depending on ruby library
set(MOD_LIST_RUBY app_ruby app_ruby_proc)
# * modules depending on geoip library
set(MOD_LIST_GEOIP geoip)
# * modules depending on new geoip library
set(MOD_LIST_GEOIP2 geoip2)
# * modules depending on sqlite library
set(MOD_LIST_SQLITE db_sqlite)
# * modules depending on oracle library
set(MOD_LIST_ORACLE db_oracle)
# * modules depending on json library
set(MOD_LIST_JSON json pua_json)
# * modules depending on json (+libevent) library
set(MOD_LIST_JSON_EVENT jsonrpcc)
# * modules depending on jansson library
set(MOD_LIST_JANSSON jansson acc_json)
# * modules depending on jansson (+libevent) library
set(MOD_LIST_JANSSON_EVENT janssonrpcc)
# * modules depending on redis library
set(MOD_LIST_REDIS db_redis ndb_redis topos_redis)
# * modules related to IMS extensions
set(MOD_LIST_IMS
cdp
cdp_avp
ims_dialog
ims_auth
ims_isc
ims_icscf
ims_qos
ims_registrar_pcscf
ims_registrar_scscf
ims_usrloc_pcscf
ims_usrloc_scscf
ims_charging
ims_ocs
ims_diameter_server
ims_ipsec_pcscf)
# * modules depending on java library
set(MOD_LIST_JAVA app_java)
# * modules depending on gzip library
set(MOD_LIST_GZCOMPRESS gzcompress)
# * modules depending on uuid library
set(MOD_LIST_UUID uuid)
# * modules depending on ev library
set(MOD_LIST_EV evapi)
# * modules depending on libjwt library
set(MOD_LIST_JWT jwt)
# * modules depending on libwebsockets library
set(MOD_LIST_LWSC lwsc)
# * modules depending on libstirshaken library
set(MOD_LIST_STIRSHAKEN stirshaken)
# * modules depending on kazoo/rabbitmq
set(MOD_LIST_KAZOO kazoo)
# * modules depending on mongodb
set(MOD_LIST_MONGODB db_mongodb ndb_mongodb)
# * modules depending on redis and event library
set(MOD_LIST_CNXCC cnxcc)
# * modules depending on erlang library
set(MOD_LIST_ERLANG erlang)
# * modules depending on systemd library
set(MOD_LIST_SYSTEMD log_systemd systemdops)
# * modules depending on libnsq (+libev libevbuffsock libcurl libjson-c) library
set(MOD_LIST_NSQ nsq)
# * modules depending on librabbitmq library
set(MOD_LIST_RABBITMQ rabbitmq)
# * modules depending on libphonenumber library
set(MOD_LIST_PHONENUM phonenum)
# * modules depending on rdkafka library
set(MOD_LIST_KAFKA kafka)
# * modules depending on mqtt mosquitto and ev library
set(MOD_LIST_MQTT mqtt)
# * modules depending on nats and ev library
set(MOD_LIST_NATS nats)
# * modules depending on ruxc library
set(MOD_LIST_RUXC ruxc)
# * modules depending on microhttpd library
set(MOD_LIST_MICROHTTPD microhttpd)
# * modules depending on nghttp2 library
set(MOD_LIST_NGHTTP2 nghttp2)
# * modules depending on libgcrypt library
set(MOD_LIST_GCRYPT gcrypt)
# * modules depending on secsipid library
set(MOD_LIST_SECSIPID secsipid secsipid_proc)
# * modules depending on oRTP and mediastreamer2 libraries
set(MOD_LIST_RTP_MEDIA_SERVER rtp_media_server)
# * all modules
set(MOD_LIST_ALL
${MOD_LIST_BASIC}
${MOD_LIST_EXTRA}
${MOD_LIST_DB}
${MOD_LIST_DBUID}
${MOD_LIST_DEVEL}
${MOD_LIST_PCRE}
${MOD_LIST_RADIUS}
${MOD_LIST_LDAP}
${MOD_LIST_MYSQL}
${MOD_LIST_POSTGRES}
${MOD_LIST_UNIXODBC}
${MOD_LIST_XMLDEPS}
${MOD_LIST_PERLDEPS}
${MOD_LIST_CPL}
${MOD_LIST_XMPP}
${MOD_LIST_BERKELEY}
${MOD_LIST_UTILS}
${MOD_LIST_MEMCACHED}
${MOD_LIST_TLSDEPS}
${MOD_LIST_WEBSOCKET}
${MOD_LIST_SNMPSTATS}
${MOD_LIST_PRESENCE}
${MOD_LIST_LUA}
${MOD_LIST_PYTHON}
${MOD_LIST_PYTHON3}
${MOD_LIST_RUBY}
${MOD_LIST_GEOIP}
${MOD_LIST_SQLITE}
${MOD_LIST_JSON}
${MOD_LIST_JSON_EVENT}
${MOD_LIST_REDIS}
${MOD_LIST_IMS}
${MOD_LIST_ORACLE}
${MOD_LIST_OUTBOUND}
${MOD_LIST_JAVA}
${MOD_LIST_DNSSEC}
${MOD_LIST_SCTP}
${MOD_LIST_AUTHEPH}
${MOD_LIST_GZCOMPRESS}
${MOD_LIST_UUID}
${MOD_LIST_EV}
${MOD_LIST_KAZOO}
${MOD_LIST_MONGODB}
${MOD_LIST_CNXCC}
${MOD_LIST_JANSSON}
${MOD_LIST_JANSSON_EVENT}
${MOD_LIST_GEOIP2}
${MOD_LIST_ERLANG}
${MOD_LIST_SYSTEMD}
${MOD_LIST_HTTP_ASYNC}
${MOD_LIST_NSQ}
${MOD_LIST_RABBITMQ}
${MOD_LIST_JSDT}
${MOD_LIST_PHONENUM}
${MOD_LIST_KAFKA}
${MOD_LIST_MQTT}
${MOD_LIST_NATS}
${MOD_LIST_RUXC}
${MOD_LIST_SECSIPID}
${MOD_LIST_JWT}
${MOD_LIST_LWSC}
${MOD_LIST_STIRSHAKEN}
${MOD_LIST_TLSA}
${MOD_LIST_TLS_WOLFSSL}
${MOD_LIST_MICROHTTPD}
${MOD_LIST_NGHTTP2}
${MOD_LIST_GCRYPT}
${MOD_LIST_RTP_MEDIA_SERVER})
# sort the list
list(SORT MOD_LIST_ALL)
# --- Groups defined for source code compilation ###
# groups are sets of modules selected by compile target interest (should be
# built by combining lists)
# Modules in this group are the default compiled modules due to no external
# compile or link dependencies
set(MODULE_GROUP_ALL ${MOD_LIST_ALL})
set(MODULE_GROUP_DEFAULT ${MOD_LIST_BASIC} ${MOD_LIST_EXTRA} ${MOD_LIST_DB}
${MOD_LIST_DBUID} ${MOD_LIST_DEVEL} ${MOD_LIST_JSDT})
# Modules in this group are the default compiled modules due to no
# internal/external compile or link dependencies
# module_group_standard=$(mod_list_basic) $(mod_list_extra) \ $(mod_list_devel)
# $(mod_list_jsdt)
set(MODULE_GROUP_STANDARD ${MOD_LIST_BASIC} ${MOD_LIST_EXTRA} ${MOD_LIST_DEVEL}
${MOD_LIST_JSDT})
# Modules in this group are considered a standard part due to widespread usage,
# but they have dependencies that must be satisfied for compilation (e.g., lcr,
# radius, presence, tls, ...). module_group_common=$(mod_list_db)
# $(mod_list_dbuid) \ $(mod_list_pcre) $(mod_list_radius) \ $(mod_list_xmldeps)
# $(mod_list_presence) \ $(mod_list_tlsdeps)
set(MODULE_GROUP_COMMON
${MOD_LIST_DB}
${MOD_LIST_DBUID}
${MOD_LIST_PCRE}
${MOD_LIST_RADIUS}
${MOD_LIST_XMLDEPS}
${MOD_LIST_PRESENCE}
${MOD_LIST_TLSDEPS})
# For db use (db modules, excluding drivers) module_group_db=$(mod_list_db)
set(MODULE_GROUP_DB ${MOD_LIST_DB})
# For mysql module_group_mysql_driver=$(mod_list_mysql)
# module_group_mysql=$(module_group_mysql_driver) $(module_group_db)
set(MODULE_GROUP_MYSQL_DRIVER ${MOD_LIST_MYSQL})
set(MODULE_GROUP_MYSQL ${MODULE_GROUP_MYSQL_DRIVER} ${MODULE_GROUP_DB})
# For postgress module_group_postgres_driver=$(mod_list_postgres)
# module_group_postgres=$(module_group_postgres_driver) $(module_group_db)
set(MODULE_GROUP_POSTGRES_DRIVER ${MOD_LIST_POSTGRES})
set(MODULE_GROUP_POSTGRES ${MODULE_GROUP_POSTGRES_DRIVER} ${MODULE_GROUP_DB})
# For sqlite module_group_sqlite_driver=$(mod_list_sqlite)
# module_group_sqlite=$(module_group_sqlite_driver) $(module_group_db)
set(MODULE_GROUP_SQLITE_DRIVER ${MOD_LIST_SQLITE})
set(MODULE_GROUP_SQLITE ${MODULE_GROUP_SQLITE_DRIVER} ${MODULE_GROUP_DB})
# For radius
set(MODULE_GROUP_RADIUS ${MODULE_LIST_RADIUS})
# For presence kamailio modules
set(MODULE_GROUP_PRESENCE ${MOD_LIST_PRESENCE})
# For cassandra
set(MODULE_GROUP_CASSANDRA_DRIVER ${MODULE_LIST_CASSANDRA})
set(MODULE_GROUP_CASSANDRA ${MODULE_GROUP_CASSANDRA_DRIVER} ${MODULE_GROUP_DB})
# For all modules not compiled by default
# list(FILTER MOD_LIST_ALL EXCLUDE REGEX "${MODULE_GROUP_DEFAULT}")
# for all protocols (excl. local ones such as unix, tcp, etc.)
set(AVAILABLE_GROUPS ALL DEFAULT STANDARD COMMON)
# --- Groups defined for pacKaging ###
# Standard modules in main pkg
set(MODULE_GROUP_KSTANDARD ${MOD_LIST_BASIC} ${MOD_LIST_EXTRA} ${MOD_LIST_DB}
${MOD_LIST_DBUID} ${MOD_LIST_PCRE} ${MOD_LIST_JSDT})
# Standard modules without any dependencies (such as pcre)
set(MODULE_GROUP_KMINI ${MOD_LIST_BASIC} ${MOD_LIST_EXTRA} ${MOD_LIST_DB}
${MOD_LIST_DBUID} ${MOD_LIST_JSDT})
# pkg pcre module
set(MODULE_GROUP_KPCRE ${MOD_LIST_PCRE})
# pkg mysql module
set(MODULE_GROUP_KMYSQL ${MOD_LIST_MYSQL})
# pkg postgress module
set(MODULE_GROUP_KPOSTGRES ${MOD_LIST_POSTGRES})
# pkg cpl module
set(MODULE_GROUP_KCPL ${MOD_LIST_CPL})
# pkg xml modules
set(MODULE_GROUP_KXML ${MOD_LIST_XMLDEPS})
# pkg radius modules
set(MODULE_GROUP_KRADIUS ${MOD_LIST_RADIUS})
# pkg unixodbc module
set(MODULE_GROUP_KUNIXODBC ${MOD_LIST_UNIXODBC})
# pkg perl module
set(MODULE_GROUP_KPERL ${MOD_LIST_PERLDEPS})
# pkg snmpstats module
set(MODULE_GROUP_KSNMPSTATS ${MOD_LIST_SNMPSTATS})
# pkg xmpp module
set(MODULE_GROUP_KXMPP ${MOD_LIST_XMPP})
# pkg berkeley module
set(MODULE_GROUP_KBERKELEY ${MOD_LIST_BERKELEY})
# pkg ldap modules
set(MODULE_GROUP_KLDAP ${MOD_LIST_LDAP})
# pkg utils module
set(MODULE_GROUP_KUTILS ${MOD_LIST_UTILS})
# pkg https_async module
set(MODULE_GROUP_KHTTP_ASYNC ${MOD_LIST_HTTP_ASYNC})
# pkg memcached module
set(MODULE_GROUP_KMEMCACHED ${MOD_LIST_MEMCACHED})
# pkg tls module
set(MODULE_GROUP_KTLS_BASIC ${MOD_LIST_TLSDEPS})
# pkg tls module with curl
if(KTLS_INCLUDE_TLSA)
set(MODULE_GROUP_KTLS ${MOD_LIST_TLSDEPS} ${MOD_LIST_TLSA})
else()
set(MODULE_GROUP_KTLS ${MOD_LIST_TLSDEPS})
set(MODULE_GROUP_KTLSA ${MOD_LIST_TLSA})
endif()
# pkg tls_wolfssl module
set(MODULE_GROUP_KTLS_WOLFSSL ${MOD_LIST_TLS_WOLFSSL})
# pkg websocket module
set(MODULE_GROUP_KWEBSOCKET ${MOD_LIST_WEBSOCKET})
# pkg presence modules
set(MODULE_GROUP_KPRESENCE ${MOD_LIST_PRESENCE})
# pkg lua module
set(MODULE_GROUP_KLUA ${MOD_LIST_LUA})
# pkg python module
set(MODULE_GROUP_KPYTHON ${MOD_LIST_PYTHON})
# pkg python3 module
set(MODULE_GROUP_KPYTHON3 ${MOD_LIST_PYTHON3})
# pkg ruby module
set(MODULE_GROUP_KRUBY ${MOD_LIST_RUBY})
# pkg geoip module
set(MODULE_GROUP_KGEOIP ${MOD_LIST_GEOIP})
# pkg geoip2 module
set(MODULE_GROUP_KGEOIP2 ${MOD_LIST_GEOIP2})
# pkg sqlite module
set(MODULE_GROUP_KSQLITE ${MOD_LIST_SQLITE})
# K json modules
set(MODULE_GROUP_KJSON_BASIC ${MOD_LIST_JSON})
# K json modules with libevent
set(MODULE_GROUP_KJSON ${MOD_LIST_JSON} ${MOD_LIST_JSON_EVENT})
# K jansson modules
set(MODULE_GROUP_KJANSSON_BASIC ${MOD_LIST_JANSSON})
# K jansson modules with libevent
set(MODULE_GROUP_KJANSSON ${MOD_LIST_JANSSON} ${MOD_LIST_JANSSON_EVENT})
# pkg redis module
set(MODULE_GROUP_KREDIS ${MOD_LIST_REDIS})
# pkg IMS modules
set(MODULE_GROUP_KIMS ${MOD_LIST_IMS})
# pkg outbound module
set(MODULE_GROUP_KOUTBOUND ${MOD_LIST_OUTBOUND})
# pkg java module
set(MODULE_GROUP_KJAVA ${MOD_LIST_JAVA})
# pkg dnssec module
set(MODULE_GROUP_KDNSSEC ${MOD_LIST_DNSSEC})
# pkg sctp module
set(MODULE_GROUP_KSCTP ${MOD_LIST_SCTP})
# pkg auth_ephemeral module
set(MODULE_GROUP_KAUTHEPH ${MOD_LIST_AUTHEPH})
# pkg gzcompress module
set(MODULE_GROUP_KGZCOMPRESS ${MOD_LIST_GZCOMPRESS})
# pkg uuid module
set(MODULE_GROUP_KUUID ${MOD_LIST_UUID})
# pkg libev modules
set(MODULE_GROUP_KEV ${MOD_LIST_EV})
# pkg jwt module
set(MODULE_GROUP_KJWT ${MOD_LIST_JWT})
# pkg lwsc module
set(MODULE_GROUP_KLWSC ${MOD_LIST_LWSC})
# pkg stirshaken module
set(MODULE_GROUP_KSTIRSHAKEN ${MOD_LIST_STIRSHAKEN})
# pkg kazoo module
set(MODULE_GROUP_KKAZOO ${MOD_LIST_KAZOO})
# pkg mongodb modules
set(MODULE_GROUP_KMONGODB ${MOD_LIST_MONGODB})
# pkg cnxcc module
set(MODULE_GROUP_KCNXCC ${MOD_LIST_CNXCC})
# pkg erlang module
set(MODULE_GROUP_KERLANG ${MOD_LIST_ERLANG})
# pkg systemd module
set(MODULE_GROUP_KSYSTEMD ${MOD_LIST_SYSTEMD})
# K nsq modules
set(MODULE_GROUP_KNSQ ${MOD_LIST_NSQ})
# K rabbitmq modules
set(MODULE_GROUP_KRABBITMQ ${MOD_LIST_RABBITMQ})
# K phonenumber modules
set(MODULE_GROUP_KPHONENUM ${MOD_LIST_PHONENUM})
# K kafka modules
set(MODULE_GROUP_KKAFKA ${MOD_LIST_KAFKA})
# K mqtt modules
set(MODULE_GROUP_KMQTT ${MOD_LIST_MQTT})
# K nats modules
set(MODULE_GROUP_KNATS ${MOD_LIST_NATS})
# K ruxc modules
set(MODULE_GROUP_KRUXC ${MOD_LIST_RUXC})
# K microhttpd module
set(MODULE_GROUP_KMICROHTTPD ${MOD_LIST_MICROHTTPD})
# K nghttp2 module
set(MODULE_GROUP_KNGHTTP2 ${MOD_LIST_NGHTTP2})
# K gcrypt module
set(MODULE_GROUP_KGCRYPT ${MOD_LIST_GCRYPT})
# K secsipid modules
set(MODULE_GROUP_KSECSIPID ${MOD_LIST_SECSIPID})
# K rtp_media_server modules
set(MODULE_GROUP_KRTP_MEDIA_SERVER ${MOD_LIST_RTP_MEDIA_SERVER})
# list of static modules
set(STATIC_MODULES "")
list(
APPEND
AVAILABLE_GROUPS
KSTANDARD
KMINI
KPCRE
KMYSQL
KPOSTGRES
KCPL
KXML
KRADIUS
KUNIXODBC
KPERL
KSNMPSTATS
KXMPP
KBERKELEY
KLDAP
KUTILS
KHTTP_ASYNC
KMEMCACHED
KTLS_BASIC
KTLS
KTLS_WOLFSSL
KWEBSOCKET
KPRESENCE
KLUA
KPYTHON
KPYTHON3
KRUBY
KGEOIP
KGEOIP2
KSQLITE
KJSON_BASIC
KJSON
KJANSSON_BASIC
KJANSSON
KREDIS
KIMS
KOUTBOUND
KJAVA
KDNSSEC
KSCTP
KAUTHEPH
KGZCOMPRESS
KUUID
KEV
KJWT
KLWSC
KSTIRSHAKEN
KKAZOO
KMONGODB
KCNXCC
KERLANG
KSYSTEMD
KNSQ
KRABBITMQ
KPHONENUM
KKAFKA
KMQTT
KNATS
KRUXC
KMICROHTTPD
KNGHTTP2
KGCRYPT
KSECSIPID
KRT_MEDIA_SERVER)
# # Option to allow the user to define which group to build
# set(SELECTED_PACKAGE_GROUP
# ""
# CACHE STRING "Select the package group to build from"
# PARENT_SCOPE
# )
# set_property(CACHE SELECTED_PACKAGE_GROUP PROPERTY STRINGS ${PACKAGE_GROUPS})
# # Ensure the selected group is valid
# if(NOT SELECTED_PACKAGE_GROUP IN_LIST PACKAGE_GROUPS)
# message(
# FATAL_ERROR
# "Invalid package group selected: ${SELECTED_PACKAGE_GROUP}. Please choose from: ${PACKAGE_GROUPS}."
# )
# endif()
# message(STATUS "Building package group: ${SELECTED_PACKAGE_GROUP}")

@ -0,0 +1,185 @@
option(BUILD_DOC "Build documentation" ON)
# Readme file and man page
find_program(XSLTPROC_EXECUTABLE xsltproc QUIET)
find_program(LYNX_EXECUTABLE lynx QUIET)
find_program(DOCBOOK2X_EXECUTABLE docbook2x-man QUIET)
if(BUILD_DOC AND (NOT XSLTPROC_EXECUTABLE OR NOT LYNX_EXECUTABLE))
message(STATUS "xsltproc or lynx not found but required for doc generation.")
set(BUILD_DOC OFF)
endif()
if(BUILD_DOC AND (NOT DOCBOOK2X_EXECUTABLE))
message(STATUS "docbook2x-man not found but required for man generation.")
set(BUILD_DOC OFF)
endif()
option(DOCS_XSL_VAIDATION "Docbook document validation" OFF)
option(DOCS_NOCATALOG
"ON: Use standard catalog from OS | OFF: Use custom catalog " OFF)
set(DOCS_SOURCES
"index.html"
CACHE STRING "Documentation files list")
set(DOCS_README
${DOCS_SOURCES}
CACHE STRING "Readme Documentation files list")
set(DOCS_HTML
${DOCS_SOURCES}
CACHE STRING "HTML Documentation files list")
set(DOCS_TXT
${DOCS_SOURCES}
CACHE STRING "TXT Documentation files list")
set(DOCS_OUTPUT_DIR
${CMAKE_BINARY_DIR}/doc/docbook
CACHE STRING "Path to build HTML docs")
set(DOCBOOK_DIR ${CMAKE_SOURCE_DIR}/doc/docbook)
set(STYLESHEET_DIR ${CMAKE_SOURCE_DIR}/doc/stylesheets)
set(DEPS_XSL ${DOCBOOK_DIR}/dep.xsl)
set(SINGLE_HTML_XSL ${DOCBOOK_DIR}/html.xsl)
set(CHUNKED_HTML_XSL ${DOCBOOK_DIR}/html.chunked.xsl)
set(TXT_XSL ${DOCBOOK_DIR}/txt.xsl)
set(README_XSL ${DOCBOOK_DIR}/readme.xsl)
set(DOCS_HTML_CSS
"/css/sr-doc.css"
CACHE STRING "Path to the CSS file")
set(CATALOG ${DOCBOOK_DIR}/catalog.xml)
if(DOCS_NOCATALOG)
set(XMLCATATLOGX "")
else()
set(XMLCATATLOGX "XML_CATALOG_FILES=${CATALOG}")
endif()
# Set flags for xtproc for generating documentation and allow user defined
set(DOCS_XSLTPROC_FLAGS
""
CACHE STRING "Xsltransform processor flags")
if(NOT DOCS_XSL_VAIDATION)
if(VERBOSE)
message(STATUS "DOCS_XSL_VAIDATION=OFF"
"Disabling xsl validation when generating documentation")
endif()
list(APPEND DOCS_XSLTPROC_FLAGS --novalid)
endif()
# Set lynx flags for generating readmes and allow user defined
set(DOCS_LYNX_FLAGS
"-nolist"
CACHE STRING "Lynx readme generator flags")
# Function to add a module docs entry
function(docs_add_module module_name)
# message(STATUS "Adding documentation for module ${MODULE_NAME}")
set(module_path "${MODULES_DIR}/${module_name}")
set(module_doc_path "${module_path}/doc")
add_custom_target(
${module_name}_doc_text
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${module_name}/${module_name}.txt
COMMENT "Processing target ${module_name}_doc_text")
# This is essentialy an alias of doc_text target but with extra copy command
# to copy the text file to the source tree directory.
add_custom_target(${module_name}_readme
COMMENT "Processing target ${module_name}_readme")
add_dependencies(${module_name}_readme ${module_name}_doc_text)
add_dependencies(kamailio_docs_readme ${module_name}_readme)
add_custom_target(
${module_name}_doc_html
DEPENDS ${DOCS_OUTPUT_DIR}/${module_name}.html
COMMENT "Processing target ${module_name}_doc_html")
add_custom_target(${module_name}_doc
COMMENT "Processing target ${module_name}_doc")
add_dependencies(${module_name}_doc ${module_name}_doc_text
${module_name}_doc_html)
# Man docs only if author of module provided xml for man.
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${module_name}/${module_name}.xml)
add_custom_target(
${module_name}_man
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${module_name}/${module_name}.xml
COMMENT "Processing target ${module_name}_man")
add_dependencies(kamailio_docs_man ${module_name}_man)
endif()
# Each version has seperate custon commands for not recompiling all if 1 gets
# changed.
if(XSLTPROC_EXECUTABLE)
if(LYNX_EXECUTABLE)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${module_name}/${module_name}.txt
COMMAND
# TXT version - just plain text
${XMLCATATLOGX} ${XSLTPROC_EXECUTABLE} ${DOCS_XSLTPROC_FLAGS}
--xinclude ${TXT_XSL} ${module_name}.xml | ${LYNX_EXECUTABLE}
${DOCS_LYNX_FLAGS} -stdin -dump >
${CMAKE_CURRENT_BINARY_DIR}/${module_name}/${module_name}.txt
DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/${module_name}/doc/${module_name}.xml
${TXT_XSL}
# ${SINGLE_HTML_XSL}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${module_name}/doc
COMMENT "Generating text documentation with for ${module_name}")
# Add custom command to copy the README file after the readme target is
# built. The readme target depends on doc_text so it will regenerate if
# it's input changed.
add_custom_command(
TARGET ${module_name}_readme
POST_BUILD
COMMAND
${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_BINARY_DIR}/${module_name}/${module_name}.txt
${CMAKE_CURRENT_SOURCE_DIR}/${module_name}/README
COMMENT "Copying README file to source tree for ${module_name}")
add_custom_command(
OUTPUT ${DOCS_OUTPUT_DIR}/${module_name}.html
COMMAND
# HTML version
${XMLCATATLOGX} ${XSLTPROC_EXECUTABLE} ${DOCS_XSLTPROC_FLAGS}
--xinclude --stringparam base.dir ${DOCS_OUTPUT_DIR} --stringparam
root.filename ${module_name} --stringparam html.stylesheet
${DOCS_HTML_CSS} --stringparam html.ext ".html" ${SINGLE_HTML_XSL}
${module_name}.xml
DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/${module_name}/doc/${module_name}.xml
${SINGLE_HTML_XSL}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${module_name}/doc
COMMENT "Generating html documentation for ${module_name}")
endif()
add_custom_command(
# man version
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${module_name}/${module_name}.7
COMMAND ${DOCBOOK2X_EXECUTABLE} -s ${STYLESHEET_DIR}/serdoc2man.xsl
${module_name}.xml
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${module_name}/doc/${module_name}.xml
${STYLESHEET_DIR}/serdoc2man.xsl
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${module_name}
COMMENT "Processing target ${module_name}_man")
install(
FILES ${CMAKE_CURRENT_SOURCE_DIR}/${module_name}/README
RENAME README.${module_name}
DESTINATION ${CMAKE_INSTALL_DOCDIR}/modules
COMPONENT kamailio_docs)
install(
FILES ${CMAKE_CURRENT_SOURCE_DIR}/${module_name}/${module_name}.7
DESTINATION ${CMAKE_INSTALL_DATADIR}/man/man7
COMPONENT kamailio_docs
OPTIONAL)
endif()
endfunction()

@ -0,0 +1,152 @@
# Copyright (c) 2023-present The Bitcoin Core developers
# Distributed under the MIT software license, see the accompanying
# file COPYING or https://opensource.org/license/mit/.
#[=======================================================================[
FindBerkeleyDB
--------------
Finds the Berkeley DB headers and library.
Imported Targets
^^^^^^^^^^^^^^^^
This module provides imported target ``BerkeleyDB::BerkeleyDB``, if
Berkeley DB has been found.
Result Variables
^^^^^^^^^^^^^^^^
This module defines the following variables:
``BerkeleyDB_FOUND``
"True" if Berkeley DB found.
``BerkeleyDB_VERSION``
The MAJOR.MINOR version of Berkeley DB found.
#]=======================================================================]
set(_BerkeleyDB_homebrew_prefix)
if(CMAKE_HOST_APPLE)
find_program(HOMEBREW_EXECUTABLE brew)
if(HOMEBREW_EXECUTABLE)
# The Homebrew package manager installs the berkeley-db* packages as
# "keg-only", which means they are not symlinked into the default prefix.
# To find such a package, the find_path() and find_library() commands
# need additional path hints that are computed by Homebrew itself.
execute_process(
COMMAND ${HOMEBREW_EXECUTABLE} --prefix berkeley-db@5.3
OUTPUT_VARIABLE _BerkeleyDB_homebrew_prefix
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
endif()
endif()
find_path(
BerkeleyDB_INCLUDE_DIR
NAMES db.h
HINTS ${_BerkeleyDB_homebrew_prefix}/include
PATH_SUFFIXES
4.8
48
db4.8
4
db4
5.3
db5.3
5
db5)
mark_as_advanced(BerkeleyDB_INCLUDE_DIR)
unset(_BerkeleyDB_homebrew_prefix)
if(NOT BerkeleyDB_LIBRARY)
if(VCPKG_TARGET_TRIPLET)
# The vcpkg package manager installs the berkeleydb package with the same name
# of release and debug libraries. Therefore, the default search paths set by
# vcpkg's toolchain file cannot be used to search libraries as the debug one
# will always be found.
set(CMAKE_FIND_USE_CMAKE_PATH FALSE)
endif()
get_filename_component(_BerkeleyDB_lib_hint "${BerkeleyDB_INCLUDE_DIR}"
DIRECTORY)
find_library(
BerkeleyDB_LIBRARY_RELEASE
NAMES db48 db53 db NAMES_PER_DIR
HINTS ${_BerkeleyDB_lib_hint}
PATH_SUFFIXES lib)
mark_as_advanced(BerkeleyDB_LIBRARY_RELEASE)
find_library(
BerkeleyDB_LIBRARY_DEBUG
NAMES db48 db53 db NAMES_PER_DIR
HINTS ${_BerkeleyDB_lib_hint}
PATH_SUFFIXES debug/lib)
mark_as_advanced(BerkeleyDB_LIBRARY_DEBUG)
unset(_BerkeleyDB_lib_hint)
unset(CMAKE_FIND_USE_CMAKE_PATH)
include(SelectLibraryConfigurations)
select_library_configurations(BerkeleyDB)
# The select_library_configurations() command sets BerkeleyDB_FOUND, but we
# want the one from the find_package_handle_standard_args() command below.
unset(BerkeleyDB_FOUND)
endif()
if(BerkeleyDB_INCLUDE_DIR)
file(STRINGS "${BerkeleyDB_INCLUDE_DIR}/db.h" _BerkeleyDB_version_strings
REGEX "^#define[\t ]+DB_VERSION_(MAJOR|MINOR|PATCH)[ \t]+[0-9]+.*")
string(REGEX
REPLACE ".*#define[\t ]+DB_VERSION_MAJOR[ \t]+([0-9]+).*" "\\1"
_BerkeleyDB_version_major "${_BerkeleyDB_version_strings}")
string(REGEX
REPLACE ".*#define[\t ]+DB_VERSION_MINOR[ \t]+([0-9]+).*" "\\1"
_BerkeleyDB_version_minor "${_BerkeleyDB_version_strings}")
string(REGEX
REPLACE ".*#define[\t ]+DB_VERSION_PATCH[ \t]+([0-9]+).*" "\\1"
_BerkeleyDB_version_patch "${_BerkeleyDB_version_strings}")
unset(_BerkeleyDB_version_strings)
# The MAJOR.MINOR.PATCH version will be logged in the following find_package_handle_standard_args() command.
set(_BerkeleyDB_full_version
${_BerkeleyDB_version_major}.${_BerkeleyDB_version_minor}.${_BerkeleyDB_version_patch}
)
set(BerkeleyDB_VERSION
${_BerkeleyDB_version_major}.${_BerkeleyDB_version_minor})
unset(_BerkeleyDB_version_major)
unset(_BerkeleyDB_version_minor)
unset(_BerkeleyDB_version_patch)
endif()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(
BerkeleyDB
REQUIRED_VARS BerkeleyDB_LIBRARY BerkeleyDB_INCLUDE_DIR
VERSION_VAR _BerkeleyDB_full_version)
unset(_BerkeleyDB_full_version)
if(BerkeleyDB_FOUND AND NOT TARGET BerkeleyDB::BerkeleyDB)
add_library(BerkeleyDB::BerkeleyDB UNKNOWN IMPORTED)
set_target_properties(
BerkeleyDB::BerkeleyDB PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
"${BerkeleyDB_INCLUDE_DIR}")
if(BerkeleyDB_LIBRARY_RELEASE)
set_property(
TARGET BerkeleyDB::BerkeleyDB
APPEND
PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
set_target_properties(
BerkeleyDB::BerkeleyDB PROPERTIES IMPORTED_LOCATION_RELEASE
"${BerkeleyDB_LIBRARY_RELEASE}")
endif()
if(BerkeleyDB_LIBRARY_DEBUG)
set_property(
TARGET BerkeleyDB::BerkeleyDB
APPEND
PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
set_target_properties(
BerkeleyDB::BerkeleyDB PROPERTIES IMPORTED_LOCATION_DEBUG
"${BerkeleyDB_LIBRARY_DEBUG}")
endif()
endif()

@ -0,0 +1,151 @@
# https://gist.github.com/JayKickliter/c79cad0c3e3acfc3465cac41b7051fa9
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.
#[=======================================================================[.rst:
FindErlang
-------
Finds Erlang libraries.
Imported Targets
^^^^^^^^^^^^^^^^
This module provides the following imported targets, if found:
``Erlang::Erlang``
Header only interface library suitible for compiling NIFs.
``Erlang::EI``
Erlang interface library.
``Erlang::ERTS``
Erlang runtime system library.
Result Variables
^^^^^^^^^^^^^^^^
This will define the following variables:
``Erlang_FOUND``
True if the system has the Erlang library.
``Erlang_RUNTIME``
The path to the Erlang runtime.
``Erlang_COMPILE``
The path to the Erlang compiler.
``Erlang_EI_PATH``
The path to the Erlang erl_interface path.
``Erlang_ERTS_PATH``
The path to the Erlang erts path.
``Erlang_EI_INCLUDE_DIRS``
/include appended to Erlang_EI_PATH.
``Erlang_EI_LIBRARY_PATH``
/lib appended to Erlang_EI_PATH.
``Erlang_ERTS_INCLUDE_DIRS``
/include appended to Erlang_ERTS_PATH.
``Erlang_ERTS_LIBRARY_PATH``
/lib appended to Erlang_ERTS_PATH.
#]=======================================================================]
include(FindPackageHandleStandardArgs)
set(Erlang_BIN_PATH $ENV{ERLANG_HOME}/bin /opt/bin /sw/bin /usr/bin
/usr/local/bin /opt/local/bin
)
find_program(
Erlang_RUNTIME
NAMES erl
PATHS ${Erlang_BIN_PATH}
)
find_program(
Erlang_COMPILE
NAMES erlc
PATHS ${Erlang_BIN_PATH}
)
execute_process(
COMMAND erl -noshell -eval "io:format(\"~s\", [code:lib_dir()])" -s erlang
halt OUTPUT_VARIABLE Erlang_OTP_LIB_DIR
)
execute_process(
COMMAND erl -noshell -eval "io:format(\"~s\", [code:root_dir()])" -s erlang
halt OUTPUT_VARIABLE Erlang_OTP_ROOT_DIR
)
execute_process(
COMMAND
erl -noshell -eval
"io:format(\"~s\",[filename:basename(code:lib_dir('erl_interface'))])" -s
erlang halt
OUTPUT_VARIABLE Erlang_EI_DIR
)
execute_process(
COMMAND
erl -noshell -eval
"io:format(\"~s\",[filename:basename(code:lib_dir('erts'))])" -s erlang halt
OUTPUT_VARIABLE Erlang_ERTS_DIR
)
set(Erlang_EI_PATH ${Erlang_OTP_LIB_DIR}/${Erlang_EI_DIR})
set(Erlang_EI_INCLUDE_DIRS ${Erlang_OTP_LIB_DIR}/${Erlang_EI_DIR}/include)
set(Erlang_EI_LIBRARY_PATH ${Erlang_OTP_LIB_DIR}/${Erlang_EI_DIR}/lib)
set(Erlang_ERTS_PATH ${Erlang_OTP_ROOT_DIR}/${Erlang_ERTS_DIR})
set(Erlang_ERTS_INCLUDE_DIRS ${Erlang_OTP_ROOT_DIR}/${Erlang_ERTS_DIR}/include)
set(Erlang_ERTS_LIBRARY_PATH ${Erlang_OTP_ROOT_DIR}/${Erlang_ERTS_DIR}/lib)
find_package_handle_standard_args(
Erlang
DEFAULT_MSG
Erlang_RUNTIME
Erlang_COMPILE
Erlang_OTP_LIB_DIR
Erlang_OTP_ROOT_DIR
Erlang_EI_DIR
Erlang_ERTS_DIR
)
if(Erlang_FOUND)
if(NOT TARGET Erlang::Erlang)
add_library(Erlang::Erlang INTERFACE IMPORTED)
set_target_properties(
Erlang::Erlang PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
${Erlang_OTP_ROOT_DIR}/usr/include
)
endif()
if(NOT TARGET Erlang::ERTS)
add_library(Erlang::ERTS STATIC IMPORTED)
set_target_properties(
Erlang::ERTS
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${Erlang_ERTS_INCLUDE_DIRS}
IMPORTED_LOCATION ${Erlang_ERTS_LIBRARY_PATH}/liberts.a
)
endif()
if(NOT TARGET Erlang::EI)
add_library(erlang_ei STATIC IMPORTED)
set_property(
TARGET erlang_ei PROPERTY IMPORTED_LOCATION
${Erlang_EI_LIBRARY_PATH}/libei.a
)
add_library(erlang_erl_interface STATIC IMPORTED)
set_property(
TARGET erlang_erl_interface
PROPERTY IMPORTED_LOCATION ${Erlang_EI_LIBRARY_PATH}/liberl_interface.a
)
add_library(Erlang::EI INTERFACE IMPORTED)
set_property(
TARGET Erlang::EI PROPERTY INTERFACE_INCLUDE_DIRECTORIES
${Erlang_EI_INCLUDE_DIRS}
)
set_property(
TARGET Erlang::EI PROPERTY INTERFACE_LINK_LIBRARIES erlang_ei
erlang_erl_interface
)
endif()
endif(Erlang_FOUND)

@ -0,0 +1,119 @@
# https://github.com/KDE/kldap/blob/master/cmake/FindLdap.cmake
# .rst:
# FindLdap
# --------
#
# Try to find the LDAP client libraries.
#
# This will define the following variables:
#
# ``Ldap_FOUND``
# True if libldap is available.
#
# ``Ldap_VERSION``
# The version of libldap
#
# ``Ldap_INCLUDE_DIRS``
# This should be passed to target_include_directories() if
# the target is not used for linking
#
# ``Ldap_LIBRARIES``
# The LDAP libraries (libldap + liblber if available)
# This can be passed to target_link_libraries() instead of
# the ``Ldap::Ldap`` target
#
# If ``Ldap_FOUND`` is TRUE, the following imported target
# will be available:
#
# ``Ldap::Ldap``
# The LDAP library
#
# Since pre-5.0.0.
#
# Imported target since 5.1.41
#
#=============================================================================
# SPDX-FileCopyrightText: 2006 Szombathelyi György <gyurco@freemail.hu>
# SPDX-FileCopyrightText: 2007-2024 Laurent Montel <montel@kde.org>
#
# SPDX-License-Identifier: BSD-3-Clause
#=============================================================================
find_path(Ldap_INCLUDE_DIRS NAMES ldap.h)
if(APPLE)
find_library(
Ldap_LIBRARIES
NAMES LDAP
PATHS /System/Library/Frameworks /Library/Frameworks
)
else()
find_library(Ldap_LIBRARY NAMES ldap)
find_library(Lber_LIBRARY NAMES lber)
endif()
if(Ldap_LIBRARY AND Lber_LIBRARY)
set(Ldap_LIBRARIES ${Ldap_LIBRARY} ${Lber_LIBRARY})
endif()
if(EXISTS ${Ldap_INCLUDE_DIRS}/ldap_features.h)
file(READ ${Ldap_INCLUDE_DIRS}/ldap_features.h LDAP_FEATURES_H_CONTENT)
string(REGEX MATCH "#define LDAP_VENDOR_VERSION_MAJOR[ ]+[0-9]+"
_LDAP_VERSION_MAJOR_MATCH ${LDAP_FEATURES_H_CONTENT}
)
string(REGEX MATCH "#define LDAP_VENDOR_VERSION_MINOR[ ]+[0-9]+"
_LDAP_VERSION_MINOR_MATCH ${LDAP_FEATURES_H_CONTENT}
)
string(REGEX MATCH "#define LDAP_VENDOR_VERSION_PATCH[ ]+[0-9]+"
_LDAP_VERSION_PATCH_MATCH ${LDAP_FEATURES_H_CONTENT}
)
string(REGEX REPLACE ".*_MAJOR[ ]+(.*)" "\\1" LDAP_VERSION_MAJOR
${_LDAP_VERSION_MAJOR_MATCH}
)
string(REGEX REPLACE ".*_MINOR[ ]+(.*)" "\\1" LDAP_VERSION_MINOR
${_LDAP_VERSION_MINOR_MATCH}
)
string(REGEX REPLACE ".*_PATCH[ ]+(.*)" "\\1" LDAP_VERSION_PATCH
${_LDAP_VERSION_PATCH_MATCH}
)
set(Ldap_VERSION
"${LDAP_VERSION_MAJOR}.${LDAP_VERSION_MINOR}.${LDAP_VERSION_PATCH}"
)
endif()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(
Ldap
FOUND_VAR Ldap_FOUND
REQUIRED_VARS Ldap_LIBRARIES Ldap_INCLUDE_DIRS
VERSION_VAR Ldap_VERSION
)
if(Ldap_FOUND AND NOT TARGET Lber::Lber)
add_library(Lber::Lber UNKNOWN IMPORTED)
set_target_properties(
Lber::Lber PROPERTIES IMPORTED_LOCATION "${Lber_LIBRARY}"
)
endif()
if(Ldap_FOUND AND NOT TARGET Ldap::Ldap)
add_library(Ldap::Ldap UNKNOWN IMPORTED)
set_target_properties(
Ldap::Ldap
PROPERTIES IMPORTED_LOCATION "${Ldap_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${Ldap_INCLUDE_DIRS}"
INTERFACE_LINK_LIBRARIES Lber::Lber
)
endif()
mark_as_advanced(Ldap_INCLUDE_DIRS Ldap_LIBRARY Lber_LIBRARY Ldap_LIBRARIES)
include(FeatureSummary)
set_package_properties(
Ldap PROPERTIES
URL "https://www.openldap.org/"
DESCRIPTION "LDAP (Lightweight Directory Access Protocol) libraries."
)

@ -0,0 +1,60 @@
#[=======================================================================[.rst:
FindLibev
---------
Find the Libev library.
Imported targets
^^^^^^^^^^^^^^^^
This module defines the following :prop_tgt:`IMPORTED` targets:
``Libev::Libev``
The Libev library, if found.
Result variables
^^^^^^^^^^^^^^^^
This module will set the following variables in your project:
``Libev_FOUND``
If false, do not try to use Libev.
``LIBEV_INCLUDE_DIR``
where to find libev headers.
``LIBEV_LIBRARIES``
the libraries needed to use Libev.
``LIBEV_VERSION``
the version of the Libev library found
#]=======================================================================]
find_path(LIBEV_INCLUDE_DIR ev.h HINTS "${LIBEV_DIR}" "${LIBEV_DIR}/include")
find_library(
LIBEV_LIBRARY
NAMES ev libev
HINTS "${LIBEV_DIR}" "${LIBEV_DIR}/lib"
)
set(LIBEV_LIBRARIES "")
if(LIBEV_INCLUDE_DIR AND LIBEV_LIBRARY)
if(NOT TARGET Libev::Libev)
add_library(Libev::Libev UNKNOWN IMPORTED)
set_target_properties(
Libev::Libev
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${LIBEV_INCLUDE_DIR}"
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
IMPORTED_LOCATION "${LIBEV_LIBRARY}"
)
endif()
endif()
list(APPEND LIBEV_LIBRARIES "${LIBEV_LIBRARY}")
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(
Libev REQUIRED_VARS LIBEV_LIBRARIES LIBEV_INCLUDE_DIR
)
mark_as_advanced(LIBEV_INCLUDE_DIR LIBEV_LIBRARIES LIBEV_LIBRARY)

@ -0,0 +1,42 @@
# - Find freeradius-client
# Find the native freeradius-client includes and library.
# Once done this will define
#
# Target:
# LibfreeradiusClient::LIBFREERADIUS
# LibfreeradiusClient_INCLUDE_DIR(S) - where to find freeradius-client.h, etc.
# LibfreeradiusClient_LIBRARY(IES) - List of libraries when using libfreeradius.
# LibfreeradiusClient_FOUND - True if libfreeradius found.
find_path(LibfreeradiusClient_INCLUDE_DIR NAMES freeradius-client.h)
find_library(
LibfreeradiusClient_LIBRARY
NAMES freeradius-client freeradius-eap
PATH_SUFFIXES freeradius)
mark_as_advanced(LibfreeradiusClient_LIBRARY LibfreeradiusClient_INCLUDE_DIR)
# handle the QUIETLY and REQUIRED arguments and set LibfreeradiusClient_FOUND to TRUE if
# all listed variables are TRUE
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(
LibfreeradiusClient REQUIRED_VARS LibfreeradiusClient_LIBRARY
LibfreeradiusClient_INCLUDE_DIR)
if(LibfreeradiusClient_FOUND)
find_package_message(
LibfreeradiusClient "Found Libfreeradius: ${LibfreeradiusClient_LIBRARY}"
"[${LibfreeradiusClient_LIBRARY}][${LibfreeradiusClient_INCLUDE_DIR}]")
set(LibfreeradiusClient_INCLUDE_DIRS ${LibfreeradiusClient_INCLUDE_DIR})
set(LibfreeradiusClient_LIBRARIES ${LibfreeradiusClient_LIBRARY})
add_library(LibfreeradiusClient::LIBFREERADIUS UNKNOWN IMPORTED)
set_target_properties(
LibfreeradiusClient::LIBFREERADIUS
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
"${LibfreeradiusClient_INCLUDE_DIR}")
set_target_properties(
LibfreeradiusClient::LIBFREERADIUS
PROPERTIES IMPORTED_LOCATION "${LibfreeradiusClient_LIBRARY}")
endif()

@ -0,0 +1,68 @@
# https://github.com/viaduck/cmake-modules/blob/master/FindMariaDBClient.cmake
# MIT License
#
# Copyright (c) 2018 The ViaDuck Project
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
#
# - Try to find MariaDB client library. This matches both the "old" client library and the new C connector.
# Once found this will define
# MariaDBClient_FOUND - System has MariaDB client library
# MariaDBClient_INCLUDE_DIRS - The MariaDB client library include directories
# MariaDBClient_LIBRARIES - The MariaDB client library
# includes
find_path(
MariaDBClient_INCLUDE_DIR
NAMES mysql.h
PATH_SUFFIXES mariadb mysql
)
# library
set(BAK_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_SHARED_LIBRARY_SUFFIX})
find_library(
MariaDBClient_LIBRARY
NAMES mariadb libmariadb mariadbclient libmariadbclient mysqlclient
libmysqlclient
PATH_SUFFIXES mariadb mysql
)
set(CMAKE_FIND_LIBRARY_SUFFIXES ${BAK_CMAKE_FIND_LIBRARY_SUFFIXES})
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(
MariaDBClient DEFAULT_MSG MariaDBClient_LIBRARY MariaDBClient_INCLUDE_DIR
)
if(MariaDBClient_FOUND)
if(NOT TARGET MariaDBClient::MariaDBClient)
add_library(MariaDBClient::MariaDBClient UNKNOWN IMPORTED)
set_target_properties(
MariaDBClient::MariaDBClient
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${MariaDBClient_INCLUDE_DIR}"
IMPORTED_LOCATION "${MariaDBClient_LIBRARY}"
)
endif()
endif()
mark_as_advanced(MariaDBClient_INCLUDE_DIR MariaDBClient_LIBRARY)
set(MariaDBClient_LIBRARIES ${MariaDBClient_LIBRARY})
set(MariaDBClient_INCLUDE_DIRS ${MariaDBClient_INCLUDE_DIR})

@ -0,0 +1,964 @@
# -*- indent-tabs-mode:nil; -*-
# vim: set expandtab:
#
# Copyright (c) 2011, 2024, Oracle and/or its affiliates.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0, as
# published by the Free Software Foundation.
#
# This program is designed to work with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms, as
# designated in a particular file or component or in included license
# documentation. The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have either included with
# the program or referenced in the documentation.
#
# Without limiting anything contained in the foregoing, this file,
# which is part of Connector/ODBC, is also subject to the
# Universal FOSS Exception, version 1.0, a copy of which can be found at
# https://oss.oracle.com/licenses/universal-foss-exception.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License, version 2.0, 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 Foundation, Inc.,
# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
##########################################################################
##########################################################################
#
# Configuration variables, all optional, are
#
# MYSQL_DIR - Set in environment or as parameter to "cmake",
# this is the top directory of the MySQL Server or
# Connector/C install
# MYSQL_INCLUDE_DIR - Set in environment or as parameter to "cmake",
# this is the include directory where to find
# the client library
# MYSQL_LIB_DIR - Set in environment or as parameter to "cmake",
# this is the library directory where to find
# the client library
# MYSQLCLIENT_STATIC_LINKING
# - Specify that you want static linking, dynamic
# linking is the default
# MYSQLCLIENT_NO_THREADS
# - Specify to link against the single threaded
# library, "libmysqlclient". Note that in 5.5
# and up "libmysqlclient" is multithreaded and
# "libmysqlclient_r" just a soft link to it
# MYSQL_CONFIG_EXECUTABLE
# - "mysql_config" executable to use
# MYSQL_CXX_LINKAGE - Specify that client library needs C++ linking
# MYSQL_EXTRA_LIBRARIES
# - Libraries to add to the linkage
# MYSQL_CFLAGS - C compiler flags
# MYSQL_CXXFLAGS - C++ compiler flags
# MYSQL_LINK_FLAGS - User defined extra linkage flags
# FINDMYSQL_DEBUG - Set if want debug output from this script
#
# Note that most variables above, if not set by the user they will be
# set by this include file.
#
# In addition, the below CMake variables are set by this include file
#
# MYSQL_VERSION - Three position numeric version, like 5.6.41
# MYSQL_VERSION_ID - Numeric padded version, 5.13.4 => 51304
# MYSQL_NUM_VERSION - Same as MYSQL_VERSION_ID, for compatibility
# MYSQL_LIB - Path to the client library
# MYSQL_LIBRARIES - Library name, might be "-lmysqlclient" while
# MYSQL_LIB is the path to the library
# MYSQL_CLIENT_LIBS - Same as MYSQL_LIBRARIES, for compatibility
#
# (1) If MYSQL_INCLUDE_DIR or MYSQL_LIB_DIR are given, these are
# used and an error is reported if can't be used
# (2) If MYSQL_CONFIG_EXECUTABLE is given, it is used to get
# headers and libraries
# (3) If MYSQL_DIR is given and "${MYSQL_DIR}/bin/mysql_config" is
# found, then same as (2)
# (4) If MYSQL_DIR is given and no "${MYSQL_DIR}/bin/mysql_config",
# search MYSQL_DIR
#
# FIXME if we get a "mysql_config" on Windows, things needs to change
# FIXME rename the VERSION variables above
# FIXME let MYSQL_VERSION include "-beta" etc?
# FIXME can mysql_config --version be C/C verson?
# FIXME if no mysql_config, find version from include/mysql_version.h?
# #define MYSQL_SERVER_VERSION "5.7.5-m15"
# #define MYSQL_VERSION_ID 50705
# #define LIBMYSQL_VERSION "6.1.5"
# #define LIBMYSQL_VERSION_ID 60105
# FIXME can MYSQL_LIB_DIR be a list of paths?
# FIXME is MYSQLCLIENT_LIBS a better name?
# FIXME cache variables, makes them command line args?
# FIXME really do include_directories() and link_directories()? Likely
# FIXME add check that if not static, not picked up .a or mysqlclient.lib
# FIXME MYSQL_VERSION_ID need to take into account Cluster versions
# and Connector/C versions
# FIXME handle MYSQL_VERSION_ID, LIBMYSQL_VERSION and LIBMYSQL_VERSION_ID?
#
##########################################################################
##########################################################################
#
# Check the input data
#
##########################################################################
# If using both MYSQL_DIR as a cmake argument and set in environment,
# and not empty strings, they better be the same. Else stop and complain
set(ENV_OR_OPT_VARS
MYSQL_DIR
MYSQL_INCLUDE_DIR
MYSQL_LIB_DIR
MYSQL_LIB_DIR_LIST
MYSQL_PLUGIN_DIR
MYSQL_CFLAGS
MYSQL_CXXFLAGS
MYSQL_CONFIG_EXECUTABLE
MYSQLCLIENT_STATIC_LINKING
MYSQLCLIENT_NO_THREADS
MYSQL_CXX_LINKAGE
MYSQL_EXTRA_LIBRARIES
MYSQL_LINK_FLAGS
)
# Mark the variable names that have values that are paths
set(ENV_OR_OPT_PATH_VARS MYSQL_DIR MYSQL_INCLUDE_DIR MYSQL_LIB_DIR
MYSQL_PLUGIN_DIR
)
foreach(_xvar ${ENV_OR_OPT_VARS})
if((DEFINED ${_xvar})
AND (DEFINED ENV{${_xvar}})
AND (NOT "${${_xvar}}" STREQUAL "")
AND (NOT "$ENV{${_xvar}}" STREQUAL "")
AND (NOT "$ENV{${_xvar}}" STREQUAL "${${_xvar}}")
)
message(FATAL_ERROR "Please pass -D${_xvar}=... as an argument or "
"set ${_xvar} in the environment, but not both"
)
endif()
# Now we know both are not set, set the CMake variable if needed
if((DEFINED ENV{${_xvar}}) AND (NOT "$ENV{${_xvar}}" STREQUAL ""))
set(${_xvar} $ENV{${_xvar}})
endif()
# Notmalize the path if the variable is set and is a path
if(${_xvar})
list(FIND ENV_OR_OPT_PATH_VARS ${_xvar} _index)
if(${_index} GREATER -1)
file(TO_CMAKE_PATH "${${_xvar}}" ${_xvar})
get_filename_component(${_xvar} ${${_xvar}} ABSOLUTE)
endif()
endif()
endforeach()
# Bail out if both MYSQL_DIR/MYSQL_CONFIG_EXECUTABLE and MYSQL_INCLUDE/LIB_DIR
# were given
if(MYSQL_DIR AND (MYSQL_INCLUDE_DIR OR MYSQL_LIB_DIR))
message(
FATAL_ERROR
"Both MYSQL_DIR and MYSQL_INCLUDE_DIR/MYSQL_LIB_DIR were specified,"
" use either one or the other way of pointing at MySQL location."
)
endif()
if(MYSQL_CONFIG_EXECUTABLE AND (MYSQL_INCLUDE_DIR OR MYSQL_LIB_DIR))
message(
FATAL_ERROR
"Both MYSQL_CONFIG_EXECUTABLE and MYSQL_INCLUDE_DIR/MYSQL_LIB_DIR were specified,"
" mixing settings detected with mysql_config and manually set by variables"
" is not supported and would confuse our build logic."
)
endif()
if(MYSQL_CONFIG_EXECUTABLE)
set(_mysql_config_set_by_user 1)
else()
# If MYSQL_DIR is set, set MYSQL_CONFIG_EXECUTABLE
if((NOT WIN32)
AND (DEFINED MYSQL_DIR)
AND (EXISTS "${MYSQL_DIR}/bin/mysql_config")
)
set(MYSQL_CONFIG_EXECUTABLE "${MYSQL_DIR}/bin/mysql_config")
set(_mysql_config_in_mysql_dir 1)
endif()
endif()
##########################################################################
#
# Data and basic settings
#
##########################################################################
# Set sub directory to search in
# dist = for mysql binary distributions
# build = for custom built tree
if(CMAKE_BUILD_TYPE STREQUAL Debug)
set(_lib_suffix_dist debug)
set(_lib_suffix_build Debug)
else()
set(_lib_suffix_dist opt)
set(_lib_suffix_build Release)
add_definitions(-DNDEBUG) # FIXME what?!
endif()
set(_exe_fallback_path /usr/bin /usr/local/bin /opt/mysql/mysql/bin
/usr/local/mysql/bin
)
set(_include_fallback_path
/usr/include/mysql
/usr/local/include/mysql
/opt/mysql/mysql/include
/opt/mysql/mysql/include/mysql
/usr/local/mysql/include
/usr/local/mysql/include/mysql
$ENV{ProgramFiles}/MySQL/*/include
$ENV{SystemDrive}/MySQL/*/include
)
set(_lib_fallback_path
/usr/lib/mysql
/usr/local/lib/mysql
/usr/local/mysql/lib
/usr/local/mysql/lib/mysql
/opt/mysql/mysql/lib
/opt/mysql/mysql/lib/mysql
$ENV{ProgramFiles}/MySQL/*/lib/${_lib_suffix_dist}
$ENV{ProgramFiles}/MySQL/*/lib
$ENV{SystemDrive}/MySQL/*/lib/${_lib_suffix_dist}
$ENV{SystemDrive}/MySQL/*/lib
)
set(_lib_subdirs
# Paths in build tree, really being too nice
libmysql/${_lib_suffix_build}
client/${_lib_suffix_build}
libmysql_r/.libs
libmysql/.libs
libmysql
# Install sub directories
lib/mysql
lib/${_lib_suffix_dist} # Need to be before "lib"
lib
)
set(_static_subdirs mysql ${_lib_suffix_dist})
if(MSVC90)
set(_vs_subdir vs9)
elseif(MSVC10)
set(_vs_subdir vs10)
elseif(MSVC11)
set(_vs_subdir vs11)
elseif(MSVC12)
set(_vs_subdir vs12)
elseif(MSVC13)
set(_vs_subdir vs13)
elseif(MSVC14)
set(_vs_subdir vs14)
elseif(MSVC15)
set(_vs_subdir vs15)
endif()
if(_vs_subdir)
if("${_lib_suffix_dist}" STREQUAL "debug")
set(_vs_subdir "${_vs_subdir}/debug")
endif()
list(INSERT _lib_subdirs 0 "lib/${_vs_subdir}")
endif()
# For Windows, the client library name differs, so easy to
# make sure find_library() picks the right one. For Unix, it
# is the file extension that differs. In the static library
# case we know it is ".a", so we add it to the library name
# we search for to make sure it is picked in the static case.
if(WIN32)
set(_dynamic_libs "libmysql")
set(_static_libs "mysqlclient")
set(_static_lib_ext ".lib") # Careful, can be import library for DLL
elseif(MYSQLCLIENT_NO_THREADS)
# In 5.1 and below there is a single threaded library
set(_dynamic_libs "mysqlclient")
set(_static_libs "libmysqlclient.a")
set(_static_lib_ext ".a")
else()
# We try the multithreaded "libmysqlclient_r" first and if not
# there, pick "libmysqlclient" that in 5.5 and up is multithreaded
# anyway (soft link "libmysqlclient_r" is not installed MySQL Server
# 5.6 and Debian/Ubuntu and might go in 5.7 for all installs)
set(_dynamic_libs "mysqlclient_r" "mysqlclient")
set(_static_libs "libmysqlclient_r.a" "libmysqlclient.a")
set(_static_lib_ext ".a")
endif()
if(MYSQLCLIENT_STATIC_LINKING)
set(_link_type "static")
set(_search_libs ${_static_libs})
else()
set(_link_type "dynamic")
set(_search_libs ${_dynamic_libs})
endif()
# Just to pretty print in error messages
string(REPLACE ";" " " _pp_search_libs "${_search_libs}")
string(REPLACE ";" " " _pp_lib_subdirs "${_lib_subdirs}")
string(REPLACE ";" " " _pp_lib_fallback_path "${_lib_fallback_path}")
string(REPLACE ";" " " _pp_include_fallback_path "${_include_fallback_path}")
message(STATUS "You will link ${_link_type}ally to the MySQL client"
" library (set with -DMYSQLCLIENT_STATIC_LINKING=<bool>)"
)
message(
STATUS
"Searching for ${_link_type} libraries with the base name(s) \"${_pp_search_libs}\""
)
##########################################################################
#
# Macros
#
##########################################################################
# ----------------------------------------------------------------------
#
# Macro that runs "mysql_config ${_opt}" and return the line after
# trimming away ending space/newline.
#
# _mysql_conf(
# _var - output variable name, will contain a ';' separated list
# _opt - the flag to give to mysql_config
#
# ----------------------------------------------------------------------
macro(_mysql_conf _var _opt)
execute_process(
COMMAND ${MYSQL_CONFIG_EXECUTABLE} ${_opt}
OUTPUT_VARIABLE ${_var}
OUTPUT_STRIP_TRAILING_WHITESPACE
)
endmacro()
# ----------------------------------------------------------------------
#
# Macro that runs "mysql_config ${_opt}", selects output args using a
# regex, and clean it up a bit removing space/tab/newline before
# setting it to a variable.
#
# _mysql_config(
# _var - output variable name, will contain a ';' separated list
# _regex - regular expression matching the prefix of args to select
# _opt - the flag to give to mysql_config
#
# ----------------------------------------------------------------------
macro(_mysql_config _var _regex _opt)
_mysql_conf(_mysql_config_output ${_opt})
string(REGEX MATCHALL "${_regex}([^ ]+)" _mysql_config_output
"${_mysql_config_output}"
)
string(REGEX REPLACE "^[ \t]+" "" _mysql_config_output
"${_mysql_config_output}"
)
if(CMAKE_SYSTEM_NAME MATCHES "SunOS")
string(REGEX REPLACE " -latomic" "" _mysql_config_output
"${_mysql_config_output}"
)
endif()
string(REGEX REPLACE "${_regex}" "" _mysql_config_output
"${_mysql_config_output}"
)
separate_arguments(_mysql_config_output)
set(${_var} ${_mysql_config_output})
endmacro()
# ----------------------------------------------------------------------
#
# Macro that runs "mysql_config ${_opt}" and selects output using a
# prefix regex. Cleans it up a bit removing space/tab/newline. Then
# removes the prefix on all in the list, and finally replace what
# matches another regular expression with a replacement string.
#
# _mysql_config_replace(
# _var - output variable name, will contain a ';' separated list
# _regex1 - regular expression to match out arguments
# _replace - what to replace match _regex1 with
# _regex2 - regular expression matching the prefix of args to select
# _opt - the flag to give to mysql_config
#
# ----------------------------------------------------------------------
macro(_mysql_config_replace _var _regex1 _replace _regex2 _opt)
_mysql_conf(_mysql_config_output ${_opt})
string(REGEX MATCHALL "${_regex2}([^ ]+)" _mysql_config_output
"${_mysql_config_output}"
)
string(REGEX REPLACE "^[ \t]+" "" _mysql_config_output
"${_mysql_config_output}"
)
if(CMAKE_SYSTEM_NAME MATCHES "SunOS")
string(REGEX REPLACE " -latomic" "" _mysql_config_output
"${_mysql_config_output}"
)
endif()
string(REGEX REPLACE "${_regex2}" "" _mysql_config_output
"${_mysql_config_output}"
)
string(REGEX REPLACE "${_regex1}" "${_replace}" _mysql_config_output
"${_mysql_config_output}"
)
separate_arguments(_mysql_config_output)
set(${_var} ${_mysql_config_output})
endmacro()
# ----------------------------------------------------------------------
#
# Macro to check that we found a library and that we got the right type
#
# ----------------------------------------------------------------------
macro(_check_lib_search_error _lib_dir_var _lib_var _exta_err_string)
set(_lib "${${_lib_var}}")
set(_lib_dir "${${_lib_dir_var}}")
if(FINDMYSQL_DEBUG)
message("_lib \"${_lib}\"")
message("_lib_dir \"${_lib_dir}\"")
message("_lib_var \"${_lib_var}\"")
message("_lib_dir_var \"${_lib_dir_var}\"")
endif()
set(_err_string
"Could not find ${_link_type} "
"\"${_pp_search_libs}\" in ${_lib_dir_var} "
"\"${_lib_dir}\" ${_exta_err_string}"
)
if(NOT ${_lib_var})
message(FATAL_ERROR ${_err_string})
endif()
# find_library() try find a shared library first, then a static
# one. For Windows the library has a different name, but for
# Unix only the extension differs. So we check here that we
# got the library kind we expected.
if(NOT WIN32)
if(NOT MYSQLCLIENT_STATIC_LINKING)
get_filename_component(_ext ${_lib} EXT)
if(${_ext} STREQUAL ${_static_lib_ext})
message(FATAL_ERROR ${_err_string})
endif()
endif()
endif()
endmacro()
##########################################################################
#
# Try find MYSQL_CONFIG_EXECUTABLE if not set, and find version
#
##########################################################################
if(NOT WIN32)
if(NOT MYSQL_CONFIG_EXECUTABLE)
find_program(
MYSQL_CONFIG_EXECUTABLE
NAMES mysql_config
DOC "full path of mysql_config"
PATHS ${_exe_fallback_path}
)
endif()
if(MYSQL_CONFIG_EXECUTABLE)
message(STATUS "mysql_config was found ${MYSQL_CONFIG_EXECUTABLE}")
_mysql_conf(MYSQL_VERSION "--version")
endif()
endif()
##########################################################################
#
# Find MYSQL_INCLUDE_DIR
#
##########################################################################
if(FINDMYSQL_DEBUG AND MYSQL_INCLUDE_DIR)
message("DBG: User gave MYSQL_INCLUDE_DIR = \"${MYSQL_INCLUDE_DIR}\"")
endif()
if(FINDMYSQL_DEBUG AND MYSQL_DIR)
message("DBG: User gave MYSQL_DIR = \"${MYSQL_DIR}\"")
endif()
if(MYSQL_INCLUDE_DIR)
if(FINDMYSQL_DEBUG)
message("DBG: Using MYSQL_INCLUDE_DIR to find \"mysql.h\"")
endif()
if(NOT EXISTS "${MYSQL_INCLUDE_DIR}/mysql.h")
message(FATAL_ERROR "MYSQL_INCLUDE_DIR given, but no \"mysql.h\" "
"in \"${MYSQL_INCLUDE_DIR}\""
)
endif()
elseif(
MYSQL_DIR
AND (NOT _mysql_config_in_mysql_dir)
AND (NOT _mysql_config_set_by_user)
)
if(FINDMYSQL_DEBUG)
message("DBG: Using MYSQL_DIR without \"mysql_config\" to find \"mysql.h\"")
endif()
set(MYSQL_INCLUDE_DIR "${MYSQL_DIR}/include")
if(NOT EXISTS "${MYSQL_INCLUDE_DIR}/mysql.h")
message(FATAL_ERROR "MYSQL_DIR given, but no \"mysql.h\" "
"in \"${MYSQL_INCLUDE_DIR}\""
)
endif()
elseif(MYSQL_CONFIG_EXECUTABLE)
if(FINDMYSQL_DEBUG)
message("DBG: Using \"mysql_config\" to find \"mysql.h\"")
endif()
# This code assumes there is just one "-I...." and that
# no space between "-I" and the path
_mysql_config(MYSQL_INCLUDE_DIR "(^| )-I" "--include")
if(NOT MYSQL_INCLUDE_DIR)
message(FATAL_ERROR "Could not find the include dir from running "
"\"${MYSQL_CONFIG_EXECUTABLE}\""
)
endif()
if(NOT EXISTS "${MYSQL_INCLUDE_DIR}/mysql.h")
message(
FATAL_ERROR "Could not find \"mysql.h\" in \"${MYSQL_INCLUDE_DIR}\" "
"found from running \"${MYSQL_CONFIG_EXECUTABLE}\""
)
endif()
else()
if(FINDMYSQL_DEBUG)
message("DBG: Using find_path() searching "
"\"${_pp_include_fallback_path}\" to find \"mysql.h\""
)
endif()
# No specific paths, try some common install paths
find_path(MYSQL_INCLUDE_DIR mysql.h ${_include_fallback_path})
if(NOT MYSQL_INCLUDE_DIR)
message(FATAL_ERROR "Could not find \"mysql.h\" from searching "
"\"${_pp_include_fallback_path}\""
)
endif()
endif()
if(FINDMYSQL_DEBUG)
message("DBG: MYSQL_INCLUDE_DIR = \"${MYSQL_INCLUDE_DIR}\"")
endif()
##########################################################################
#
# Find MYSQL_LIB_DIR, MYSQL_LIB, MYSQL_PLUGIN_DIR and MYSQL_LIBRARIES
#
##########################################################################
if(FINDMYSQL_DEBUG AND MYSQL_LIB_DIR)
message("DBG: User gave MYSQL_LIB_DIR = \"${MYSQL_LIB_DIR}\"")
endif()
if(MYSQL_LIB_DIR)
if(FINDMYSQL_DEBUG)
message("DBG: Using find_library() searching MYSQL_LIB_DIR")
endif()
find_library(
MYSQL_LIB
NAMES ${_search_libs}
PATHS "${MYSQL_LIB_DIR}"
NO_DEFAULT_PATH
)
_check_lib_search_error(MYSQL_LIB_DIR MYSQL_LIB "")
set(MYSQL_LIBRARIES ${MYSQL_LIB})
if(NOT DEFINED MYSQL_PLUGIN_DIR)
set(MYSQL_PLUGIN_DIR "${MYSQL_LIB_DIR}/plugin")
endif()
elseif(
MYSQL_DIR
AND (NOT _mysql_config_in_mysql_dir)
AND (NOT _mysql_config_set_by_user)
)
if(FINDMYSQL_DEBUG)
message("DBG: Using find_library() searching "
"MYSQL_DIR and \"${_pp_lib_subdirs}\""
)
endif()
find_library(
MYSQL_LIB
NAMES ${_search_libs}
PATHS "${MYSQL_DIR}"
PATH_SUFFIXES ${_lib_subdirs}
NO_DEFAULT_PATH
)
_check_lib_search_error(MYSQL_DIR MYSQL_LIB "in \"${_pp_lib_subdirs}\"")
get_filename_component(MYSQL_LIB_DIR "${MYSQL_LIB}" PATH)
set(MYSQL_LIBRARIES "${MYSQL_LIB}")
if(((NOT DEFINED MYSQL_PLUGIN_DIR) OR (NOT ${MYSQL_PLUGIN_DIR}))
AND MYSQL_LIB_DIR
)
if(EXISTS "${MYSQL_LIB_DIR}/plugin")
set(MYSQL_PLUGIN_DIR "${MYSQL_LIB_DIR}/plugin")
else()
# FIXME: If directory does not exist it must be a debug dir layout
if(EXISTS "${MYSQL_LIB_DIR}/../plugin/")
set(MYSQL_PLUGIN_DIR "${MYSQL_LIB_DIR}/../plugin")
endif()
endif()
endif()
elseif(MYSQL_CONFIG_EXECUTABLE)
if(FINDMYSQL_DEBUG)
message("DBG: Using \"mysql_config\" to find the libraries")
endif()
# This code assumes there is just one "-L...." and that
# no space between "-L" and the path
_mysql_config(MYSQL_LIB_DIR "(^| )-L" "--libs")
# Note: Allow overriding plugin dir reported by mysql_config because
# that can be wrong sometimes
if(NOT MYSQL_PLUGIN_DIR)
_mysql_conf(MYSQL_PLUGIN_DIR "--variable=plugindir")
endif()
if(CMAKE_SYSTEM_NAME MATCHES "SunOS")
# This is needed to make Solaris binaries using the default runtime lib path
_mysql_config(DEV_STUDIO_RUNTIME_DIR "(^| )-R" "--libs")
endif()
list(LENGTH MYSQL_LIB_DIR dir_cnt)
message(STATUS "Libraries paths found: ${n}")
if(${dir_cnt} GREATER 1)
set(MYSQL_LIB_DIR_LIST ${MYSQL_LIB_DIR})
message(STATUS "MYSQL_LIB_DIR_LIST = ${MYSQL_LIB_DIR_LIST}")
foreach(_path_to_check IN LISTS MYSQL_LIB_DIR)
find_library(
_mysql_client_lib_var
NAMES ${_search_libs}
PATHS ${_path_to_check}
NO_DEFAULT_PATH
)
if(_mysql_client_lib_var)
message(STATUS "CLIENT LIB VAR: ${_mysql_client_lib_var}")
unset(_mysql_client_lib_var CACHE)
set(MYSQL_LIB_DIR ${_path_to_check})
endif()
endforeach(_path_to_check)
endif()
if(NOT MYSQL_LIB_DIR)
message(FATAL_ERROR "Could not find the library dir from running "
"\"${MYSQL_CONFIG_EXECUTABLE}\""
)
endif()
if(NOT EXISTS "${MYSQL_LIB_DIR}")
message(FATAL_ERROR "Could not find the directory \"${MYSQL_LIB_DIR}\" "
"found from running \"${MYSQL_CONFIG_EXECUTABLE}\""
)
endif()
# We have the assumed MYSQL_LIB_DIR. The output from "mysql_config"
# might not be correct for static libraries, so we might need to
# adjust MYSQL_LIB_DIR later on.
if(MYSQLCLIENT_STATIC_LINKING)
# Find the static library, might be one level down
find_library(
MYSQL_LIB
NAMES ${_search_libs}
PATHS ${MYSQL_LIB_DIR}
PATH_SUFFIXES ${_static_subdirs}
NO_DEFAULT_PATH
)
_check_lib_search_error(MYSQL_LIB_DIR MYSQL_LIB "in \"${_static_subdirs}\"")
# Adjust MYSQL_LIB_DIR in case it changes
get_filename_component(MYSQL_LIB_DIR "${MYSQL_LIB}" PATH)
# Replace the current library references with the full path
# to the library, i.e. the -L will be ignored
_mysql_config_replace(
MYSQL_LIBRARIES "(mysqlclient|mysqlclient_r)" "${MYSQL_LIB}" "(^| )-l"
"--libs"
)
else()
_mysql_config(MYSQL_LIBRARIES "(^| )-l" "--libs")
foreach(__lib IN LISTS MYSQL_LIBRARIES)
string(REGEX MATCH "mysqlclient([^ ]*)" _matched_lib __lib)
if(_matched_lib)
set(_search_libs ${matched_lib})
endif()
endforeach()
# First library is assumed to be the client library
# list(GET MYSQL_LIBRARIES 0 _search_libs)
find_library(
MYSQL_LIB
NAMES ${_search_libs}
PATHS ${MYSQL_LIB_DIR}
NO_DEFAULT_PATH
)
_check_lib_search_error(MYSQL_LIB_DIR MYSQL_LIB "")
endif()
else()
if(FINDMYSQL_DEBUG)
message("DBG: Using find_library() searching "
"\"${_pp_lib_fallback_path}\" to find the client library"
)
endif()
# Search standard places
find_library(
MYSQL_LIB
NAMES ${_search_libs}
PATHS ${_lib_fallback_path}
)
if(NOT MYSQL_LIB)
message(FATAL_ERROR "Could not find \"${_pp_search_libs}\" from searching "
"\"${_pp_lib_fallback_path}\""
)
endif()
get_filename_component(MYSQL_LIB_DIR "${MYSQL_LIB}" PATH)
endif()
##########################################################################
#
# Add more libraries to MYSQL_LIBRARIES
#
##########################################################################
# FIXME needed?!
if(MYSQLCLIENT_STATIC_LINKING
AND NOT WIN32
AND NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin"
)
list(APPEND MYSQL_LIBRARIES "rt")
endif()
# The built-in sys and strings are used for static and dynamic linking.
list(APPEND SYS_LIBRARIES "mysql_sys")
list(APPEND SYS_LIBRARIES "mysql_strings")
list(APPEND SYS_LIBRARIES ${MYSQL_LIBRARIES})
set(MYSQL_LIBRARIES ${SYS_LIBRARIES})
if(MYSQL_EXTRA_LIBRARIES)
separate_arguments(MYSQL_EXTRA_LIBRARIES)
list(APPEND MYSQL_LIBRARIES ${MYSQL_EXTRA_LIBRARIES})
endif()
list(LENGTH MYSQL_LIBRARIES len)
if(MYSQL_STATIC_LINKING AND (len LESS 2))
message(
WARNING
"Statically linking MySQL client library normally requires linking"
" additional libraries that the client library depends on. It seems"
" no extra libraries have been specified. Provide the list of required"
" dependencies through MYSQL_EXTRA_LIBRARIES."
)
endif()
# For compatibility
set(MYSQL_CLIENT_LIBS ${MYSQL_LIBRARIES})
##########################################################################
#
# If not found MySQL Serverv version, compile a small client app
# and let it write a small cmake file with the settings
#
##########################################################################
if(MYSQL_INCLUDE_DIR AND NOT MYSQL_VERSION)
# Write the C source file that will include the MySQL headers
set(GETMYSQLVERSION_SOURCEFILE
"${CMAKE_CURRENT_BINARY_DIR}/getmysqlversion.c"
)
file(WRITE "${GETMYSQLVERSION_SOURCEFILE}"
"#include <mysql.h>\n" "#include <stdio.h>\n" "int main() {\n"
" printf(\"%s\", MYSQL_SERVER_VERSION);\n" "}\n"
)
# Compile and run the created executable, store output in MYSQL_VERSION
try_run(
_run_result _compile_result "${CMAKE_BINARY_DIR}"
"${GETMYSQLVERSION_SOURCEFILE}"
CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:STRING=${MYSQL_INCLUDE_DIR}"
RUN_OUTPUT_VARIABLE MYSQL_VERSION
)
if(FINDMYSQL_DEBUG)
if(NOT _compile_result)
message("DBG: Could not compile \"getmysqlversion.c\"")
endif()
if(_run_result)
message("DBG: Running \"getmysqlversion\" returned ${_run_result}")
endif()
endif()
endif()
##########################################################################
#
# Clean up MYSQL_VERSION and create MYSQL_VERSION_ID/MYSQL_NUM_VERSION
#
##########################################################################
if(NOT MYSQL_VERSION)
message(FATAL_ERROR "Could not determine the MySQL Server version")
endif()
# Clean up so only numeric, in case of "-alpha" or similar
string(REGEX MATCHALL "([0-9]+.[0-9]+.[0-9]+)" MYSQL_VERSION "${MYSQL_VERSION}")
# To create a fully numeric version, first normalize so N.NN.NN
string(REGEX REPLACE "[.]([0-9])[.]" ".0\\1." MYSQL_VERSION_ID
"${MYSQL_VERSION}"
)
string(REGEX REPLACE "[.]([0-9])$" ".0\\1" MYSQL_VERSION_ID
"${MYSQL_VERSION_ID}"
)
# Finally remove the dot
string(REGEX REPLACE "[.]" "" MYSQL_VERSION_ID "${MYSQL_VERSION_ID}")
set(MYSQL_NUM_VERSION ${MYSQL_VERSION_ID})
##########################################################################
#
# Try determine if to use C++ linkage, and also find C++ flags
#
##########################################################################
if(NOT WIN32)
if(MYSQL_CONFIG_EXECUTABLE)
if(NOT MYSQL_CFLAGS)
_mysql_conf(MYSQL_CFLAGS "--cflags")
endif()
if(NOT MYSQL_CXXFLAGS)
if(MYSQL_CXX_LINKAGE OR MYSQL_VERSION_ID GREATER 50603)
_mysql_conf(MYSQL_CXXFLAGS "--cxxflags")
set(MYSQL_CXX_LINKAGE 1)
else()
set(MYSQL_CXXFLAGS "${MYSQL_CFLAGS}")
endif()
endif()
# FIXME this should not be needed, caller of this module should set
# it's own flags and just use the library on it's on terms
# (change the infe message if enabling this code)
# if(NOT MYSQL_LINK_FLAGS)
# # Find -mcpu -march -mt -m32 -m64 and other flags starting with "-m"
# string(REGEX MATCHALL "(^| )-m([^\r\n ]+)" MYSQL_LINK_FLAGS "${MYSQL_CXXFLAGS}")
# string(REGEX REPLACE "^ " "" MYSQL_LINK_FLAGS "${MYSQL_LINK_FLAGS}")
# string(REGEX REPLACE "; " ";" MYSQL_LINK_FLAGS "${MYSQL_LINK_FLAGS}")
# endif()
endif()
endif()
##########################################################################
#
# Inform CMake where to look for headers and libraries
#
##########################################################################
# string(TOUPPER "${CMAKE_BUILD_TYPE}" CMAKEBT)
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MYSQL_CXXFLAGS}")
# set(CMAKE_CXX_FLAGS_${CMAKEBT} "${CMAKE_CXX_FLAGS_${CMAKEBT}} ${MYSQL_CXXFLAGS}")
include_directories("${MYSQL_INCLUDE_DIR}")
link_directories("${MYSQL_LIB_DIR}")
message(STATUS "MYSQL_LIB_DIR_LIST = ${MYSQL_LIB_DIR_LIST}")
if(MYSQL_LIB_DIR_LIST)
foreach(__libpath IN LISTS MYSQL_LIB_DIR_LIST)
link_directories("${__libpath}")
endforeach()
endif()
##########################################################################
#
# Report
#
##########################################################################
message(
STATUS
"MySQL client environment/cmake variables set that the user can override"
)
message(STATUS " MYSQL_DIR : ${MYSQL_DIR}")
message(STATUS " MYSQL_INCLUDE_DIR : ${MYSQL_INCLUDE_DIR}")
message(STATUS " MYSQL_LIB_DIR : ${MYSQL_LIB_DIR}")
message(STATUS " MYSQL_PLUGIN_DIR : ${MYSQL_PLUGIN_DIR}")
message(STATUS " MYSQL_CONFIG_EXECUTABLE : ${MYSQL_CONFIG_EXECUTABLE}")
message(STATUS " MYSQL_CXX_LINKAGE : ${MYSQL_CXX_LINKAGE}")
message(STATUS " MYSQL_CFLAGS : ${MYSQL_CFLAGS}")
message(STATUS " MYSQL_CXXFLAGS : ${MYSQL_CXXFLAGS}")
message(STATUS " MYSQLCLIENT_STATIC_LINKING : ${MYSQLCLIENT_STATIC_LINKING}")
message(STATUS " MYSQLCLIENT_NO_THREADS : ${MYSQLCLIENT_NO_THREADS}")
message(
STATUS "MySQL client optional environment/cmake variables set by the user"
)
message(STATUS " MYSQL_EXTRA_LIBRARIES : ${MYSQL_EXTRA_LIBRARIES}")
message(STATUS " MYSQL_LINK_FLAGS : ${MYSQL_LINK_FLAGS}")
message(STATUS "MySQL client settings that the user can't override")
message(STATUS " MYSQL_VERSION : ${MYSQL_VERSION}")
message(STATUS " MYSQL_VERSION_ID : ${MYSQL_VERSION_ID}")
message(STATUS " MYSQL_LIB : ${MYSQL_LIB}")
message(STATUS " MYSQL_LIBRARIES : ${MYSQL_LIBRARIES}")

@ -0,0 +1,82 @@
# https://fossies.org/linux/syslog-ng/cmake/Modules/FindNETSNMP.cmake
#############################################################################
# Copyright (c) 2019 Balabit
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
# As an additional exemption you are allowed to compile & link against the
# OpenSSL libraries as published by the OpenSSL project. See the file
# COPYING for details.
#
#############################################################################
# - Try to find the net-snmp library
# Once done this will define
#
# NETSNMP_FOUND - system has the net-snmp library
# NETSNMP_CFLAGS -
# NETSNMP_LIBS - the libraries needed to use net-snmp
#
if(NETSNMP_LIBS)
# Already in cache, be silent
set(NETSNMP_FIND_QUIETLY TRUE)
endif(NETSNMP_LIBS)
find_program(NETSNMP_CONFIG_BIN net-snmp-config)
if(NETSNMP_CONFIG_BIN)
execute_process(
COMMAND ${NETSNMP_CONFIG_BIN} --cflags OUTPUT_VARIABLE _NETSNMP_CFLAGS
)
execute_process(
COMMAND ${NETSNMP_CONFIG_BIN} --libs OUTPUT_VARIABLE _NETSNMP_LIBS
)
# Strip trailing and leading whitespaces
string(STRIP "${_NETSNMP_CFLAGS}" _NETSNMP_CFLAGS)
string(STRIP "${_NETSNMP_LIBS}" _NETSNMP_LIBS)
set(NETSNMP_CFLAGS
${_NETSNMP_CFLAGS}
CACHE STRING "CFLAGS for net-snmp lib"
)
set(NETSNMP_LIBS
${_NETSNMP_LIBS}
CACHE STRING "linker options for net-snmp lib"
)
set(NETSNMP_FOUND TRUE BOOL "net-snmp is found")
add_library(NETSNMP::NETSNMP INTERFACE IMPORTED)
set_target_properties(
NETSNMP::NETSNMP PROPERTIES COMPILE_FLAGS "${NETSNMP_CFLAGS}"
INTERFACE_LINK_LIBRARIES "${NETSNMP_LIBS}"
)
if(NOT TARGET NETSNMP::NETSNMP)
message(
FATAL_ERROR
"Failed to create NETSNMP::NETSNMP target, check the output of net-snmp-config"
)
endif()
else()
set(NETSNMP_FOUND FALSE /BOOL "net-snmp is not found")
endif()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(
NETSNMP DEFAULT_MSG NETSNMP_CONFIG_BIN NETSNMP_LIBS NETSNMP_CFLAGS
)
mark_as_advanced(NETSNMP_LIBS NETSNMP_CFLAGS)

@ -0,0 +1,118 @@
# https://github.com/SOCI/soci/blob/master/cmake/modules/FindOracle.cmake
###############################################################################
#
# CMake module to search for Oracle client library (OCI)
#
# On success, the macro sets the following variables:
# ORACLE_FOUND = if the library found
# ORACLE_LIBRARY = full path to the library
# ORACLE_LIBRARIES = full path to the library
# ORACLE_INCLUDE_DIR = where to find the library headers also defined,
# but not for general use are
# ORACLE_VERSION = version of library which was found, e.g. "1.2.5"
#
# Copyright (c) 2009-2013 Mateusz Loskot <mateusz@loskot.net>
#
# Developed with inspiration from Petr Vanek <petr@scribus.info>
# who wrote similar macro for TOra - http://torasql.com/
#
# Module source: http://github.com/mloskot/workshop/tree/master/cmake/
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
#
###############################################################################
# First check for CMAKE variable
if(NOT ORACLE_HOME)
# If ORACLE_HOME is not defined check for env var and if exists set from env var
if(EXISTS $ENV{ORACLE_HOME})
set(ORACLE_HOME $ENV{ORACLE_HOME})
endif()
if(EXISTS $ENV{ORACLE_INCLUDE_DIR})
set(ORACLE_INCLUDE_DIR $ENV{ORACLE_INCLUDE_DIR})
endif()
endif()
message(STATUS "ORACLE_HOME=${ORACLE_HOME}")
find_path(
ORACLE_INCLUDE_DIR
NAMES oci.h
PATHS ${ORACLE_HOME}/rdbms/public
${ORACLE_HOME}/include
${ORACLE_HOME}/sdk/include # Oracle SDK
${ORACLE_HOME}/OCI/include # Oracle XE on Windows
# instant client from rpm
/usr/include/oracle/*/client${LIB_SUFFIX}
)
set(ORACLE_VERSIONS
21
20
19
18
12
11
10
)
set(ORACLE_OCI_NAMES clntsh libclntsh oci
)# Dirty trick might help on OSX, see issues/89
set(ORACLE_OCCI_NAMES libocci occi)
set(ORACLE_NNZ_NAMES ociw32)
foreach(loop_var IN LISTS ORACLE_VERSIONS)
set(ORACLE_OCCI_NAMES ${ORACLE_OCCI_NAMES} oraocci${loop_var})
set(ORACLE_NNZ_NAMES ${ORACLE_NNZ_NAMES} nnz${loop_var} libnnz${loop_var})
endforeach(loop_var)
set(ORACLE_LIB_DIR
${ORACLE_HOME}
${ORACLE_HOME}/lib
${ORACLE_HOME}/sdk/lib # Oracle SDK
${ORACLE_HOME}/sdk/lib/msvc
${ORACLE_HOME}/OCI/lib/msvc # Oracle XE on Windows
# Instant client from rpm
/usr/lib/oracle/*/client${LIB_SUFFIX}/lib
)
find_library(
ORACLE_OCI_LIBRARY
NAMES ${ORACLE_OCI_NAMES}
PATHS ${ORACLE_LIB_DIR}
)
find_library(
ORACLE_OCCI_LIBRARY
NAMES ${ORACLE_OCCI_NAMES}
PATHS ${ORACLE_LIB_DIR}
)
find_library(
ORACLE_NNZ_LIBRARY
NAMES ${ORACLE_NNZ_NAMES}
PATHS ${ORACLE_LIB_DIR}
)
set(ORACLE_LIBRARY ${ORACLE_OCI_LIBRARY} ${ORACLE_OCCI_LIBRARY}
${ORACLE_NNZ_LIBRARY}
)
if(NOT WIN32)
set(ORACLE_LIBRARY ${ORACLE_LIBRARY} ${ORACLE_CLNTSH_LIBRARY})
endif(NOT WIN32)
set(ORACLE_LIBRARIES ${ORACLE_LIBRARY})
# Handle the QUIETLY and REQUIRED arguments and set ORACLE_FOUND to TRUE
# if all listed variables are TRUE
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(
Oracle DEFAULT_MSG ORACLE_LIBRARY ORACLE_INCLUDE_DIR
)
if(NOT ORACLE_FOUND)
message(
STATUS
"None of the supported Oracle versions (${ORACLE_VERSIONS}) could be found, consider updating ORACLE_VERSIONS if the version you use is not among them."
)
endif()
mark_as_advanced(ORACLE_INCLUDE_DIR ORACLE_LIBRARY)

@ -0,0 +1,53 @@
find_package(PkgConfig)
# TODO: Discuss if other libraries are still used
# - radiusclient library (probaly yes)
# - radiusclient-ng library (probaly not)
# Old makefile just defined the compile definitions whithout checking for
# the library.
# Modern cmake should check for the library and define the compile
# definitions if the library is found.
# Latest OS (Ubuntu) only offer radcli from package managemnt
# Mutually exclusive options
set(RADIUSCLIENTS FREERADIUS RADCLI RADIUSCLIENT_NG)
set(RADIUSCLIENT
RADCLI
CACHE STRING "Radius Client to use")
set_property(CACHE RADIUSCLIENT PROPERTY STRINGS ${RADIUSCLIENTS})
# option(FREERADIUS "Use freeradius-client library" OFF)
# option(RADCLI "Use radcli library" ON)
# option(RADIUSCLIENT_NG "Use radiusclient-ng library" OFF)
# if(FREERADIUS AND RADCLI)
# message(FATAL_ERROR "Only one of FREERADIUS or RADCLI can be enabled")
# endif()
# Verify that the user-defined RADIUSCLIENT is valid
if(NOT RADIUSCLIENT IN_LIST RADIUSCLIENTS)
message(
FATAL_ERROR
"Invalid RADIUSCLIENT specified: ${RADIUSCLIENT}. Available options are: ${RADIUSCLIENTS}."
)
endif()
if(${RADIUSCLIENT} STREQUAL "FREERADIUS")
# - freeradius-client library
set(RADIUSCLIENT_LIB USE_FREERADIUS)
find_package(LibfreeradiusClient REQUIRED)
add_library(RadiusClient::RadiusClient ALIAS
LibfreeradiusClient::LIBFREERADIUS)
elseif(${RADIUSCLIENT} STREQUAL "RADCLI")
# - radcli library
set(RADIUSCLIENT_LIB USE_RADCLI)
pkg_check_modules(RADIUS REQUIRED IMPORTED_TARGET radcli)
add_library(RadiusClient::RadiusClient ALIAS PkgConfig::RADIUS)
# Check for radiusclient-ng version
# elseif(NOT radiusclient_ng STREQUAL "4")
# # - radiusclient-ng v5 or v4 library
# set(RADIUSCLIENT_LIB "radiusclient-ng")
# Uncomment if needed
# target_compile_definitions(MyModule PRIVATE RADIUSCLIENT_NG_5P)
endif()

@ -0,0 +1,20 @@
# Quite analogous to the Makefile.defs file This file is used to define the
# common flags and options for the project The flags are defined as INTERFACE
# properties of the common library The flags are then used by the other
# libraries and executables
set(OS_SPECIFIC_DIR "${CMAKE_SOURCE_DIR}/cmake/os-specific")
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
include(${OS_SPECIFIC_DIR}/linux.cmake)
elseif(CMAKE_SYSTEM_NAME STREQUAL "DragonFly")
# DragonFly BSD specific flags
include(${OS_SPECIFIC_DIR}/dragonfly.cmake)
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
# Mac OS X specific flags
include(${OS_SPECIFIC_DIR}/darwin.cmake)
elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
# FreeBSD specific flags
include(${OS_SPECIFIC_DIR}/freebsd.cmake)
elseif()
message(FATAL_ERROR "Unsupported system: ${CMAKE_SYSTEM_NAME}")
endif()

@ -0,0 +1,54 @@
message(
STATUS
"Configuring for Darwin (Apple stationary operating systems (macOS, OS X, etc.)"
)
target_compile_definitions(
common
INTERFACE HAVE_SOCKADDR_SA_LEN
HAVE_GETHOSTBYNAME2
HAVE_UNION_SEMUN
HAVE_SCHED_YIELD
USE_ANON_MMAP
HAVE_MSGHDR_MSG_CONTROL
NDEBUG # NDEBUG used to turn off assert (assert wants to call
# eprintf which doesn't seem to be defined in any shared lib
HAVE_CONNECT_ECONNRESET_BUG
HAVE_TIMEGM
USE_SIGWAIT
HAVE_IP_MREQN)
target_link_libraries(common INTERFACE resolv)
target_link_libraries(common_utils INTERFACE resolv)
if(NOT ${USE_FAST_LOCK})
target_compile_definitions(common INTERFACE USE_PTHREAD_MUTEX USE_SYSV_SEM)
endif()
if (CMAKE_HOST_SYSTEM_VERSION VERSION_LESS 24)
message(STATUS "Running on Big Sur")
set(CMAKE_MODULE_LINKER_FLAGS
"${CMAKE_MODULE_LINKER_FLAGS} -bundle -flat_namespace -undefined suppress")
set(CMAKE_SHARED_LINKER_FLAGS
"${CMAKE_SHARED_LINKER_FLAGS} -dynamiclib -flat_namespace -undefined suppress"
)
else ()
set(CMAKE_MODULE_LINKER_FLAGS
"${CMAKE_MODULE_LINKER_FLAGS} -bundle -flat_namespace -undefined dynamic_lookup")
set(CMAKE_SHARED_LINKER_FLAGS
"${CMAKE_SHARED_LINKER_FLAGS} -dynamiclib -flat_namespace -undefined dynamic_lookup"
)
endif ()
if(NOT NO_SELECT)
target_compile_definitions(common INTERFACE HAVE_SELECT)
endif()
if(NOT NO_KQUEUE)
target_compile_definitions(common INTERFACE HAVE_KQUEUE)
endif()
# TODO: Chek if we need this in favor of GnuInstallDir alternative
if(NOT DEFINED RUN_PREFIX)
set(RUN_PREFIX "/var")
endif()

@ -0,0 +1,43 @@
# Linux specific flags
message(STATUS "Configuring for Linux")
target_compile_definitions(
common
INTERFACE HAVE_GETHOSTBYNAME2
HAVE_UNION_SEMUN
HAVE_SCHED_YIELD
HAVE_MSG_NOSIGNAL
HAVE_MSGHDR_MSG_CONTROL
HAVE_ALLOCA_H
HAVE_TIMEGM
HAVE_SCHED_SETSCHEDULER
HAVE_IP_MREQN)
if(${RAW_SOCKS})
target_compile_definitions(common INTERFACE USE_RAW_SOCKS)
endif()
if(NOT ${USE_FAST_LOCK})
target_compile_definitions(common INTERFACE USE_PTHREAD_MUTEX)
target_link_libraries(common INTERFACE pthread)
else()
# Check if lock_method is posix or pthread
if(LOCK_METHOD STREQUAL "USE_POSIX_SEM" OR LOCK_METHOD STREQUAL
"USE_PTHREAD_MUTEX")
message(STATUS "Using ${LOCK_METHOD} for locks")
target_link_libraries(common INTERFACE pthread)
endif()
endif()
if(NOT NO_SELECT)
target_compile_definitions(common INTERFACE HAVE_SELECT)
endif()
if(NOT NO_EPOLL)
target_compile_definitions(common INTERFACE HAVE_EPOLL)
endif()
if(NOT NO_SIGIO_RT)
target_compile_definitions(common INTERFACE HAVE_SIGIO_RT
SIGINFO64_WORKAROUND)
endif()

@ -0,0 +1,32 @@
message(STATUS "Configuring for FreeBSD")
target_compile_definitions(
common
INTERFACE HAVE_SOCKADDR_SA_LEN
HAVE_GETHOSTBYNAME2
HAVE_UNION_SEMUN
HAVE_SCHED_YIELD
HAVE_MSGHDR_MSG_CONTROL
HAVE_CONNECT_ECONNRESET_BUG
HAVE_TIMEGM
HAVE_IP_MREQN)
if(${RAW_SOCKS})
target_compile_definitions(common INTERFACE USE_RAW_SOCKS)
endif()
if(NOT ${USE_FAST_LOCK})
target_compile_definitions(common INTERFACE USE_PTHREAD_MUTEX)
endif()
if(NOT ${NO_SELECT})
target_compile_definitions(common INTERFACE HAVE_SELECT)
endif()
if(NOT ${NO_KQUEUE})
target_compile_definitions(common INTERFACE HAVE_KQUEUE)
endif()
if(NOT DEFINED RUN_PREFIX)
set(RUN_PREFIX "/var")
endif()

@ -0,0 +1,55 @@
# Linux specific flags
message(STATUS "Configuring for Linux")
target_compile_definitions(
common
INTERFACE HAVE_GETHOSTBYNAME2
HAVE_UNION_SEMUN
HAVE_SCHED_YIELD
HAVE_MSG_NOSIGNAL
HAVE_MSGHDR_MSG_CONTROL
HAVE_ALLOCA_H
HAVE_TIMEGM
HAVE_SCHED_SETSCHEDULER
HAVE_IP_MREQN)
target_link_libraries(common INTERFACE ${CMAKE_DL_LIBS} resolv)
target_link_libraries(common_utils INTERFACE resolv)
if(${RAW_SOCKS})
target_compile_definitions(common INTERFACE USE_RAW_SOCKS)
endif()
if(NOT ${USE_FAST_LOCK})
target_compile_definitions(common INTERFACE USE_PTHREAD_MUTEX)
target_link_libraries(common INTERFACE pthread)
message(
STATUS "FAST_LOCK not available on this platform, using: USE_PTHREAD_MUTEX")
else()
# TODO: Check if this can be reached. Right now it is not possible to set
# LOCK_METHOD, only USE_FAST_LOCK. This branch is reached when USE_FAST_LOCK
# is set to true (meaning it is available on platform).
# Check if lock_method is posix or pthread
# if(LOCK_METHOD STREQUAL "USE_POSIX_SEM" OR LOCK_METHOD STREQUAL
# "USE_PTHREAD_MUTEX")
# message(STATUS "Using ${LOCK_METHOD} for locks")
# target_link_libraries(common INTERFACE pthread)
# endif()
endif()
if(NOT NO_SELECT)
target_compile_definitions(common INTERFACE HAVE_SELECT)
endif()
# TODO introduce check for epoll
if(NOT NO_EPOLL)
target_compile_definitions(common INTERFACE HAVE_EPOLL)
endif()
# TODO introduce check for sigio
if(NOT NO_SIGIO_RT)
target_compile_definitions(common INTERFACE HAVE_SIGIO_RT
SIGINFO64_WORKAROUND)
endif()
# TODO introduce check for futex

@ -0,0 +1,3 @@
set(UTIL_NAME "${NAME}")
target_compile_definitions(${NAME} PRIVATE MOD_NAME="utils/${UTIL_NAME}")

@ -137,10 +137,18 @@ Turns on via host checking when forwarding replies.
Listens on the specified address/interface. Multiple
.B \-l
mean listening on multiple addresses. The address format is
[proto:]address[:port], where proto = udp|tcp and
address = host|ip_address|interface_name. Example: -l localhost,
-l udp:127.0.0.1:5080, -l eth0:5062.
The default behaviour is to listen on all the ipv4 interfaces.
[proto:]addr_lst[:port][/advaddr][/socket_name],
where proto=udp|tcp|tls|sctp,
addr_list = addr|(addr, addrress),
addr=host|ip_address|interface_name,
advaddr=addr[:port] (advertised address) and
socket_name=identifying name.
E.g: -l localhost, -l udp:127.0.0.1:5080, -l eth0:5062,
-l udp:127.0.0.1:5080/1.2.3.4:5060,
-l udp:127.0.0.1:5080//local,
-l udp:127.0.0.1:5080/1.2.3.4:5060/local,
-l \"sctp:(eth0)\", -l \"(eth0, eth1, 127.0.0.1):5065\".
The default behaviour is to listen on all the interfaces.
.TP
.BI \-\-loadmodule\fR=\fIname
load the module specified by name

@ -1,6 +1,6 @@
#!KAMAILIO
#
# Kamailio SIP Server v5.8 - default configuration script
# Kamailio SIP Server v6.0 - default configuration script
# - web: https://www.kamailio.org
# - git: https://github.com/kamailio/kamailio
#
@ -157,13 +157,13 @@ import_file "kamailio-local.cfg"
#!endif
# - flags
# FLT_ - per transaction (message) flags
# FLT_ - per transaction (message) flags
#!define FLT_ACC 1
#!define FLT_ACCMISSED 2
#!define FLT_ACCFAILED 3
#!define FLT_NATS 5
# FLB_ - per branch flags
# FLB_ - per branch flags
#!define FLB_NATB 6
#!define FLB_NATSIPPING 7
@ -191,6 +191,13 @@ children=8
/* number of SIP routing processes for all TCP/TLS sockets */
# tcp_children=8
/* UDP receiving mode:
* - 0: multi-process (default)
* - 1: multi-threaded with async worker group 'udp'
* - 2: per socket configuration (see core cookbook) */
# async_workers_group="name=udp;workers=8"
# udp_receiver_mode = 1
/* uncomment the next line to disable the auto discovery of local aliases
* based on reverse DNS on IPs (default on) */
# auto_aliases=no
@ -211,6 +218,9 @@ tcp_connection_lifetime=3605
/* upper limit for TCP connections (it includes the TLS connections) */
tcp_max_connections=2048
/* upper limit for TCP connections for one ip address - default 1024 */
#tcp_accept_iplimit=1024
#!ifdef WITH_JSONRPC
tcp_accept_no_cl=yes
#!endif
@ -224,10 +234,10 @@ tls_max_connections=2048
/* For OpenSSL 3 integration
* functions calling libssl3 can be invoked in a transient thread
* 0: disable threaded calls
* 1: use thread executors for process#0 only
* 2: no thread executors, but use atfork handler to reset thread-locals to NULL
* 3: use thread executors for all processes */
tls_threads_mode=1
* 1: use thread executors for process #0 only
* 2: no thread executors, but use atfork handler to reset thread-locals to NULL */
tls_threads_mode=2
#!endif
/* set it to yes to enable sctp and load sctp.so module */
@ -298,6 +308,7 @@ loadmodule "ctl.so"
loadmodule "cfg_rpc.so"
loadmodule "acc.so"
loadmodule "counters.so"
loadmodule "dlgs.so"
#!ifdef WITH_AUTH
loadmodule "auth.so"
@ -379,6 +390,12 @@ modparam("rr", "enable_full_lr", 0)
# do not append from tag to the RR (no need for this script)
modparam("rr", "append_fromtag", 0)
# ----- dlgs params -----
modparam("dlgs", "timer_interval", 10)
modparam("dlgs", "init_lifetime", 180)
modparam("dlgs", "active_lifetime", 7200)
modparam("dlgs", "finish_lifetime", 10)
# ----- registrar params -----
modparam("registrar", "method_filtering", 1)
/* uncomment the next line to disable parallel forking via location */
@ -535,6 +552,7 @@ request_route {
# CANCEL processing
if (is_method("CANCEL")) {
dlgs_update();
if (t_check_trans()) {
route(RELAY);
}
@ -587,6 +605,10 @@ request_route {
exit;
}
if(is_method("INVITE")) {
dlgs_init("$fu", "$tu", "srcip=$si");
}
# dispatch destinations to PSTN
route(PSTN);
@ -612,7 +634,7 @@ route[RELAY] {
}
if (!t_relay()) {
sl_reply_error();
send_reply_error();
}
exit;
}
@ -672,6 +694,7 @@ route[WITHINDLG] {
# take the path determined by record-routing
if (loose_route()) {
route(DLGURI);
dlgs_update();
if (is_method("BYE")) {
setflag(FLT_ACC); # do accounting ...
setflag(FLT_ACCFAILED); # ... even if the transaction fails
@ -719,7 +742,7 @@ route[REGISTRAR] {
#!endif
}
if (!save("location")) {
sl_reply_error();
send_reply_error();
}
exit;
}
@ -785,7 +808,7 @@ route[PRESENCE] {
msg_apply_changes();
#!endif
if (!t_newtran()) {
sl_reply_error();
send_reply_error();
exit;
}
@ -993,7 +1016,7 @@ event_route[xhttp:request] {
xhttp_reply("200", "OK", "text/html",
"<html><body>Wrong URL $hu</body></html>");
exit;
exit;
}
#!endif

@ -1,20 +1,25 @@
# SIP / UDP
listen=udp:11.22.33.44:4060
# SIP / TCP
#listen=tcp:11.22.33.44:4060
listen=tcp:11.22.33.44:4060
# SIP / TCP/TLS
#listen=tls:11.22.33.44:4061
alias=ims.mnc001.mcc001.3gppnetwork.org
#!define NETWORKNAME "ims.mnc001.mcc001.3gppnetwork.org"
#!define HOSTNAME "icscf.mnc001.mcc001.3gppnetwork.org"
#!define HOSTNAME "icscf.ims.mnc001.mcc001.3gppnetwork.org"
#!subst "/NETWORKNAME/ims.mnc001.mcc001.3gppnetwork.org/"
#!subst "/HSS_REALM/ims.mnc001.mcc001.3gppnetwork.org/"
#!define ENUM_SUFFIX "ims.mnc001.mcc001.3gppnetwork.org."
# SIP-Address of capturing node, if not set, capturing is disabled.
##!define CAPTURE_NODE "sip:127.0.0.1:9060"
# Connection URL for the database:
#!define DB_URL "con1=>mysql://icscf:heslo@127.0.0.1/icscf"
#!define DB_URL "mysql://icscf:heslo@localhost/icscf"
##!define DB_URL2 "con2=>mysql://icscf:heslo@127.0.0.1/icscf"
# Allowed IPs for XML-RPC-Queries
@ -41,6 +46,7 @@ alias=ims.mnc001.mcc001.3gppnetwork.org
#
# Enabled Features for this host:
##!define WITH_DEBUG
#!define WITH_TCP
##!define WITH_TLS
#!define WITH_XMLRPC
##!define PEERING

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<DiameterPeer
FQDN="icscf.mnc001.mcc001.3gppnetwork.org"
FQDN="icscf.ims.mnc001.mcc001.3gppnetwork.org"
Realm="ims.mnc001.mcc001.3gppnetwork.org"
Vendor_Id="10415"
Product_Name="CDiameterPeer"
@ -15,7 +15,7 @@
MaxAuthSessionTimeout="3600"
>
<Peer FQDN="hss.mnc001.mcc001.3gppnetwork.org" Realm="ims.mnc001.mcc001.3gppnetwork.org" port="3868"/>
<Peer FQDN="hss.ims.mnc001.mcc001.3gppnetwork.org" Realm="ims.mnc001.mcc001.3gppnetwork.org" port="3868"/>
<Acceptor port="3869" bind="11.22.33.44"/>
@ -30,5 +30,5 @@
-->
<SupportedVendor vendor="10415" />
<DefaultRoute FQDN="hss.mnc001.mcc001.3gppnetwork.org" metric="10"/>
<DefaultRoute FQDN="hss.ims.mnc001.mcc001.3gppnetwork.org" metric="10"/>
</DiameterPeer>

@ -50,9 +50,9 @@ server_header="Server: Kamailio I-CSCF"
auto_aliases=no
# Do SRV-Loadbalancing:
dns_srv_lb=yes
dns_srv_lb=on
# Always: Also try IPv6:
dns_try_ipv6=yes
dns_try_ipv6=on
# Query NAPTR-Records as well:
dns_try_naptr=no
@ -81,10 +81,10 @@ check_via=no # (cmd. line: -v)
dns=no # (cmd. line: -r)
rev_dns=no # (cmd. line: -R)
children=64
children=4
# ------------------ module loading ----------------------------------
mpath="/usr/lib64/kamailio/modules_k/:/usr/lib64/kamailio/modules/:/usr/lib/kamailio/modules_k/:/usr/lib/kamailio/modules/"
mpath="/usr/lib64/kamailio/modules/:/usr/lib/kamailio/modules/:/usr/lib/x86_64-linux-gnu/kamailio/modules/:/usr/local/lib64/kamailio/modules"
# (we try both the lib64 and the lib directory)
loadmodule "tm"
loadmodule "sl"
@ -132,6 +132,7 @@ loadmodule "tls.so"
#!ifdef PEERING
loadmodule "enum"
loadmodule "dispatcher"
#!endif
# ----------------- setting module-specific parameters ---------------
@ -146,9 +147,9 @@ loadmodule "jsonrpcs.so"
# ----- jsonrpcs params -----
modparam("jsonrpcs", "pretty_format", 1)
/* set the path to RPC fifo control file */
# modparam("jsonrpcs", "fifo_name", "/run/kamailio/kamailio_rpc.fifo")
modparam("jsonrpcs", "fifo_name", "/var/run/kamailio_icscf/kamailio_rpc.fifo")
/* set the path to RPC unix socket control file */
# modparam("jsonrpcs", "dgram_socket", "/run/kamailio/kamailio_rpc.sock")
modparam("jsonrpcs", "dgram_socket", "/var/run/kamailio_icscf/kamailio_rpc.sock")
# -- rr params --
# add value to ;lr param to make some broken UAs happy
@ -162,7 +163,7 @@ modparam("cdp", "config_file", "/etc/kamailio_icscf/icscf.xml")
#!ifdef CXDX_FORCED_PEER
modparam("ims_icscf", "cxdx_forced_peer", CXDX_FORCED_PEER)
#!endif
modparam("ims_icscf", "cxdx_dest_realm", NETWORKNAME)
modparam("ims_icscf","cxdx_dest_realm", "HSS_REALM")
# DB-URL, where information about S-CSCF-Server can be found:
#!ifdef DB_URL2
@ -182,7 +183,7 @@ modparam("ims_icscf", "route_uar_user_unknown", "uar_term_user_unknown")
#!ifdef WITH_TLS
# ----- tls params -----
modparam("tls", "config", "/etc/kamailio/tls.cfg")
modparam("tls", "config", "/etc/kamailio_icscf/tls.cfg")
#!endif
#!ifdef WITH_XMLRPC
@ -192,7 +193,7 @@ modparam("xmlrpc", "url_match", "^/RPC")
#!endif
# ----- ctl params -----
modparam("ctl", "binrpc", "unix:/run/kamailio_icscf/kamailio_ctl")
modparam("ctl", "binrpc", "unix:/var/run/kamailio_icscf/kamailio_ctl")
#!ifdef WITH_DEBUG
# ----- debugger params -----
@ -221,9 +222,10 @@ modparam("tm", "failure_reply_mode", 3)
modparam("tm", "fr_timer", 10000)
# default invite retransmission timeout after 1xx: 120sec
modparam("tm", "fr_inv_timer", 120000)
# Don't reply automatically with "100 Trying"
modparam("tm", "auto_inv_100", 0)
#!ifdef WITH_DEBUG
loadmodule "debugger.so"
modparam("debugger", "mod_hash_size", 5)
modparam("debugger", "mod_level_mode", 1)
modparam("debugger", "mod_level", "cdp=3")
@ -238,16 +240,18 @@ route{
xlog("I-CSCF >>>>>>>>>>>>>>>>>>>> $rm $ru ($fu => $tu ($si:$sp) to $tu, $ci)\n");
#!endif
if !($rU =~ "\+.*") {
prefix("+");
}
# per request initial checks
route(REQINIT);
if (is_method("REGISTER")) {
route(register);
}
if (is_method("NOTIFY") && search("^(Event|o)([ \t]*):([ \t]*)reg")) {
if (!t_relay()) {
sl_reply_error();
}
exit;
}
if (is_method("INVITE|SUBSCRIBE|MESSAGE|INFO|PUBLISH|CANCEL")) {
route(initial_request);
@ -450,6 +454,8 @@ failure_route[register_failure]
######################################################################
route[initial_request]
{
# $avp(prefix)="+";
# $ru= $(ru{s.rm,$avp(prefix)});
xlog("$$ru => $ru\n");
I_perform_location_information_request("LIR_REPLY", "0");
}
@ -563,8 +569,6 @@ route[lir_term_user_unknown]
};
}
}
######################################################################
# Send calls to the PSTN-Gateways:
######################################################################

@ -57,13 +57,17 @@ mlock_pages=yes
shm_force_alloc=yes
# Do SRV-Loadbalancing:
dns_srv_lb=yes
dns_srv_lb=on
# Always prefer IPv6:
dns_try_ipv6=yes
dns_try_ipv6=on
# Always prefer IPv6:
dns_cache_flags=4
# DNS-Based failover
use_dns_failover=yes
use_dns_failover=on
# Query NAPTR-Records as well:
dns_try_naptr=no
dns_try_naptr=off
# DNS cache won't be used (all dns lookups will result into a DNS request)
use_dns_cache=off
user_agent_header="User-Agent: TelcoSuite Proxy-CSCF"
server_header="Server: TelcoSuite Proxy-CSCF"
@ -71,7 +75,7 @@ server_header="Server: TelcoSuite Proxy-CSCF"
log_facility=LOG_LOCAL0
fork=yes
children=16
children=4
#!ifndef TCP_PROCESSES
# Number of TCP Processes
@ -99,7 +103,7 @@ enable_tls=yes
#!ifdef WITH_TCP
# life time of TCP connection when there is no traffic
# - a bit higher than registration expires to cope with UA behind NAT
tcp_connection_lifetime=3615
tcp_connection_lifetime=36000
# If a message received over a tcp connection has "alias" in its via a new tcp
# alias port will be created for the connection the message came from (the
# alias port will be set to the via one).
@ -111,6 +115,8 @@ tcp_accept_aliases=no
# Enable SIP outbound TCP keep-alive using PING-PONG (CRLFCRLF - CRLF).
tcp_crlf_ping=yes
tcp_reuse_port=yes
tcp_accept_no_cl=yes
tcp_rd_buf_size=16384
@ -125,6 +131,11 @@ disable_tcp=yes
based on reverse DNS on IPs (default on) */
auto_aliases=no
#phone2tel=1
udp_mtu = 1300
udp_mtu_try_proto = TCP
/* uncomment and configure the following line if you want Kamailio to
bind on a specific interface/port/proto (default bind on all available) */
@ -134,7 +145,7 @@ system.service = "Proxy-CSCF" desc "Function of this server"
####### Modules Section ########
# set paths to location of modules
mpath="/usr/lib64/kamailio/modules_k/:/usr/lib64/kamailio/modules/:/usr/local/lib/kamailio/modules/"
mpath="/usr/lib64/kamailio/modules/:/usr/lib/kamailio/modules/:/usr/lib/x86_64-linux-gnu/kamailio/modules/:/usr/local/lib64/kamailio/modules"
# Fifo Module
# Kamailio Extensions (e.g. MI:uptime, MI:version, cfg:isflagset etc.)
@ -156,17 +167,16 @@ loadmodule "cfg_rpc"
loadmodule "xlog"
loadmodule "auth"
loadmodule "dispatcher"
loadmodule "sctp"
loadmodule "path"
loadmodule "statistics"
loadmodule "ims_dialog"
loadmodule "ims_usrloc_pcscf"
#!ifdef WITH_IPSEC
# Following module is required even in case of IPSec being disabled.
loadmodule "ims_ipsec_pcscf"
#!endif
loadmodule "ims_registrar_pcscf"
#!ifdef WITH_XMLRPC
loadmodule "xmlrpc"
#!endif
@ -232,10 +242,17 @@ loadmodule "sqlops"
loadmodule "htable"
#!ifdef WITH_DEBUG
loadmodule "debugger.so"
modparam("debugger", "mod_hash_size", 5)
modparam("debugger", "mod_level_mode", 1)
modparam("debugger", "mod_level", "rtpengine=3")
modparam("debugger", "mod_level", "ims_qos=3")
#!ifdef WITH_IPSEC
modparam("debugger", "mod_level", "ims_ipsec_pcscf=3")
#!endif
modparam("debugger", "mod_level", "textops=3")
modparam("debugger", "mod_level", "tm=3")
modparam("debugger", "mod_level", "ims_registrar_pcscf=3")
modparam("debugger", "mod_level", "ims_usrloc_pcscf=3")
modparam("debugger", "cfgtrace", 1)
#!endif
@ -243,9 +260,9 @@ loadmodule "jsonrpcs.so"
# ----- jsonrpcs params -----
modparam("jsonrpcs", "pretty_format", 1)
/* set the path to RPC fifo control file */
# modparam("jsonrpcs", "fifo_name", "/run/kamailio/kamailio_rpc.fifo")
modparam("jsonrpcs", "fifo_name", "/var/run/kamailio_pcscf/kamailio_rpc.fifo")
/* set the path to RPC unix socket control file */
# modparam("jsonrpcs", "dgram_socket", "/run/kamailio/kamailio_rpc.sock")
modparam("jsonrpcs", "dgram_socket", "/var/run/kamailio_pcscf/kamailio_rpc.sock")
# ----------------- setting module-specific parameters ---------------
#!ifdef DB_URL2
@ -265,14 +282,21 @@ modparam("pike", "remove_latency", 4)
# ip ban htable with autoexpire after 5 minutes
modparam("htable", "htable", "ipban=>size=8;autoexpire=300")
modparam("htable", "htable", "failedauth=>size=8;autoexpire=120")
modparam("htable", "htable", "natpingfrom=>size=8;autoexpire=600000;")
#!endif
modparam("htable", "htable", "contact=>size=8;autoexpire=20")
modparam("htable", "htable", "a=>size=8;autoexpire=20")
#!ifdef WITH_IMS_HDR_CACHE
modparam("htable", "htable", "serviceroutes=>size=16;autoexpire=14400;")
modparam("htable", "htable", "associateduris=>size=16;autoexpire=14400;")
#!endif
#!ifdef WITH_NATPING
modparam("htable", "htable", "natping=>size=8;autoexpire=600000;")
modparam("htable", "htable", "natpingfail=>size=8;autoexpire=600000;")
modparam("htable", "htable", "natpingfrom=>size=8;autoexpire=600000;")
#!ifdef DB_URL2
modparam("sqlops", "sqlcon", "pcscf=>cluster://cluster1")
#!else
@ -282,8 +306,8 @@ modparam("sqlops", "sqlcon", SQLOPS_DBURL)
modparam("uac", "restore_mode", "none")
# ----------------- Settings for RTimer ---------------
# time interval set to 10 seconds
modparam("rtimer", "timer", "name=NATPING;interval=15;mode=1;")
# time interval set to 60 seconds
modparam("rtimer", "timer", "name=NATPING;interval=60;mode=1;")
modparam("rtimer", "exec", "timer=NATPING;route=NATPING")
#!endif
@ -294,6 +318,8 @@ modparam("rtimer", "exec", "timer=NATPING;route=NATPING")
modparam("tm", "fr_timer", 3000)
# default invite retransmission timeout after 1xx: 120sec
modparam("tm", "fr_inv_timer", 120000)
# Dont reply automatically with "100 Trying"
modparam("tm", "auto_inv_100", 0)
# ----- rr params -----
# add value to ;lr param to cope with most of the UAs
@ -304,6 +330,7 @@ modparam("rr", "append_fromtag", 1)
modparam("rr", "add_username", 1)
# Take User from a custom AVP
modparam("rr", "custom_user_avp", "$avp(RR_CUSTOM_USER_AVP)")
modparam("rr", "force_send_socket", 1)
#!ifdef WITH_XMLRPC
# ----- xmlrpc params -----
@ -317,35 +344,39 @@ modparam("tls", "config", "/etc/kamailio_pcscf/tls.cfg")
#!endif
# ----- rtpproxy params -----
modparam("rtpengine", "rtpengine_sock", "1 == udp:localhost:9910")
modparam("rtpengine", "rtpengine_sock", "2 == udp:localhost:9911")
modparam("rtpengine", "setid_default", 1)
modparam("rtpengine", "rtpengine_sock", "1 == udp:localhost:2223")
#modparam("rtpengine", "rtpengine_sock", "2 == udp:localhost:2224")
modparam("rtpengine", "setid_avp", "$avp(setid)")
modparam("rtpengine", "extra_id_pv", "$avp(extra_id)")
modparam("path", "use_received", 1)
# ----- ctl params -----
modparam("ctl", "binrpc", "unix:/run/kamailio_pcscf/kamailio_ctl")
modparam("ctl", "binrpc", "unix:/var/run/kamailio_pcscf/kamailio_ctl")
# ----------------- Settings for Dispatcher ---------------
modparam("dispatcher", "list_file", "/etc/kamailio_pcscf/dispatcher.list")
#!ifdef WITH_SBC
# Dispatcher: Enable Failover-Support
modparam("dispatcher", "flags", 2)
# Dispatcher: Overwrite Destination address, if required.
modparam("dispatcher", "force_dst", 1)
# AVP's required for Fail-Over-Support:
modparam("dispatcher", "dst_avp", "$avp(DISPATCHER_DST_AVP)")
modparam("dispatcher", "grp_avp", "$avp(DISPATCHER_GRP_AVP)")
modparam("dispatcher", "cnt_avp", "$avp(DISPATCHER_CNT_AVP)")
modparam("dispatcher", "sock_avp", "$avp(DISPATCHER_SOCK_AVP)")
#modparam("dispatcher", "dst_avp", "$avp(DISPATCHER_DST_AVP)")
#modparam("dispatcher", "grp_avp", "$avp(DISPATCHER_GRP_AVP)")
#modparam("dispatcher", "cnt_avp", "$avp(DISPATCHER_CNT_AVP)")
#modparam("dispatcher", "sock_avp", "$avp(DISPATCHER_SOCK_AVP)")
#modparam("dispatcher", "xavp_dst", "$avp(DISPATCHER_DST_AVP)")
#modparam("dispatcher", "xavp_dst_mode", 0)
#modparam("dispatcher", "xavp_ctx", "$avp(DISPATCHER_CNT_AVP)")
#modparam("dispatcher", "xavp_ctx_mode", 0)
# Try to recover disabled destinations every 15 seconds.
modparam("dispatcher", "ds_ping_interval", 15)
# Actively query the gateways:
modparam("dispatcher", "ds_probing_mode", 1)
#!endif
# -- usrloc params --
#!ifdef DB_URL
@ -354,18 +385,23 @@ modparam("ims_usrloc_pcscf", "db_url", "cluster://cluster1")
#!else
modparam("ims_usrloc_pcscf", "db_url", DB_URL)
#!endif
modparam("ims_usrloc_pcscf", "db_mode", 1)
modparam("ims_usrloc_pcscf", "db_mode", 0)
#!endif
#modparam("ims_usrloc_pcscf", "hashing_type", 2)
modparam("ims_usrloc_pcscf", "enable_debug_file", 0)
modparam("ims_usrloc_pcscf", "match_contact_host_port", 1)
modparam("ims_registrar_pcscf", "is_registered_fallback2ip", 1)
modparam("ims_registrar_pcscf", "ignore_reg_state", 1)
modparam("ims_registrar_pcscf", "ignore_contact_rxport_check", 1)
modparam("ims_registrar_pcscf", "pending_reg_expires", 30)
modparam("ims_registrar_pcscf", "subscription_expires", 36000)
modparam("ims_registrar_pcscf", "delete_delay", CONTACT_DELETE_DELAY)
modparam("ims_usrloc_pcscf", "expires_grace", 120)
#!ifdef WITH_REGINFO
modparam("ims_registrar_pcscf", "subscribe_to_reginfo", 1)
modparam("ims_registrar_pcscf", "publish_reginfo", 1)
modparam("ims_registrar_pcscf", "pcscf_uri", PCSCF_URL)
modparam("ims_registrar_pcscf", "pcscf_uri", "sip:HOSTNAME")
#!else
modparam("ims_registrar_pcscf", "subscribe_to_reginfo", 0)
modparam("ims_registrar_pcscf", "publish_reginfo", 0)
@ -375,13 +411,27 @@ modparam("ims_registrar_pcscf", "publish_reginfo", 0)
modparam("ims_ipsec_pcscf", "ipsec_listen_addr", IPSEC_LISTEN_ADDR)
modparam("ims_ipsec_pcscf", "ipsec_client_port", IPSEC_CLIENT_PORT)
modparam("ims_ipsec_pcscf", "ipsec_server_port", IPSEC_SERVER_PORT)
modparam("ims_ipsec_pcscf", "ipsec_spi_id_start", 4096)
modparam("ims_ipsec_pcscf", "ipsec_max_connections", IPSEC_MAX_CONN)
modparam("htable", "htable", "ipsec_clients=>size=8;autoexpire=600000;")
#!endif
#!ifdef WITH_RX
# -- CDP params --
modparam("cdp", "config_file", "/etc/kamailio_pcscf/pcscf.xml")
# -- diameter_rx params --
modparam("ims_qos", "rx_dest_realm", "NETWORKNAME")
modparam("ims_qos", "rx_dest_realm", "PCRF_REALM")
#modparam("ims_qos", "rx_forced_peer", "pcrf.epc.mnc001.mcc001.3gppnetwork.org")
#modparam("ims_qos", "rx_forced_peer", "10.4.128.21")
#modparam("ims_qos", "rx_dest_realm", "NETWORKNAME")
modparam("ims_qos", "early_qosrelease_reason", "Sorry - QoS failed")
modparam("ims_qos", "confirmed_qosrelease_headers", "X-Reason: QoS failed\r\n")
modparam("ims_qos", "authorize_video_flow", 1)
modparam("ims_qos", "af_signaling_ip", RX_AF_SIGNALING_IP)
modparam("ims_qos", "include_rtcp_fd", 1)
modparam("ims_qos", "rx_auth_expiry", 36000)
modparam("ims_qos", "recv_mode", 1)
modparam("ims_qos", "dialog_direction", RX_IMS_REG_DIALOG_DIRECTION)
#!endif
# -- pua params --
@ -400,13 +450,14 @@ modparam("ims_dialog", "dlg_flag", FLT_DIALOG)
modparam("ims_dialog", "timeout_avp", "$avp(DLG_TIMEOUT_AVP)")
modparam("ims_dialog", "detect_spirals", 0)
modparam("ims_dialog", "profiles_no_value", "orig ; term")
modparam("ims_dialog", "profiles_with_value", "caller ; callee")
#!ifdef DB_URL
#!ifdef DB_URL2
modparam("ims_dialog", "db_url", "cluster://cluster1")
#!else
modparam("ims_dialog", "db_url", DB_URL)
#!endif
modparam("ims_usrloc_pcscf", "db_mode", 1)
modparam("ims_dialog", "db_mode", 0)
#!endif
#!ifdef CAPTURE_NODE
@ -431,7 +482,7 @@ modparam("statistics", "variable", "register_time")
# - processing of any incoming SIP request starts with this route
route {
##!ifdef WITH_DEBUG
xlog("$rm ($fu ($si:$sp) to $tu, $ci)\n");
xnotice("PCSCF: $rm $ru ($fu ($si:$sp) to $tu, $ci)\n");
##!endif
#!ifdef WITH_WEBSOCKET
@ -458,21 +509,23 @@ route {
exit;
}
# handle requests within SIP dialogs
route(WITHINDLG);
### only initial requests (no To tag)
# handle retransmissions
if(t_precheck_trans()) {
t_check_trans();
exit;
if (!is_method("ACK")) {
if(t_precheck_trans()) {
t_check_trans();
exit;
}
}
t_check_trans();
#t_check_trans();
# Check for Re-Transmissions
t_check_trans();
# handle requests within SIP dialogs
route(WITHINDLG);
### only initial requests (no To tag)
if (is_method("UPDATE")) {
send_reply("403", "Forbidden - Target refresh outside dialog not allowed");
break;
@ -482,6 +535,10 @@ route {
break;
}
#Set DLG flag to track dialogs using dialog2
if (!is_method("REGISTER|SUBSCRIBE"))
setflag(FLT_DIALOG);
loose_route();
#!ifdef WITH_SBC
if (ds_is_from_list(DISPATCHER_LIST_SBC)) {
@ -712,10 +769,6 @@ route[REQINIT] {
exit;
}
if (!is_method("REGISTER")) {
ipsec_forward("location");
}
# Ignore Re-Transmits:
if (t_lookup_request()) {
exit;
@ -736,17 +789,23 @@ route[RELAY] {
# Handle requests within SIP dialogs
route[WITHINDLG] {
if (has_totag()) {
xnotice("Within DLG\n");
# sequential request withing a dialog should
# take the path determined by record-routing
if (loose_route()) {
xnotice("Within loose route\n");
if(!isdsturiset()) {
handle_ruri_alias();
#if ($rc == 1) {
# $ru = "sip:" + $rU + "@" + $dd + ":" + $dp + ";transport=" + $rP;
#}
}
if ( is_method("ACK") && ($sht(contact=>$ci) != $null) ) {
xlog("Contact of Reply: $sht(contact=>$ci) ($ci)\n");
$ru = $sht(contact=>$ci);
}
# sequential request within a dialog should
# take the path determined by record-routing
if (loose_route()) {
if ($route_uri =~ "sip:mt@.*") {
route(MT_indialog);
} else {
@ -757,7 +816,8 @@ route[WITHINDLG] {
route(NATMANAGE);
route(RELAY);
} else {
exit;
}
if ( is_method("ACK") ) {
xlog("Contact of Reply: $T_rpl($ct)\n");
if ( t_check_trans() ) {
@ -772,7 +832,6 @@ route[WITHINDLG] {
}
}
sl_send_reply("404", "Not here");
}
exit;
}
}
@ -827,37 +886,41 @@ route[NOTIFY]
}
}
#!ifdef WITH_NATPING
# NATPING Route: #
#####################################################################
route[NATPING] {
route(preload_pcscf);
sht_lock("natping=>natpinglock");
sht_iterator_start("nat_iterator", "natping");
while(sht_iterator_next("nat_iterator")) {
xlog("OPTIONS to $shtitval(nat_iterator) via $shtitkey(nat_iterator)...\n");
$uac_req(method) = "OPTIONS";
$uac_req(ruri) = $shtitval(nat_iterator);
$uac_req(furi) = PCSCF_URL;
$uac_req(sock) = $sht(natpingfrom=>$shtitkey(nat_iterator));
$uac_req(turi) = $shtitval(nat_iterator);
$uac_req(ouri) = $shtitkey(nat_iterator);
$uac_req(evroute) = 1;
uac_req_send();
}
sht_iterator_end("nat_iterator");
sht_unlock("natping=>natpinglock");
}
event_route[uac:reply] {
#!ifdef WITH_DEBUG
##!ifdef WITH_DEBUG
xlog("request sent to $uac_req(ruri) completed with code: $uac_req(evcode), Type $uac_req(evtype)\n");
#!endif
##!endif
if (($uac_req(evtype) != 1) || ($uac_req(evcode) != 200)) {
if ($sht(natpingfail=>$uac_req(ouri)) == $null) {
$sht(natpingfail=>$uac_req(ouri)) = 1;
} else {
$sht(natpingfail=>$uac_req(ouri)) = $sht(natpingfail=>$uac_req(ouri)) + 1;
}
# xlog(" request sent to $uac_req(ruri): Fail Counter is $sht(natpingfail=>$uac_req(ouri))\n");
if ($sht(natpingfail=>$uac_req(ouri)) > 3) {
xlog(" request sent to $uac_req(ruri): Fail Counter is $sht(natpingfail=>$uac_req(ouri))\n");
if ($sht(natpingfail=>$uac_req(ouri)) > 30) {
if ($(uac_req(ouri){uri.transport}) == "tcp") {
$var(alias) = "alias="+$(uac_req(ouri){uri.host})+"~"+$(uac_req(ouri){uri.port})+"~2";
} else if ($(uac_req(ouri){uri.transport}) == "tls") {
@ -867,10 +930,19 @@ event_route[uac:reply] {
}
xlog(" Unregistering $uac_req(ruri);$var(alias)\n");
setdebug("9");
ipsec_destroy("location");
#!ifdef WITH_IPSEC
ipsec_destroy_by_contact("location", "$uac_req(ruri);$var(alias)", "$(uac_req(ouri){uri.host})", "$(uac_req(ouri){uri.port})");
#!endif
pcscf_unregister("location", "$uac_req(ruri);$var(alias)", "$(uac_req(ouri){uri.host})", "$(uac_req(ouri){uri.port})");
resetdebug();
sht_lock("natping=>natpinglock");
$sht(natping=>$uac_req(ouri)) = $null;
sht_unlock("natping=>natpinglock");
$sht(natpingfail=>$uac_req(ouri)) = $null;
sht_lock("natpingfrom=>natpingfromlock");
$sht(natpingfrom=>$uac_req(ouri)) = $null;
sht_unlock("natpingfrom=>natpingfromlock");
$sht(natpingfail=>$uac_req(ouri)) = $null;
}
} else {
@ -883,10 +955,9 @@ event_route[htable:expired:natping] {
}
event_route[htable:mod-init] {
xlog("event_route[htable:mod-init] {\n");
xlog("event_route[htable:mod-init] \n");
}
route[preload_pcscf] {
if ($shv(preload_pcscf) == 1) return;
$shv(preload_pcscf) = 1;
@ -904,12 +975,15 @@ route[preload_pcscf] {
}
$var(noalias) = $(dbr(resultset=>[$var(i),0]){re.subst,/^(.*);alias=.*/\1/}{nameaddr.uri});
# xlog("$$var(noalias) => $var(noalias) (via $var(ouri))\n");
sht_lock("natping=>natpinglock");
$sht(natping=>$var(ouri)) = $var(noalias);
sht_unlock("natping=>natpinglock");
$var(i) = $var(i) + 1;
}
}
sql_result_free("resultset");
}
#!endif
#!ifdef WITH_XMLRPC
include_file "route/xmlrpc.cfg"

@ -1,28 +1,50 @@
# IP-Address for incoming SIP-Traffic, in the following format:
# SIP / UDP
listen=udp:0.0.0.0:5060
listen=udp:11.22.33.44:5060
# SIP / TCP
#listen=tcp:0.0.0.0:5060
listen=tcp:11.22.33.44:5060
# SIP / TCP/TLS
#listen=tls:0.0.0.0:5061
#listen=tls:11.22.33.44:5061
# IPSEC / UDP
#!define IPSEC_LISTEN_ADDR "0.0.0.0"
#!define IPSEC_CLIENT_PORT 5062
#!define IPSEC_SERVER_PORT 5063
#!define IPSEC_LISTEN_ADDR "11.22.33.44"
#!define IPSEC_CLIENT_PORT 5100
#!define IPSEC_SERVER_PORT 6100
#!define IPSEC_MAX_CONN 10
alias=pcscf.mnc001.mcc001.3gppnetwork.org
# Value: 1 for true and 0 for false
#!define IPSEC_DELETE_UNUSED_TUNNELS 1
# Delay in seconds to delete contact from registrar
#!define CONTACT_DELETE_DELAY 10
# Logical OR of following flags:
# - IPSEC_SEND_FORCE_SOCKET 1
# - IPSEC_SETDSTURI_FULL 128
# - IPSEC_FORWARD_USEVIA 256
# - IPSEC_FORWARD_TRYTCP 512
#!define IPSEC_FORWARD_FLAGS 897
#!define RX_IMS_REG_DIALOG_DIRECTION 3
# IP used in Rx_AAR_Register - IP of this P-CSCF, to be used in the flow for the AF-signaling
#!define RX_AF_SIGNALING_IP "10.4.128.21"
# Uncomment the below line only when UE is behind double NAT (e.g. VoIP calling over WiFi/ CN behind a NAT)
##!define RX_AF_SIGNALING_IP "172.24.15.30"
alias=pcscf.ims.mnc001.mcc001.3gppnetwork.org
#!define MY_WS_PORT 80
#!define MY_WSS_PORT 443
#!define PCSCF_URL "sip:pcscf.mnc001.mcc001.3gppnetwork.org"
#!define PCSCF_URL "sip:pcscf.ims.mnc001.mcc001.3gppnetwork.org:5060"
#!define TCP_PROCESSES 8
#!subst "/NETWORKNAME/mnc001.mcc001.3gppnetwork.org/"
#!subst "/HOSTNAME/pcscf.mnc001.mcc001.3gppnetwork.org/"
#!subst "/NETWORKNAME/ims.mnc001.mcc001.3gppnetwork.org/"
#!subst "/HOSTNAME/pcscf.ims.mnc001.mcc001.3gppnetwork.org/"
#!subst "/PCRF_REALM/epc.mnc001.mcc001.3gppnetwork.org/"
# SIP-Address of capturing node, if not set, capturing is disabled.
##!define CAPTURE_NODE "sip:127.0.0.1:9060"
@ -41,7 +63,7 @@ alias=pcscf.mnc001.mcc001.3gppnetwork.org
#! Optional: Server-URL for Websocket-Requests
##!define WEBSOCKET_WEBSERVER "phone.ng-voice.com"
##!define TRF_FUNCTION "trf.mnc001.mcc001.3gppnetwork.org"
##!define TRF_FUNCTION "trf.ims.mnc001.mcc001.3gppnetwork.org"
#
# Several features can be enabled using '#!define WITH_FEATURE' directives:
@ -99,10 +121,10 @@ alias=pcscf.mnc001.mcc001.3gppnetwork.org
##!define WITH_XMLRPC
##!define WITH_IPBLOCK
##!define WITH_ANTIFLOOD
##!define WITH_RX
##!define WITH_RX_REG
##!define WITH_RX_CALL
##!define WITH_TCP
#!define WITH_RX
#!define WITH_RX_REG
#!define WITH_RX_CALL
#!define WITH_TCP
##!define WITH_RTPIPV4
##!define WITH_SBC
##!define WITH_SBC_CALL
@ -110,3 +132,6 @@ alias=pcscf.mnc001.mcc001.3gppnetwork.org
##!define WITH_RTPPING
##!define WITH_WEBSOCKET
#!define WITH_IPSEC
#!define WITH_IMS_HDR_CACHE
#!define WITH_PING_UDP
#!define WITH_PING_TCP

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<DiameterPeer
FQDN="pcscf.mnc001.mcc001.3gppnetwork.org"
FQDN="pcscf.ims.mnc001.mcc001.3gppnetwork.org"
Realm="ims.mnc001.mcc001.3gppnetwork.org"
Vendor_Id="10415"
Product_Name="CDiameterPeer"
@ -14,13 +14,13 @@
DefaultAuthSessionTimeout="3600"
MaxAuthSessionTimeout="3600"
>
<Peer FQDN="pcrf.mnc001.mcc001.3gppnetwork.org" Realm="ims.mnc001.mcc001.3gppnetwork.org" port="3868"/>
<Peer FQDN="pcrf.epc.mnc001.mcc001.3gppnetwork.org" Realm="epc.mnc001.mcc001.3gppnetwork.org" port="3868"/>
<Acceptor port="3871" bind="11.22.33.44"/>
<Auth id="16777236" vendor="10415"/> <!-- 3GPP Rx -->
<Auth id="16777236" vendor="0"/> <!-- 3GPP Rx -->
<DefaultRoute FQDN="pcrf.mnc001.mcc001.3gppnetwork.org" metric="10"/>
<DefaultRoute FQDN="pcrf.epc.mnc001.mcc001.3gppnetwork.org" metric="10"/>
</DiameterPeer>

@ -5,6 +5,10 @@ route[MO]
{
# Strip Transport from RURI:
$ru = $(ru{re.subst,/;transport=[A-Za-z]*//g});
xnotice("PCSCF MO: \n Destination URI: $du\n Request URI: $ru\n");
xnotice("Source IP and Port: ($si:$sp)\n Route-URI: $route_uri\n");
xnotice("Received IP and Port: ($Ri:$Rp)\n");
xnotice("Contact header: $ct\n");
# Process route headers, if any:
loose_route();
@ -20,12 +24,20 @@ route[MO]
# Add P-Charging-Vector
sip_p_charging_vector("g");
if (is_present_hf("P-Preferred-Identity") && pcscf_assert_identity("location", "$hdr(P-Preferred-Identity)")) {
if (is_present_hf("P-Preferred-Identity") && pcscf_assert_identity("location", "$hdr(P-Preferred-Identity)") && $hdr(P-Preferred-Identity) =~ "sip:.*") {
append_hf("P-Asserted-Identity: $hdr(P-Preferred-Identity)\r\n");
} else if (is_present_hf("P-Asserted-Identity") && pcscf_assert_identity("location", "$hdr(P-Asserted-Identity)")) {
} else if (is_present_hf("P-Asserted-Identity") && pcscf_assert_identity("location", "$hdr(P-Asserted-Identity)") && $hdr(P-Asserted-Identity) =~ "sip:.*") {
append_hf("P-Asserted-Identity: $hdr(P-Asserted-Identity)\r\n");
} else if (pcscf_assert_identity("location", "$(fu{tobody.uri})")) {
# For broken SIP implementation in Samsung devices
if ($fu =~ "tel:.*") {
$var(new_hdr) = $(fu{tobody.uri}) + "@NETWORKNAME";
$var(new_hdr) = $(var(new_hdr){re.subst,/tel:/sip:/g});
append_hf("P-Asserted-Identity: <$var(new_hdr)>\r\n");
$fu = $var(new_hdr);
} else {
append_hf("P-Asserted-Identity: <$(fu{tobody.uri})>\r\n");
}
} else {
append_hf("P-Asserted-Identity: <$pcscf_asserted_identity>\r\n");
}
@ -81,8 +93,7 @@ route[MO]
} else {
append_hf("P-Visited-Network-ID: NETWORKNAME\r\n");
}
set_dlg_profile("orig");
t_on_reply("MO_reply");
}
@ -90,19 +101,23 @@ route[MO]
# Replies to Originating Initial Requests
######################################################################
onreply_route[MO_reply] {
xnotice("PCSCF MO_reply: \n Destination URI: $du\n Request URI: $ru\n");
xnotice("Source IP and Port: ($si:$sp)\n Route-URI: $route_uri\n");
xnotice("Received IP and Port: ($Ri:$Rp)\n");
xnotice("Contact header: $ct\n");
if (is_present_hf("C-Params")) {
remove_hf("Contact");
remove_hf("C-Params");
append_hf("Contact: $ct;$hdr(C-Params)\r\n");
}
#!ifdef WITH_IPSEC
ipsec_forward("location");
ipsec_forward("location", IPSEC_FORWARD_FLAGS);
#!endif
# In case of 1xx and 2xx do NAT
if(status=~"[12][0-9][0-9]")
route(NATMANAGE);
#!ifdef WITH_RX
if (t_check_status("183")){
if (t_check_status("183|200") && has_body("application/sdp")){
xlog("L_DBG", "IMS: Received 183/200 inside orig_initial_reply\n");
if (t_is_retr_async_reply()) {
@ -115,28 +130,9 @@ onreply_route[MO_reply] {
$avp(TTAG_CUSTOM_AVP)=$tt;
$avp(CALLID_CUSTOM_AVP)=$ci;
$var(aarret) = Rx_AAR("MO_aar_reply", "orig", "", -1);
xlog("L_DBG", "AAR return code is $var(aarret)\n");
switch ($var(aarret)) {
case 1:
#suspend was successful and we must break
xlog("L_DBG", "Success sending AAR for media\n");
exit;
case -1:
#this is retransmitted response so we just drop it
xlog("L_DBG", "AAR still processing dropping retransmitted response\n");
drop();
exit;
default:
xlog("L_ERR", "Unable to send AAR for media\n");
#comment this if you want to allow even if Rx fails
dlg_terminate("all", "Sorry no QoS available");
exit;
}
if (Rx_AAR("MO_aar_reply","orig","",-1) == 0) {
exit;
}
}
}
@ -166,17 +162,39 @@ route[MO_aar_reply]
# In-Dialog-Mo-Requests
######################################################################
route[MO_indialog] {
xnotice("PCSCF MO_indialog: \n Destination URI: $du\n Request URI: $ru\n");
xnotice("Source IP and Port: ($si:$sp)\n Route-URI: $route_uri\n");
xnotice("Received IP and Port: ($Ri:$Rp)\n");
xnotice("Contact header: $ct\n");
setflag(FLT_MOBILE_ORIG);
t_on_reply("MO_indialog_reply");
# Append rport only if its a request coming from UE
if (is_request() && ($hdrc(Via) == 1)) {
force_rport();
}
#!ifdef WITH_IPSEC
if ($dd != "" && $rd != "" && $fs != "") {
if ($rd =~ ".*" + $dd + ".*") {
ipsec_forward("location", IPSEC_FORWARD_FLAGS);
}
}
#!endif
}
onreply_route[MO_indialog_reply] {
xnotice("PCSCF MO_indialog_reply: \n Destination URI: $du\n Request URI: $ru\n");
xnotice("Source IP and Port: ($si:$sp)\n Route-URI: $route_uri\n");
xnotice("Received IP and Port: ($Ri:$Rp)\n");
xnotice("Contact header: $ct\n");
# In case of 1xx and 2xx do NAT
if(status=~"[12][0-9][0-9]")
route(NATMANAGE);
#!ifdef WITH_RX
if(t_check_status("200") && is_method("INVITE")) {
if (t_check_status("183|200") && has_body("application/sdp") && !is_method("PRACK")) {
if (t_is_retr_async_reply()) {
xlog("L_DBG", "Dropping retransmitted reply which is still currently suspended\n");
drop();
@ -188,27 +206,8 @@ onreply_route[MO_indialog_reply] {
$avp(TTAG_CUSTOM_AVP)=$tt;
$avp(CALLID_CUSTOM_AVP)=$ci;
$var(aarret) = Rx_AAR("MO_indialog_aar_reply", "orig", "", -1);
xlog("L_DBG", "AAR return code is $var(aarret)\n");
switch ($var(aarret)) {
case 1:
#suspend was successful and we must break
xlog("L_DBG", "Success sending AAR for media\n");
exit;
case -1:
#this is retransmitted response so we just drop it
xlog("L_DBG", "AAR still processing dropping retransmitted response\n");
drop();
exit;
default:
xlog("L_ERR", "Unable to send AAR for media\n");
#comment this if you want to allow even if Rx fails
dlg_terminate("all", "Sorry no QoS available");
exit;
if (Rx_AAR("MO_indialog_aar_reply","orig","",-1) == 0) {
exit;
}
}
}

@ -2,6 +2,14 @@
# Terminating, Initial requests
######################################################################
route[MT] {
xnotice("PCSCF MT: \n Destination URI: $du\n Request URI: $ru\n");
xnotice("Source IP and Port: ($si:$sp)\n Route-URI: $route_uri\n");
xnotice("Received IP and Port: ($Ri:$Rp)\n");
xnotice("Contact header: $ct\n");
set_dlg_profile("term");
#!ifdef WITH_IPSEC
ipsec_forward("location", IPSEC_FORWARD_FLAGS);
#!endif
t_on_reply("MT_reply");
}
@ -9,14 +17,23 @@ route[MT] {
# Replies to Originating Initial Requests
######################################################################
onreply_route[MT_reply] {
xnotice("PCSCF MT_reply: \n Destination URI: $du\n Request URI: $ru\n");
xnotice("Source IP and Port: ($si:$sp)\n Route-URI: $route_uri\n");
xnotice("Received IP and Port: ($Ri:$Rp)\n");
xnotice("Contact header: $ct\n");
if (!strempty($(ct{tobody.params}))) {
append_hf("C-Params: $(ct{tobody.params})\r\n");
}
# In case of 1xx and 2xx do NAT
if(status=~"[12][0-9][0-9]")
route(NATMANAGE);
#!ifdef WITH_RX
if (t_check_status("183")){
if (t_check_status("183|200") && has_body("application/sdp")){
xnotice("PCSCF MT_reply: \n Destination URI: $du\n Request URI: $ru\n");
xnotice("Source IP and Port: ($si:$sp)\n Route-URI: $route_uri\n");
xnotice("Received IP and Port: ($Ri:$Rp)\n");
xnotice("Contact header: $ct\n");
xlog("L_DBG", "IMS: Received 183 inside term_initial_reply\n");
xlog("L_DBG", "About to test if this is a retransmitted reply which is still currently suspended\n");
@ -25,33 +42,14 @@ onreply_route[MT_reply] {
drop();
}
xlog("L_DBG", "Diameter: Term authorizing media via Rx\n");
xlog("L_DBG","Diameter: Term authorizing media via Rx\n");
$avp(FTAG_CUSTOM_AVP)=$ft;
$avp(TTAG_CUSTOM_AVP)=$tt;
$avp(CALLID_CUSTOM_AVP)=$ci;
$var(aarret) = Rx_AAR("MT_aar_reply", "term", "", -1);
xlog("L_DBG", "AAR return code is $var(aarret)\n");
switch ($var(aarret)) {
case 1:
#suspend was successful and we must break
xlog("L_DBG", "Success sending AAR for media\n");
exit;
case -1:
#this is retransmitted response so we just drop it
xlog("L_DBG", "AAR still processing dropping retransmitted response\n");
drop();
exit;
default:
xlog("L_ERR", "Unable to send AAR for media\n");
#comment this if you want to allow even if Rx fails
dlg_terminate("all", "Sorry no QoS available");
exit;
}
if (Rx_AAR("MT_aar_reply","term","",-1) == 0) {
exit;
}
}
}
@ -70,7 +68,7 @@ route[MT_aar_reply]
xlog("L_ERR", "IMS: ftag: "+ "$avp(FTAG_CUSTOM_AVP)");
xlog("L_ERR", "IMS: callid: "+ "$avp(CALLID_CUSTOM_AVP)");
#comment this if you want to allow even if Rx fails
if(dlg_get("$avp(CALLID_CUSTOM_AVP)", "$avp(FTAG_CUSTOM_AVP)", "$avp(TTAG_CUSTOM_AVP)")){
if(dlg_get("$avp(CALLID_CUSTOM_AVP)","$avp(FTAG_CUSTOM_AVP)","$avp(TTAG_CUSTOM_AVP)")){
dlg_terminate("all", "Sorry no QoS available");
exit;
}
@ -83,49 +81,52 @@ route[MT_aar_reply]
# In-Dialog-MT-Requests
######################################################################
route[MT_indialog] {
xnotice("PCSCF MT_indialog: \n Destination URI: $du\n Request URI: $ru\n");
xnotice("Source IP and Port: ($si:$sp)\n Route-URI: $route_uri\n");
xnotice("Received IP and Port: ($Ri:$Rp)\n");
xnotice("Contact header: $ct\n");
#resetflag(FLT_MOBILE_ORIG);
t_on_reply("MT_indialog_reply");
# Append rport only if its a request coming from UE
if (is_request() && ($hdrc(Via) == 1)) {
force_rport();
}
#!ifdef WITH_IPSEC
if ($dd != "" && $rd != "" && $fs != "") {
if ($rd =~ ".*" + $dd + ".*") {
ipsec_forward("location", IPSEC_FORWARD_FLAGS);
}
}
#!endif
}
onreply_route[MT_indialog_reply] {
xnotice("PCSCF MT_indialog_reply: \n Destination URI: $du\n Request URI: $ru\n");
xnotice("Source IP and Port: ($si:$sp)\n Route-URI: $route_uri\n");
xnotice("Received IP and Port: ($Ri:$Rp)\n");
xnotice("Contact header: $ct\n");
# In case of 1xx and 2xx do NAT
if(status=~"[12][0-9][0-9]")
route(NATMANAGE);
#!ifdef WITH_RX
if(t_check_status("200") && is_method("INVITE")) {
if (t_check_status("183|200") && has_body("application/sdp") && !is_method("PRACK")) {
if (t_is_retr_async_reply()) {
xlog("L_DBG", "Dropping retransmitted reply which is still currently suspended\n");
drop();
}
xlog("L_DBG", "IMS: TERM_SUBSEQUENT reply. This is a 200 OK to a re-INVITE\n");
xlog("L_DBG", "Diameter: Term authorizing media via Rx\n");
xlog("L_DBG","Diameter: Term authorizing media via Rx\n");
$avp(FTAG_CUSTOM_AVP)=$ft;
$avp(TTAG_CUSTOM_AVP)=$tt;
$avp(CALLID_CUSTOM_AVP)=$ci;
$var(aarret) = Rx_AAR("MT_indialog_aar_reply", "term", "", -1);
xlog("L_DBG", "AAR return code is $var(aarret)\n");
switch ($var(aarret)) {
case 1:
#suspend was successful and we must break
xlog("L_DBG", "Success sending AAR for media\n");
exit;
case -1:
#this is retransmitted response so we just drop it
xlog("L_DBG", "AAR still processing dropping retransmitted response\n");
drop();
exit;
default:
xlog("L_ERR", "Unable to send AAR for media\n");
#comment this if you want to allow even if Rx fails
dlg_terminate("all", "Sorry no QoS available");
exit;
}
if (Rx_AAR("MT_indialog_aar_reply","term","",-1) == 0) {
exit;
}
}
}
@ -142,7 +143,7 @@ route[MT_indialog_aar_reply]
xlog("L_ERR", "IMS: ftag: "+ "$avp(FTAG_CUSTOM_AVP)");
xlog("L_ERR", "IMS: callid: "+ "$avp(CALLID_CUSTOM_AVP)");
#comment this if you want to allow even if Rx fails
if(dlg_get("$avp(CALLID_CUSTOM_AVP)", "$avp(FTAG_CUSTOM_AVP)", "$avp(TTAG_CUSTOM_AVP)")){
if(dlg_get("$avp(CALLID_CUSTOM_AVP)","$avp(FTAG_CUSTOM_AVP)","$avp(TTAG_CUSTOM_AVP)")){
dlg_terminate("all", "Sorry no QoS available");
exit;
}

@ -3,9 +3,13 @@
######################################################################
route[REGISTER] {
# Provide some statistics
if ($sht(a=>$ci::start_time) == $null || $sht(a=>$ci::start_time) == 0) {
$sht(a=>$ci::start_time) = $TV(Sn);
}
if ($sht(a=>$ci::start_time) == $null || $sht(a=>$ci::start_time) == 0) {
$sht(a=>$ci::start_time) = $TV(Sn);
}
xnotice("PCSCF REGISTER: \n Destination URI: $du\n Request URI: $ru\n");
xnotice("Source IP and Port: ($si:$sp)\n Route-URI: $route_uri\n");
xnotice("Received IP and Port: ($Ri:$Rp)\n");
xnotice("Contact header: $ct\n");
# Strip Transport from RURI:
$ru = $(ru{re.subst,/;transport=[A-Za-z]*//g});
@ -17,6 +21,12 @@ route[REGISTER] {
exit;
}
#!ifdef WITH_IPSEC
$sht(ipsec_clients=>$(ct{nameaddr.uri})) = $null;
if ($hdr(Security-Client) =~ ".*ipsec-3gpp.*") {
$sht(ipsec_clients=>$(ct{nameaddr.uri})) = 1;
}
#!endif
# Strip additional Tags from RURI:
if ($rU == $null)
@ -24,25 +34,30 @@ route[REGISTER] {
else
$ru = "sip:"+$rU+"@"+$rd;
#!ifdef WITH_RX
xlog("L_DBG", "Subscribing to signalling bearer status\n");
#!ifdef WITH_RX
if ($expires(min) != 0) {
xlog("L_DBG","Subscribing to signalling bearer status\n");
Rx_AAR_Register("REG_AAR_REPLY", "location");
switch ($retcode) {
case -1:
# There was an error sending the AAR-Request:
xlog("L_ERR", "Diameter: AAR failed on subscription to signalling\n");
send_reply("403", "Can't register to QoS for signalling");
exit;
break;
case 0:
# We are waiting for an async reply, just exit here.
exit;
break;
case 1:
# We did not need to send AAR, so just continue as normal
route(REGISTER_CONTINUE);
break;
Rx_AAR_Register("REG_AAR_REPLY", "location");
switch ($retcode) {
case -1:
# There was an error sending the AAR-Request:
xlog("L_ERR", "Diameter: AAR failed on subscription to signalling\n");
send_reply("403", "Can't register to QoS for signalling");
exit;
break;
case 0:
# We are waiting for an async reply, just exit here.
exit;
break;
case 1:
# We did not need to send AAR, so just continue as normal
route(REGISTER_CONTINUE);
break;
}
} else {
# Proceed with Registering:
route(REGISTER_CONTINUE);
}
exit;
}
@ -125,23 +140,108 @@ onreply_route[REGISTER_reply]
$sht(failedauth=>$T_req($si)) = $null;
#!endif
pcscf_save("location");
#!ifdef WITH_NATPING
#!ifdef WITH_PING_UDP
if ($T_req($pr) == "udp") {
$var(ouri) = "sip:"+$T_req($si)+":"+$T_req($sp);
#if ($T_req($pr) == "udp") {
if ($pr == "udp") {
sht_lock("natping=>natpinglock");
if ($(T_req($hdr(Security-Client))) =~ ".*ipsec-3gpp.*") {
$var(sec_client) = $(T_req($hdr(Security-Client)));
xnotice("Security-Client=$var(sec_client)\n");
$var(sc_port_c) = $(var(sec_client){re.subst,/.*port-c=([0-9]*).*$/\1/s});
xnotice("port-c=$var(sc_port_c)\n");
$var(sc_port_s) = $(var(sec_client){re.subst,/.*port-s=([0-9]*).*$/\1/s});
xnotice("port-s=$var(sc_port_s)\n");
$var(ouri) = "sip:"+$T_req($si)+":"+$var(sc_port_s);
} else {
$var(ouri) = "sip:"+$T_req($si)+":"+$T_req($sp);
}
$sht(natping=>$var(ouri)) = $(T_req($ct){nameaddr.uri});
sht_unlock("natping=>natpinglock");
sht_lock("natpingfrom=>natpingfromlock");
if ($(T_req($hdr(Security-Verify))) =~ ".*ipsec-3gpp.*") {
$var(sec_verify) = $(T_req($hdr(Security-Verify)));
xnotice("Security-Verify=$var(sec_verify)\n");
$var(sv_port_c) = $(var(sec_verify){re.subst,/.*port-c=([0-9]*).*$/\1/s});
xnotice("port-c=$var(sv_port_c)\n");
$var(sv_port_s) = $(var(sec_verify){re.subst,/.*port-s=([0-9]*).*$/\1/s});
xnotice("port-s=$var(sv_port_s)\n");
$sht(natpingfrom=>$var(ouri)) = "udp:"+$T_req($Ri)+":"+$var(sv_port_c);
} else {
$sht(natpingfrom=>$var(ouri)) = "udp:"+$T_req($Ri)+":"+$T_req($Rp);
}
sht_unlock("natpingfrom=>natpingfromlock");
}
#!endif
#!ifdef WITH_PING_TCP
if ($T_req($pr) == "tcp") {
$var(ouri) = "sip:"+$T_req($si)+":"+$T_req($sp)+";transport=tcp";
#if ($T_req($pr) == "tcp") {
if ($pr == "tcp") {
sht_lock("natping=>natpinglock");
if ($(T_req($hdr(Security-Client))) =~ ".*ipsec-3gpp.*") {
$var(sec_client) = $(T_req($hdr(Security-Client)));
xnotice("Security-Client=$var(sec_client)\n");
$var(sc_port_c) = $(var(sec_client){re.subst,/.*port-c=([0-9]*).*$/\1/s});
xnotice("port-c=$var(sc_port_c)\n");
$var(sc_port_s) = $(var(sec_client){re.subst,/.*port-s=([0-9]*).*$/\1/s});
xnotice("port-s=$var(sc_port_s)\n");
$var(ouri) = "sip:"+$T_req($si)+":"+$var(sc_port_s)+";transport=tcp";
} else {
$var(ouri) = "sip:"+$T_req($si)+":"+$T_req($sp)+";transport=tcp";
}
$sht(natping=>$var(ouri)) = $(T_req($ct){nameaddr.uri});
sht_unlock("natping=>natpinglock");
sht_lock("natpingfrom=>natpingfromlock");
if ($(T_req($hdr(Security-Verify))) =~ ".*ipsec-3gpp.*") {
$var(sec_verify) = $(T_req($hdr(Security-Verify)));
xnotice("Security-Verify=$var(sec_verify)\n");
$var(sv_port_c) = $(var(sec_verify){re.subst,/.*port-c=([0-9]*).*$/\1/s});
xnotice("port-c=$var(sv_port_c)\n");
$var(sv_port_s) = $(var(sec_verify){re.subst,/.*port-s=([0-9]*).*$/\1/s});
xnotice("port-s=$var(sv_port_s)\n");
$sht(natpingfrom=>$var(ouri)) = "tcp:"+$T_req($Ri)+":"+$var(sv_port_c);
} else {
$sht(natpingfrom=>$var(ouri)) = "tcp:"+$T_req($Ri)+":"+$T_req($Rp);
}
sht_unlock("natpingfrom=>natpingfromlock");
}
#!endif
#!ifdef WITH_PING_TLS
if ($T_req($pr) == "tls") {
$var(ouri) = "sip:"+$T_req($si)+":"+$T_req($sp)+";transport=tls";
#if ($T_req($pr) == "tls") {
if ($pr == "tls") {
sht_lock("natping=>natpinglock");
if ($(T_req($hdr(Security-Client))) =~ ".*ipsec-3gpp.*") {
$var(sec_client) = $(T_req($hdr(Security-Client)));
xnotice("Security-Client=$var(sec_client)\n");
$var(sc_port_c) = $(var(sec_client){re.subst,/.*port-c=([0-9]*).*$/\1/s});
xnotice("port-c=$var(sc_port_c)\n");
$var(sc_port_s) = $(var(sec_client){re.subst,/.*port-s=([0-9]*).*$/\1/s});
xnotice("port-s=$var(sc_port_s)\n");
$var(ouri) = "sip:"+$T_req($si)+":"+$var(sc_port_s)+";transport=tls";
} else {
$var(ouri) = "sip:"+$T_req($si)+":"+$T_req($sp)+";transport=tls";
}
$sht(natping=>$var(ouri)) = $(T_req($ct){nameaddr.uri});
sht_unlock("natping=>natpinglock");
sht_lock("natpingfrom=>natpingfromlock");
if ($(T_req($hdr(Security-Verify))) =~ ".*ipsec-3gpp.*") {
$var(sec_verify) = $(T_req($hdr(Security-Verify)));
xnotice("Security-Verify=$var(sec_verify)\n");
$var(sv_port_c) = $(var(sec_verify){re.subst,/.*port-c=([0-9]*).*$/\1/s});
xnotice("port-c=$var(sv_port_c)\n");
$var(sv_port_s) = $(var(sec_verify){re.subst,/.*port-s=([0-9]*).*$/\1/s});
xnotice("port-s=$var(sv_port_s)\n");
$sht(natpingfrom=>$var(ouri)) = "tls:"+$T_req($Ri)+":"+$var(sv_port_c);
} else {
$sht(natpingfrom=>$var(ouri)) = "tls:"+$T_req($Ri)+":"+$T_req($Rp);
}
sht_unlock("natpingfrom=>natpingfromlock");
}
#!endif
#!endif
@ -153,24 +253,38 @@ onreply_route[REGISTER_reply]
$var(diff_ms) = $var(diff_secs)*1000 + ($var(diff_usecs)/1000);
$sht(a=>$ci::start_time)=0;
$var(stat_add) = "+" + $var(diff_ms);
xlog("L_DBG", "REGISTER SUCCESS[$ci] took $var(stat_add)ms\n");
xlog("L_DBG", "REGISTER SUCCESS[$ci] took $var(stat_add)ms\n");
update_stat("register_success", "+1");
update_stat("register_time", "$var(stat_add)");
#!ifdef WITH_IPSEC
ipsec_forward("location");
}
ipsec_forward("location", IPSEC_FORWARD_FLAGS);
}
else {
if (t_check_status("401")) {
#Remove ck and ik from Authentication header
$var(rem_ck) = $(hdr(WWW-Authenticate){re.subst,/ck="[a-zA-Z0-9]*", //g});
$var(rem_ik) = $(var(rem_ck){re.subst,/ik="[a-zA-Z0-9]*", //g});
remove_hf("WWW-Authenticate");
append_hf("WWW-Authenticate: $var(rem_ik)\r\n");
if(ipsec_create("location")!=1) {
if($(T_req($hdr(Security-Client))) != $null && ipsec_create("location", IPSEC_DELETE_UNUSED_TUNNELS)!=1) {
send_reply("503", "Service Unavailable (Create ipsec failed)");
}
}
if ($sht(ipsec_clients=>$(T_req($ct){nameaddr.uri})) != $null) {
$var(sec_client) = $(T_req($hdr(Security-Client)));
xnotice("Security-Client=$var(sec_client)\n");
$var(sc_port_c) = $(var(sec_client){re.subst,/.*port-c=([0-9]*).*$/\1/s});
xnotice("port-c=$var(sc_port_c)\n");
$var(sc_port_s) = $(var(sec_client){re.subst,/.*port-s=([0-9]*).*$/\1/s});
xnotice("port-s=$var(sc_port_s)\n");
}
xnotice("Expires=$(T_req($expires(min)))\n");
if (is_present_hf("WWW-Authenticate")) {
# Remove ck and ik:
$var(old_hdr) = $hdr(WWW-Authenticate);
xnotice("Old header - WWW-Authenticate=$var(old_hdr)\n");
remove_hf("WWW-Authenticate");
$var(new_hdr) = $(hdr(WWW-Authenticate){re.subst,/(, *)?(ck|ik)=\"\w+\"//gi});
if ($(var(new_hdr){s.len}) > 0) {
append_hf("WWW-Authenticate: $var(new_hdr)\r\n");
}
xnotice("New header - WWW-Authenticate=$var(new_hdr)\n");
}
}
#!endif
}
exit;
@ -187,16 +301,16 @@ failure_route[REGISTER_failure]
else
$sht(failedauth=>$si) = 1;
if ($sht(failedauth=>$si) > 10) {
xlog("L_ALERT", "ALERT: blocking $rm from $fu (IP:$si:$sp), more than 5 failed auth requests!\n");
xlog("L_ALERT","ALERT: blocking $rm from $fu (IP:$si:$sp), more than 5 failed auth requests!\n");
xlog("Blocking traffic from $si\n");
$sht(ipban=>$si) = 1;
}
update_stat("register_failed", "+1");
update_stat("register_failed", "+1");
}
#!endif
if (t_check_status("408")) {
send_reply("504", "Server Time-Out");
update_stat("register_failed", "+1");
send_reply("504","Server Time-Out");
update_stat("register_failed", "+1");
exit;
}
}

@ -1,50 +1,50 @@
# RTPProxy control
route[ENC_SRTP] {
add_rr_param(";rm=1");
$avp(rtpproxy_offer_flags) = "replace-origin replace-session-connection ICE=force SRTP AVP";
$avp(rtpproxy_answer_flags) = "replace-origin replace-session-connection ICE=remove RTP AVP";
$avp(rtpproxy_offer_flags) = "flags=loop-protect replace-origin replace-session-connection ICE=force SRTP AVP";
$avp(rtpproxy_answer_flags) = "flags=loop-protect replace-origin replace-session-connection ICE=remove RTP AVP";
}
route[DEC_SRTP] {
add_rr_param(";rm=2");
$avp(rtpproxy_offer_flags) = "replace-origin replace-session-connection ICE=remove RTP AVP";
$avp(rtpproxy_answer_flags) = "replace-origin replace-session-connection ICE=force SRTP AVP";
$avp(rtpproxy_offer_flags) = "flags=loop-protect replace-origin replace-session-connection ICE=remove RTP AVP";
$avp(rtpproxy_answer_flags) = "flags=loop-protect replace-origin replace-session-connection ICE=force SRTP AVP";
}
route[ENC_WS_RTP] {
add_rr_param(";rm=3");
$avp(rtpproxy_offer_flags) = "replace-origin replace-session-connection ICE=force RTP AVPF";
$avp(rtpproxy_answer_flags) = "replace-origin replace-session-connection ICE=remove RTP AVP";
$avp(rtpproxy_offer_flags) = "flags=loop-protect replace-origin replace-session-connection ICE=force RTP AVPF";
$avp(rtpproxy_answer_flags) = "flags=loop-protect replace-origin replace-session-connection ICE=remove RTP AVP";
}
route[DEC_WS_RTP] {
add_rr_param(";rm=4");
$avp(rtpproxy_offer_flags) = "replace-origin replace-session-connection ICE=remove RTP AVP";
$avp(rtpproxy_answer_flags) = "replace-origin replace-session-connection ICE=force RTP AVPF";
$avp(rtpproxy_offer_flags) = "flags=loop-protect replace-origin replace-session-connection ICE=remove RTP AVP";
$avp(rtpproxy_answer_flags) = "flags=loop-protect replace-origin replace-session-connection ICE=force RTP AVPF";
}
route[ENC_WSS_RTP] {
add_rr_param(";rm=5");
$avp(rtpproxy_offer_flags) = "replace-origin replace-session-connection ICE=force SRTP AVPF DTLS=passive";
$avp(rtpproxy_answer_flags) = "replace-origin replace-session-connection ICE=remove RTP AVP";
$avp(rtpproxy_offer_flags) = "flags=loop-protect replace-origin replace-session-connection ICE=force SRTP AVPF DTLS=passive";
$avp(rtpproxy_answer_flags) = "flags=loop-protect replace-origin replace-session-connection ICE=remove RTP AVP";
}
route[DEC_WSS_RTP] {
add_rr_param(";rm=6");
$avp(rtpproxy_offer_flags) = "replace-origin replace-session-connection ICE=remove RTP AVP";
$avp(rtpproxy_answer_flags) = "replace-origin replace-session-connection ICE=force SRTP AVPF DTLS=passive";
$avp(rtpproxy_offer_flags) = "flags=loop-protect replace-origin replace-session-connection ICE=remove RTP AVP";
$avp(rtpproxy_answer_flags) = "flags=loop-protect replace-origin replace-session-connection ICE=force SRTP AVPF DTLS=passive";
}
route[ENC_RTP] {
add_rr_param(";rm=7");
$avp(rtpproxy_offer_flags) = "replace-origin replace-session-connection ICE=force RTP AVP";
$avp(rtpproxy_answer_flags) = "replace-origin replace-session-connection ICE=remove RTP AVP";
$avp(rtpproxy_offer_flags) = "flags=loop-protect replace-origin replace-session-connection ICE=force RTP AVP";
$avp(rtpproxy_answer_flags) = "flags=loop-protect replace-origin replace-session-connection ICE=remove RTP AVP";
}
route[DEC_RTP] {
add_rr_param(";rm=8");
$avp(rtpproxy_offer_flags) = "replace-origin replace-session-connection ICE=remove RTP AVP";
$avp(rtpproxy_answer_flags) = "replace-origin replace-session-connection ICE=force RTP AVP";
$avp(rtpproxy_offer_flags) = "flags=loop-protect replace-origin replace-session-connection ICE=remove RTP AVP";
$avp(rtpproxy_answer_flags) = "flags=loop-protect replace-origin replace-session-connection ICE=force RTP AVP";
}
# RTPProxy control
@ -75,20 +75,20 @@ route[NATMANAGE] {
xlog("L_DBG", "No RM Param\n");
return;
}
if (is_request()) {
if (isflagset(FLT_MOBILE_ORIG) && is_direction("downstream")) {
xlog("L_DBG", "1) add_contact_alias();");
if (($fU != $null && is_in_profile("caller", "$fU")) ||
($tU != $null && is_in_profile("callee", "$tU"))) {
# In-Dialog Request from MO side
if (is_request() && isflagset(FLT_MOBILE_ORIG)) {
add_contact_alias();
} else if (!isflagset(FLT_MOBILE_ORIG) && is_direction("upstream")) {
xlog("L_DBG", "2) add_contact_alias();");
} else if (is_reply() && !isflagset(FLT_MOBILE_ORIG)) {
add_contact_alias();
}
} else {
if (!isflagset(FLT_MOBILE_ORIG) && is_direction("downstream")) {
xlog("L_DBG", "1) ADD_contact_alias();");
} else if (($fU != $null && is_in_profile("callee", "$fU")) ||
($tU != $null && is_in_profile("caller", "$tU"))) {
# In-Dialog Request from MT side
if (is_request() && !isflagset(FLT_MOBILE_ORIG)) {
add_contact_alias();
} else if (isflagset(FLT_MOBILE_ORIG) && is_direction("downstream")) {
xlog("L_DBG", "2) ADD_contact_alias();");
} else if (is_reply() && isflagset(FLT_MOBILE_ORIG)) {
add_contact_alias();
}
}
@ -103,7 +103,8 @@ route[NATMANAGE] {
$avp(setid) = 1;
$avp(extra_id) = "mo";
} else {
$avp(setid) = 2;
$avp(setid) = 1;
# $avp(setid) = 2;
$avp(extra_id) = "mt";
}
@ -129,17 +130,44 @@ route[NATMANAGE] {
return;
#!endif
# Fix for calling between UEs not supporting preconditioning
if(sdp_get_line_startswith("$avp(mline)", "a=inactive")) {
xlog("m-line: $avp(mline)\n");
sdp_remove_line_by_prefix("a=inactive");
$sdp(body) = $sdp(body) + "a=sendrecv\r\n";
msg_apply_changes();
}
if ((is_reply() && ($T_req($tt) != $null)) || (is_request() && has_totag())) {
rtpengine_manage();
if (($fU != $null && is_in_profile("caller", "$fU")) ||
($tU != $null && is_in_profile("callee", "$tU"))) {
# In-Dialog Request from MO side
if (is_request() && isflagset(FLT_MOBILE_ORIG)) {
rtpengine_manage();
} else if (is_reply() && !isflagset(FLT_MOBILE_ORIG)) {
rtpengine_manage();
}
} else if (($fU != $null && is_in_profile("callee", "$fU")) ||
($tU != $null && is_in_profile("caller", "$tU"))) {
# In-Dialog Request from MT side
if (is_request() && !isflagset(FLT_MOBILE_ORIG)) {
rtpengine_manage();
} else if (is_reply() && isflagset(FLT_MOBILE_ORIG)) {
rtpengine_manage();
}
}
} else {
# Initial Requests
if ($avp(rtpproxy_offer_flags) == $null)
return;
if ($avp(rtpproxy_answer_flags) == $null)
return;
if (is_request()) {
rtpengine_manage($avp(rtpproxy_offer_flags));
} else {
if (is_request() && isflagset(FLT_MOBILE_ORIG)) {
set_dlg_profile("caller", "$fU");
rtpengine_manage($avp(rtpproxy_offer_flags));
} else if (is_reply() && !isflagset(FLT_MOBILE_ORIG)) {
set_dlg_profile("callee", "$tU");
rtpengine_manage($avp(rtpproxy_answer_flags));
}
}

@ -62,15 +62,17 @@ dns=no # (cmd. line: -r)
rev_dns=no # (cmd. line: -R)
# Do SRV-Loadbalancing:
dns_srv_lb=yes
dns_srv_lb=on
# Always: Also try IPv6:
dns_try_ipv6=yes
dns_try_ipv6=on
# Always prefer IPv6:
dns_cache_flags=6
dns_cache_flags=4
# DNS-Based failover
use_dns_failover = on
# Query NAPTR-Records as well:
dns_try_naptr=no
dns_try_naptr=on
# DNS cache won't be used (all dns lookups will result into a DNS request)
use_dns_cache=off
#!ifdef WITH_XMLRPC
#!ifndef WITH_TCP
@ -93,13 +95,13 @@ tcp_children=TCP_PROCESSES
disable_tcp=yes
#!endif
children=12
children=4
system.shutdownmode = 0 desc "System shutdown mode"
system.service = "Serving-CSCF" desc "Function of this server"
# ------------------ module loading ----------------------------------
mpath="/usr/lib64/kamailio/modules_k/:/usr/lib64/kamailio/modules/:/usr/lib/kamailio/modules_k/:/usr/lib/kamailio/modules/"
mpath="/usr/lib64/kamailio/modules/:/usr/lib/kamailio/modules/:/usr/lib/x86_64-linux-gnu/kamailio/modules/:/usr/local/lib64/kamailio/modules"
# (we try both the lib64 and the lib directory)
loadmodule "tm.so"
@ -159,12 +161,12 @@ loadmodule "siptrace.so"
loadmodule "debugger.so"
modparam("debugger", "mod_hash_size", 5)
modparam("debugger", "mod_level_mode", 1)
#modparam("debugger", "mod_level", "ims_usrloc_scscf=3")
#modparam("debugger", "mod_level", "ims_registrar_scscf=3")
modparam("debugger", "mod_level", "ims_usrloc_scscf=3")
modparam("debugger", "mod_level", "ims_registrar_scscf=3")
modparam("debugger", "mod_level", "ims_auth=3")
#modparam("debugger", "mod_level", "ims_isc=3")
modparam("debugger", "mod_level", "ims_isc=3")
modparam("debugger", "mod_level", "ims_dialog=3")
#modparam("debugger", "mod_level", "ims_charging=3")
modparam("debugger", "mod_level", "ims_charging=3")
##!endif
# ----------------- setting module-specific parameters ---------------
@ -190,12 +192,12 @@ loadmodule "jsonrpcs.so"
# ----- jsonrpcs params -----
modparam("jsonrpcs", "pretty_format", 1)
/* set the path to RPC fifo control file */
# modparam("jsonrpcs", "fifo_name", "/run/kamailio/kamailio_rpc.fifo")
modparam("jsonrpcs", "fifo_name", "/var/run/kamailio_scscf/kamailio_rpc.fifo")
/* set the path to RPC unix socket control file */
# modparam("jsonrpcs", "dgram_socket", "/run/kamailio/kamailio_rpc.sock")
modparam("jsonrpcs", "dgram_socket", "/var/run/kamailio_scscf/kamailio_rpc.sock")
# ----- ctl params -----
modparam("ctl", "binrpc", "unix:/run/kamailio_scscf/kamailio_ctl")
modparam("ctl", "binrpc", "unix:/var/run/kamailio_scscf/kamailio_ctl")
# ----- tm params -----
# auto-discard branches from previous serial forking leg
@ -220,7 +222,9 @@ modparam("rr", "custom_user_avp", "$avp(RR_CUSTOM_USER_AVP)")
# -- usrloc params --
modparam("ims_usrloc_scscf", "enable_debug_file", 0)
modparam("ims_usrloc_scscf", "matching_mode", 0)
modparam("ims_registrar_scscf", "max_contacts", 3);
modparam("ims_usrloc_scscf", "maxcontact", 5)
modparam("ims_usrloc_scscf", "maxcontact_3gpp", 5)
modparam("ims_registrar_scscf", "max_contacts", 5)
modparam("ims_usrloc_scscf", "maxcontact_behaviour", 2) #overwrite
#!ifdef DB_URL
#!ifdef DB_URL2
@ -228,7 +232,7 @@ modparam("ims_usrloc_scscf", "db_url", "cluster://cluster1")
#!else
modparam("ims_usrloc_scscf", "db_url", DB_URL)
#!endif
modparam("ims_usrloc_scscf", "db_mode", 1)
modparam("ims_usrloc_scscf", "db_mode", 0)
#!endif
modparam("ims_registrar_scscf", "subscription_default_expires", 654800)
modparam("ims_registrar_scscf", "subscription_min_expires", 3700)
@ -240,9 +244,16 @@ modparam("cdp", "config_file", "/etc/kamailio_scscf/scscf.xml")
# -- ims_dialog params --
modparam("ims_dialog", "dlg_flag", FLT_DIALOG)
modparam("ims_dialog", "timeout_avp", "$avp(DLG_TIMEOUT_AVP)")
modparam("ims_dialog", "detect_spirals", 1)
modparam("ims_dialog", "detect_spirals", 0)
modparam("ims_dialog", "profiles_no_value", "orig ; term")
#!ifdef DB_URL
#!ifdef DB_URL2
modparam("ims_dialog", "db_url", "cluster://cluster1")
#!else
modparam("ims_dialog", "db_url", DB_URL)
#!endif
modparam("ims_dialog", "db_mode", 0)
#!endif
#!ifdef WITH_XMLRPC
# ----- xmlrpc params -----
@ -271,11 +282,16 @@ modparam("ims_auth", "registration_default_algorithm", REG_AUTH_DEFAULT_ALG)
#!ifdef CXDX_FORCED_PEER
modparam("ims_auth", "cxdx_forced_peer", CXDX_FORCED_PEER)
#!endif
modparam("ims_auth", "cxdx_dest_realm", NETWORKNAME)
modparam("ims_auth", "cxdx_dest_realm", "HSS_REALM")
modparam("ims_auth", "av_check_only_impu", 1)
#modparam("ims_auth", "auth_data_timeout", 5)
modparam("ims_auth", "auth_used_vector_timeout", 300)
modparam("ims_auth", "max_nonce_reuse", 20)
modparam("ims_auth", "auth_vector_timeout", 60)
modparam("ims_auth", "auth_data_timeout", 600000)
modparam("ims_auth", "auth_used_vector_timeout", 600000)
modparam("ims_auth", "av_request_at_once", 1)
modparam("ims_auth", "av_request_at_sync", 1)
modparam("ims_auth", "registration_qop", "auth")
# -- ims_registrar_scscf params --
#!ifdef WITH_DEBUG
@ -292,7 +308,10 @@ modparam("ims_registrar_scscf", "support_wildcardPSI",1)
modparam("ims_registrar_scscf", "user_data_xsd", "/etc/kamailio_scscf/CxDataType_Rel7.xsd")
modparam("ims_registrar_scscf", "scscf_name", URI)
modparam("ims_registrar_scscf", "scscf_name", URI)
modparam("ims_registrar_scscf", "cxdx_dest_realm", NETWORKNAME)
modparam("ims_registrar_scscf", "cxdx_dest_realm", "HSS_REALM")
modparam("ims_registrar_scscf", "append_branches", 1)
modparam("ims_registrar_scscf", "user_data_always", 0)
modparam("ims_registrar_scscf", "ue_unsubscribe_on_dereg", 1)
#!ifdef WITH_MULTIDOMAIN
# ----- domain params -----
@ -353,10 +372,15 @@ modparam("dispatcher", "flags", 2)
# Dispatcher: Overwrite Destination address, if required.
modparam("dispatcher", "force_dst", 1)
# AVP's required for Fail-Over-Support:
modparam("dispatcher", "dst_avp", "$avp(DISPATCHER_DST_AVP)")
modparam("dispatcher", "grp_avp", "$avp(DISPATCHER_GRP_AVP)")
modparam("dispatcher", "cnt_avp", "$avp(DISPATCHER_CNT_AVP)")
modparam("dispatcher", "sock_avp", "$avp(DISPATCHER_SOCK_AVP)")
#modparam("dispatcher", "dst_avp", "$avp(DISPATCHER_DST_AVP)")
#modparam("dispatcher", "grp_avp", "$avp(DISPATCHER_GRP_AVP)")
#modparam("dispatcher", "cnt_avp", "$avp(DISPATCHER_CNT_AVP)")
#modparam("dispatcher", "sock_avp", "$avp(DISPATCHER_SOCK_AVP)")
#modparam("dispatcher", "xavp_dst", "$avp(DISPATCHER_DST_AVP)")
#modparam("dispatcher", "xavp_dst_mode", 0)
#modparam("dispatcher", "xavp_ctx", "$avp(DISPATCHER_CNT_AVP)")
#modparam("dispatcher", "xavp_ctx_mode", 0)
# Try to recover disabled destinations every 15 seconds.
modparam("dispatcher", "ds_ping_interval", 15)
@ -370,7 +394,7 @@ modparam("dispatcher", "ds_ping_reply_codes", "class=2;code=404;code=480")
route {
##!ifdef WITH_DEBUG
xlog("$rm ($fu ($si:$sp) to $tu, $ci)\n");
xnotice("SCSCF: $rm $ru ($fu ($si:$sp) to $tu, $ci)\n");
##!endif
# per request initial checks
@ -392,10 +416,6 @@ route {
route(PUBLISH);
break;
}
#Set DLG flag to track dialogs using dialog2
if (!is_method("REGISTER|SUBSCRIBE"))
setflag(FLT_DIALOG);
# Evaluate Route-Header and set $route_uri
loose_route();
@ -405,12 +425,43 @@ route {
exit;
}
if (($route_uri =~ "sip:orig@.*") || isc_from_as("orig")) {
#Set DLG flag to track dialogs using dialog2
if (!is_method("REGISTER|SUBSCRIBE"))
setflag(FLT_DIALOG);
if (($route_uri =~ "sip:orig@.*") || ($route_uri =~ "sip:orig@"+HOSTNAME_ESC+".*") || isc_from_as("orig")) {
xlog("Orig");
# we need something like this to assign SCSCF to unregistered user for services
# support for AS origination on behalf of unregistered useri
# can use the registrar is_registered methods - must see if we need to check orig or term?
# Sanitize the R-URI if domain is present in from of @MSISDN of caller
# What in case of Roaming? - Need to handle it
# if ($ru =~ ".*phone-context.*") {
# if ($ru =~ "tel:.*") {
# # Handle following request-uri
# # tel:0498765432100;phone-context=ims.mnc001.mcc001.3gppnetwork.org
# $ru = $(ru{re.subst,/tel:/sip:/g});
# }
# # Now in sip: uri format
# if ($ru =~ ".*@.*") {
# $ru = $(ru{re.subst,/@[0-9+-]*;user=phone/@NETWORKNAME;user=phone/g});
# #$ru = $(ru{re.subst,/;phone-context=[A-Za-z.0-9+-]*@/;phone-context=NETWORKNAME@/g});
# } else {
# $ru = $ru + "@" + NETWORKNAME + ";user=phone";
# #$ru = $(ru{re.subst,/;phone-context=[A-Za-z.0-9+-]*@/;phone-context=NETWORKNAME@/g});
# }
# }
if (!is_method("REGISTER|SUBSCRIBE")) {
# sip:xxx;phone-context=xxxx@xxx format is not desired
if (($ru =~ ".*phone-context.*") && ($ru =~ "sip:.*")) {
$ru = $(ru{re.subst,/sip:/tel:/g});
$ru = $(ru{re.subst,/;phone-context=[A-Za-z.0-9+-@]*;user=phone//g});
$ru = $ru + ";phone-context=" + NETWORKNAME;
msg_apply_changes();
}
}
# Originating
route(orig);
break;
@ -436,10 +487,10 @@ route {
xlog("L_DBG", "We need to do an UNREG server SAR assignemnt");
assign_server_unreg("UNREG_SAR_REPLY", "location", "term");
exit;
}
} else {
sl_send_reply("403", "Forbidden - Domain not served");
exit();
}
}
route(term);
break;
@ -1118,7 +1169,7 @@ route[PSTN_handling]
# $ru: tel:+(34)-999-888-777
# $fu: sip:test@foo.com
# becomes $ru: sip:+34999888777@foo.com;user=phone
if (!tel2sip("$ru", "$fd", "$ru"))
if (tel2sip2("$ru", "$fd", "$ru") < 0)
xlog("L_WARN", "Failed to convert $ru to a sip:-URI - M=$rm R=$ru F=$fu T=$tu IP=$si:$sp ID=$ci\n\n");
if ($rU =~ "\+[0-9]+") {

@ -1,25 +1,30 @@
# SIP / UDP
listen=udp:11.22.33.44:6060
# SIP / TCP
#listen=tcp:11.22.33.44:6060
listen=tcp:11.22.33.44:6060
# SIP / TCP/TLS
#listen=tls:11.22.33.44:6061
#!define NETWORKNAME "ims.mnc001.mcc001.3gppnetwork.org"
#!define HOSTNAME "scscf.mnc001.mcc001.3gppnetwork.org"
#!define URI "sip:scscf.mnc001.mcc001.3gppnetwork.org:6060"
#!define NETWORKNAME_ESC "ims\.mnc001\.mcc001\.3gppnetwork\.org"
#!define HOSTNAME "scscf.ims.mnc001.mcc001.3gppnetwork.org"
#!define HOSTNAME_ESC "scscf\.ims\.mnc001\.mcc001\.3gppnetwork\.org"
#!define URI "sip:scscf.ims.mnc001.mcc001.3gppnetwork.org:6060"
alias=scscf.mnc001.mcc001.3gppnetwork.org
#!subst "/NETWORKNAME/ims.mnc001.mcc001.3gppnetwork.org/"
#!subst "/HSS_REALM/ims.mnc001.mcc001.3gppnetwork.org/"
alias=scscf.ims.mnc001.mcc001.3gppnetwork.org
# ENUM-Server to query:
#!define ENUM_SUFFIX "mnc001.mcc001.3gppnetwork.org."
#!define ENUM_SUFFIX "ims.mnc001.mcc001.3gppnetwork.org."
# SIP-Address of capturing node, if not set, capturing is disabled.
##!define CAPTURE_NODE "sip:127.0.0.1:9060"
# Connection URL for the database:
# For use with a single database:
##!define DB_URL "mysql://scscf:heslo@127.0.0.1/scscf"
#!define DB_URL "mysql://scscf:heslo@127.0.0.1/scscf"
# For use with DB_Cluster: con1 (primary), con2 (backup)
##!define DB_URL "con1=>mysql://scscf:heslo@127.0.0.1/scscf"
@ -42,8 +47,8 @@ alias=scscf.mnc001.mcc001.3gppnetwork.org
#!define RO_DESTINATION "hssocs.voiceblue.com"
#!define RO_ROOT "32260@3gpp.org"
#!define RO_EXT "ext"
#!define RO_MNC "07"
#!define RO_MCC "262"
#!define RO_MNC "02"
#!define RO_MCC "001"
#(see https://en.wikipedia.org/wiki/Mobile_country_code_(MCC))
#!define RO_RELEASE "8"
# See http://tools.ietf.org/html/rfc4006#section-4.1.2 for the definition of the Service-Context
@ -73,7 +78,8 @@ alias=scscf.mnc001.mcc001.3gppnetwork.org
#
# Enabled Features for this host:
##!define WITH_DEBUG
#!define WITH_TCP
##!define WITH_XMLRPC
##!define WITH_RO
##!define WITH_RO_TERM
##!define WITH_AUTH
#!define WITH_AUTH

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<DiameterPeer
FQDN="scscf.mnc001.mcc001.3gppnetwork.org"
FQDN="scscf.ims.mnc001.mcc001.3gppnetwork.org"
Realm="ims.mnc001.mcc001.3gppnetwork.org"
Vendor_Id="10415"
Product_Name="CDiameterPeer"
@ -14,7 +14,7 @@
DefaultAuthSessionTimeout="3600"
MaxAuthSessionTimeout="3600"
>
<Peer FQDN="hss.mnc001.mcc001.3gppnetwork.org" Realm="ims.mnc001.mcc001.3gppnetwork.org" port="3868"/>
<Peer FQDN="hss.ims.mnc001.mcc001.3gppnetwork.org" Realm="ims.mnc001.mcc001.3gppnetwork.org" port="3868"/>
<Acceptor port="3870" bind="11.22.33.44"/>
@ -32,5 +32,5 @@
-->
<SupportedVendor vendor="10415" />
<DefaultRoute FQDN="hss.mnc001.mcc001.3gppnetwork.org" metric="10"/>
<DefaultRoute FQDN="hss.ims.mnc001.mcc001.3gppnetwork.org" metric="10"/>
</DiameterPeer>

@ -1,6 +1,6 @@
#!KAMAILIO
#
# Kamailio SIP Server v5.3 - default configuration script
# Kamailio SIP Server v6.0 - default configuration script
# - web: https://www.kamailio.org
# - git: https://github.com/kamailio/kamailio
#
@ -15,11 +15,16 @@
# #!subst, #!substdef, ...
# - lines starting with //
# - blocks enclosed in between /* */
# Note: the config performs symmetric SIP signaling
# - it sends the reply to the source address of the request
# - remove the use of force_rport() for asymmetric SIP signaling
#
# Several features can be enabled using '#!define WITH_FEATURE' directives:
#
# *** To run in debug mode:
# - define WITH_DEBUG
# - debug level increased to 3, logs still sent to syslog
# - debugger module loaded with cfgtrace enabled
#
# *** To enable mysql:
# - define WITH_MYSQL
@ -27,7 +32,7 @@
# *** To enable authentication execute:
# - enable mysql
# - define WITH_AUTH
# - add users using 'kamctl'
# - add users using 'kamctl' or 'kamcli'
#
# *** To enable IP authentication execute:
# - enable mysql
@ -42,14 +47,21 @@
# *** To enable presence server execute:
# - enable mysql
# - define WITH_PRESENCE
# - if modified headers or body in config must be used by presence handling:
# - define WITH_MSGREBUILD
#
# *** To enable nat traversal execute:
# - define WITH_NAT
# - define WITH_RTPPROXY
# - option for NAT SIP OPTIONS keepalives: WITH_NATSIPPING
# - install RTPProxy: http://www.rtpproxy.org
# - start RTPProxy
# - start RTPProxy:
# rtpproxy -l _your_public_ip_ -s udp:localhost:7722
# - option for NAT SIP OPTIONS keepalives: WITH_NATSIPPING
#
# *** To use RTPEngine (instead of RTPProxy) for nat traversal execute:
# - define WITH_RTPENGINE
# - install RTPEngine: https://github.com/sipwise/rtpengine
# - start RTPEngine:
# rtpengine --listen-ng=127.0.0.1:2223 ...
#
# *** To enable PSTN gateway routing execute:
# - define WITH_PSTN
@ -72,9 +84,9 @@
# - adjust CFGDIR/tls.cfg as needed
# - define WITH_TLS
#
# *** To enable XMLRPC support execute:
# - define WITH_XMLRPC
# - adjust route[XMLRPC] for access policy
# *** To enable JSONRPC over HTTP(S) support execute:
# - define WITH_JSONRPC
# - adjust event_route[xhttp:request] for access policy
#
# *** To enable WebSocket support execute:
# - define WITH_WEBSOCKET
@ -84,6 +96,9 @@
# block if more than 16 requests in 2 seconds and ban for 300 seconds)
# - define WITH_ANTIFLOOD
#
# *** To load htable module execute:
# - define WITH_HTABLE
#
# *** To block 3XX redirect replies execute:
# - define WITH_BLOCK3XX
#
@ -124,13 +139,18 @@ import_file "kamailio-local.cfg"
#!define WITH_WEBSOCKET
# *** Value defines - IDs used later in config
#!ifdef WITH_DEBUG
#!define DBGLEVEL 3
#!else
#!define DBGLEVEL 2
#!endif
#!ifdef WITH_MYSQL
# - database URL - used to connect to database server by modules such
# as: auth_db, acc, usrloc, a.s.o.
#!ifndef DBURL
#!define DBURL "mysql://kamailio:kamailiorw@localhost/kamailio"
#!endif
#!trydef DBURL "mysql://kamailio:kamailiorw@localhost/kamailio"
#!endif
#!ifdef WITH_MULTIDOMAIN
# - the value for 'use_domain' parameters
#!define MULTIDOMAIN 1
@ -138,27 +158,29 @@ import_file "kamailio-local.cfg"
#!define MULTIDOMAIN 0
#!endif
#!ifdef WITH_ANTIFLOOD
# - hash table 'ipban' used to store blocked IP addresses
#!trydef WITH_HTABLE
#!endif
# - flags
# FLT_ - per transaction (message) flags
# FLB_ - per branch flags
# FLT_ - per transaction (message) flags
#!define FLT_ACC 1
#!define FLT_ACCMISSED 2
#!define FLT_ACCFAILED 3
#!define FLT_NATS 5
# FLB_ - per branch flags
#!define FLB_NATB 6
#!define FLB_NATSIPPING 7
####### Global Parameters #########
### LOG Levels: 3=DBG, 2=INFO, 1=NOTICE, 0=WARN, -1=ERR
#!ifdef WITH_DEBUG
debug=4
log_stderror=yes
#!else
debug=2
/* LOG Levels: 3=DBG, 2=INFO, 1=NOTICE, 0=WARN, -1=ERR, ... */
debug=DBGLEVEL
/* set to 'yes' to print log messages to terminal or use '-E' cli option */
log_stderror=no
#!endif
memdbg=5
memlog=5
@ -166,27 +188,36 @@ memlog=5
log_facility=LOG_LOCAL0
log_prefix="{$mt $hdr(CSeq) $ci} "
/* number of SIP routing processes */
/* number of SIP routing processes for each UDP socket
* - value inherited by tcp_children and sctp_children when not set explicitely */
children=8
/* uncomment the next line to disable TCP (default on) */
# disable_tcp=yes
/* number of SIP routing processes for all TCP/TLS sockets */
# tcp_children=8
/* UDP receiving mode:
* - 0: multi-process (default)
* - 1: multi-threaded with async worker group 'udp'
* - 2: per socket configuration (see core cookbook) */
# async_workers_group="name=udp;workers=8"
# udp_receiver_mode = 1
/* uncomment the next line to disable the auto discovery of local aliases
* based on reverse DNS on IPs (default on) */
# auto_aliases=no
/* add local domain aliases */
/* add local domain aliases - it can be set many times */
# alias="sip.mydomain.com"
/* uncomment and configure the following line if you want Kamailio to
* bind on a specific interface/port/proto (default bind on all available) */
/* listen sockets - if none set, Kamailio binds to all local IP addresses
* - basic prototype (full prototype can be found in Wiki - Core Cookbook):
* listen=[proto]:[localip]:[lport] advertise [publicip]:[pport]
* - it can be set many times to add more sockets to listen to */
# listen=udp:10.0.0.10:5060
#!ifdef WITH_TLS
enable_tls=yes
#!endif
/* life time of TCP connection when there is no traffic
* - a bit higher than registration expires to cope with UA behind NAT */
tcp_connection_lifetime=3605
@ -196,6 +227,34 @@ tcp_accept_no_cl=yes
tcp_rd_buf_size=16384
#!endif
/* upper limit for TCP connections (it includes the TLS connections) */
tcp_max_connections=2048
/* upper limit for TCP connections for one ip address - default 1024 */
#tcp_accept_iplimit=1024
#!ifdef WITH_JSONRPC
tcp_accept_no_cl=yes
#!endif
#!ifdef WITH_TLS
enable_tls=yes
/* upper limit for TLS connections */
tls_max_connections=2048
/* For OpenSSL 3 integration
* functions calling libssl3 can be invoked in a transient thread
* 0: disable threaded calls
* 1: use thread executors for process #0 only
* 2: no thread executors, but use atfork handler to reset thread-locals to NULL */
tls_threads_mode=2
#!endif
/* set it to yes to enable sctp and load sctp.so module */
enable_sctp=no
####### Custom Parameters #########
/* These parameters can be modified at runtime via RPC interface
@ -228,10 +287,19 @@ voicemail.srv_port = "5060" desc "VoiceMail Port"
/* set paths to location of modules */
# mpath="/usr/local/lib/kamailio/modules/"
# when using TLS with OpenSSL it is recommended to load this module
# first so that OpenSSL is initialized correctly
#!ifdef WITH_TLS
loadmodule "tls.so"
#!endif
#!ifdef WITH_MYSQL
loadmodule "db_mysql.so"
#!endif
#!ifdef WITH_JSONRPC
loadmodule "xhttp.so"
#!endif
loadmodule "jsonrpcs.so"
loadmodule "kex.so"
loadmodule "corex.so"
@ -244,6 +312,7 @@ loadmodule "maxfwd.so"
loadmodule "usrloc.so"
loadmodule "registrar.so"
loadmodule "textops.so"
loadmodule "textopsx.so"
loadmodule "siputils.so"
loadmodule "xlog.so"
loadmodule "sanity.so"
@ -251,6 +320,7 @@ loadmodule "ctl.so"
loadmodule "cfg_rpc.so"
loadmodule "acc.so"
loadmodule "counters.so"
loadmodule "dlgs.so"
#!ifdef WITH_AUTH
loadmodule "auth.so"
@ -279,24 +349,21 @@ loadmodule "presence_xml.so"
#!ifdef WITH_NAT
loadmodule "nathelper.so"
#!ifdef WITH_RTPPROXY
#!ifdef WITH_RTPENGINE
loadmodule "rtpengine.so"
#!else
loadmodule "rtpproxy.so"
#!endif
#!endif
#!ifdef WITH_TLS
loadmodule "tls.so"
#!ifdef WITH_HTABLE
loadmodule "htable.so"
#!endif
#!ifdef WITH_ANTIFLOOD
loadmodule "htable.so"
loadmodule "pike.so"
#!endif
#!ifdef WITH_XMLRPC
loadmodule "xmlrpc.so"
#!endif
#!ifdef WITH_DEBUG
loadmodule "debugger.so"
#!endif
@ -315,11 +382,17 @@ modparam("jsonrpcs", "pretty_format", 1)
# modparam("jsonrpcs", "fifo_name", "/run/kamailio/kamailio_rpc.fifo")
/* set the path to RPC unix socket control file */
# modparam("jsonrpcs", "dgram_socket", "/run/kamailio/kamailio_rpc.sock")
#!ifdef WITH_JSONRPC
modparam("jsonrpcs", "transport", 7)
#!endif
# ----- ctl params -----
/* set the path to RPC unix socket control file */
# modparam("ctl", "binrpc", "unix:/run/kamailio/kamailio_ctl")
# ----- sanity params -----
modparam("sanity", "autodrop", 0)
# ----- tm params -----
# auto-discard branches from previous serial forking leg
modparam("tm", "failure_reply_mode", 3)
@ -334,6 +407,12 @@ modparam("rr", "enable_full_lr", 0)
# do not append from tag to the RR (no need for this script)
modparam("rr", "append_fromtag", 0)
# ----- dlgs params -----
modparam("dlgs", "timer_interval", 10)
modparam("dlgs", "init_lifetime", 180)
modparam("dlgs", "active_lifetime", 7200)
modparam("dlgs", "finish_lifetime", 10)
# ----- registrar params -----
modparam("registrar", "method_filtering", 1)
/* uncomment the next line to disable parallel forking via location */
@ -344,6 +423,10 @@ modparam("registrar", "method_filtering", 1)
modparam("registrar", "max_expires", 3600)
/* set it to 1 to enable GRUU */
modparam("registrar", "gruu_enabled", 0)
/* set it to 0 to disable Path handling */
modparam("registrar", "use_path", 1)
/* save Path even if not listed in Supported header */
modparam("registrar", "path_mode", 0)
# ----- acc params -----
/* what special events should be accounted ? */
@ -372,11 +455,13 @@ modparam("acc", "db_extra",
#!endif
# ----- usrloc params -----
modparam("usrloc", "timer_interval", 60)
modparam("usrloc", "timer_procs", 1)
modparam("usrloc", "use_domain", MULTIDOMAIN)
/* enable DB persistency for location entries */
#!ifdef WITH_USRLOCDB
modparam("usrloc", "db_url", DBURL)
modparam("usrloc", "db_mode", 2)
modparam("usrloc", "use_domain", MULTIDOMAIN)
#!endif
# ----- auth_db params -----
@ -390,7 +475,7 @@ modparam("auth_db", "use_domain", MULTIDOMAIN)
# ----- permissions params -----
#!ifdef WITH_IPAUTH
modparam("permissions", "db_url", DBURL)
modparam("permissions", "db_mode", 1)
modparam("permissions", "load_backends", 1)
#!endif
#!endif
@ -424,11 +509,13 @@ modparam("presence_xml", "force_active", 1)
#!endif
#!ifdef WITH_NAT
#!ifdef WITH_RTPPROXY
#!ifdef WITH_RTPENGINE
# ----- rtpengine params -----
modparam("rtpengine", "rtpengine_sock", "udp:127.0.0.1:2223")
#!else
# ----- rtpproxy params -----
modparam("rtpproxy", "rtpproxy_sock", "udp:127.0.0.1:7722")
#!endif
# ----- nathelper params -----
modparam("nathelper", "natping_interval", 30)
modparam("nathelper", "ping_nated_only", 1)
@ -450,16 +537,14 @@ modparam("tls", "config", "/usr/local/etc/kamailio/tls.cfg")
modparam("pike", "sampling_time_unit", 2)
modparam("pike", "reqs_density_per_unit", 16)
modparam("pike", "remove_latency", 4)
#!endif
#!ifdef WITH_HTABLE
# ----- htable params -----
#!ifdef WITH_ANTIFLOOD
/* ip ban htable with autoexpire after 5 minutes */
modparam("htable", "htable", "ipban=>size=8;autoexpire=300;")
#!endif
#!ifdef WITH_XMLRPC
# ----- xmlrpc params -----
modparam("xmlrpc", "route", "XMLRPC");
modparam("xmlrpc", "url_match", "^/RPC")
#!endif
#!ifdef WITH_DEBUG
@ -484,6 +569,7 @@ request_route {
# CANCEL processing
if (is_method("CANCEL")) {
dlgs_update();
if (t_check_trans()) {
route(RELAY);
}
@ -510,7 +596,7 @@ request_route {
# record routing for dialog forming requests (in case they are routed)
# - remove preloaded route headers
remove_hf("Route");
if (is_method("INVITE|SUBSCRIBE")) {
if (is_method("INVITE|SUBSCRIBE|REFER")) {
record_route();
}
@ -536,11 +622,17 @@ request_route {
exit;
}
if(is_method("INVITE")) {
dlgs_init("$fu", "$tu", "srcip=$si");
}
# dispatch destinations to PSTN
route(PSTN);
# user location service
route(LOCATION);
return;
}
# Wrapper for relaying requests
@ -559,13 +651,19 @@ route[RELAY] {
}
if (!t_relay()) {
sl_reply_error();
send_reply_error();
}
exit;
}
# Per SIP request initial checks
route[REQINIT] {
# no connect for sending replies
set_reply_no_connect();
# enforce symmetric signaling
# - send back replies to the source address of request
force_rport();
#!ifdef WITH_ANTIFLOOD
# flood detection from same IP and traffic ban for a while
# be sure you exclude checking trusted peers, such as pstn gateways
@ -577,13 +675,13 @@ route[REQINIT] {
exit;
}
if (!pike_check_req()) {
xlog("L_ALERT", "ALERT: pike blocking $rm from $fu (IP:$si:$sp)\n");
xalert("ALERT: pike blocking $rm from $fu (IP:$si:$sp)\n");
$sht(ipban=>$si) = 1;
exit;
}
}
#!endif
if($ua =~ "friendly-scanner|sipcli|VaxSIPUserAgent") {
if($ua =~ "friendly|scanner|sipcli|sipvicious|VaxSIPUserAgent|pplsip") {
# silent drop for scanners - uncomment next line if want to reply
# sl_send_reply("200", "OK");
exit;
@ -600,7 +698,7 @@ route[REQINIT] {
}
if(!sanity_check("17895", "7")) {
xlog("Malformed SIP message from $si:$sp\n");
xlog("Malformed SIP request from $si:$sp\n");
exit;
}
}
@ -613,14 +711,15 @@ route[WITHINDLG] {
# take the path determined by record-routing
if (loose_route()) {
route(DLGURI);
dlgs_update();
if (is_method("BYE")) {
setflag(FLT_ACC); # do accounting ...
setflag(FLT_ACCFAILED); # ... even if the transaction fails
} else if ( is_method("ACK") ) {
# ACK is forwarded statelessly
route(NATMANAGE);
} else if ( is_method("NOTIFY") ) {
# Add Record-Route for in-dialog NOTIFY as per RFC 6665.
} else if ( is_method("NOTIFY|REFER") ) {
# Add Record-Route for in-dialog NOTIFY and REFER (RFC6665, RFC3515)
record_route();
}
route(RELAY);
@ -660,7 +759,7 @@ route[REGISTRAR] {
#!endif
}
if (!save("location")) {
sl_reply_error();
send_reply_error();
}
exit;
}
@ -721,8 +820,12 @@ route[PRESENCE] {
}
#!ifdef WITH_PRESENCE
#!ifdef WITH_MSGREBUILD
# apply changes in case the request headers or body were modified
msg_apply_changes();
#!endif
if (!t_newtran()) {
sl_reply_error();
send_reply_error();
exit;
}
@ -787,7 +890,6 @@ route[AUTH] {
# Caller NAT detection
route[NATDETECT] {
#!ifdef WITH_NAT
force_rport();
if (nat_uac_test("83")) {
if (is_method("REGISTER")) {
fix_nated_register();
@ -802,7 +904,7 @@ route[NATDETECT] {
return;
}
# RTPProxy control and signaling updates for NAT traversal
# RTP relaying management and signaling updates for NAT traversal
route[NATMANAGE] {
#!ifdef WITH_NAT
if (is_request()) {
@ -814,7 +916,13 @@ route[NATMANAGE] {
}
if (!(isflagset(FLT_NATS) || isbflagset(FLB_NATB))) return;
#!ifdef WITH_RTPPROXY
#!ifdef WITH_RTPENGINE
if(nat_uac_test("8")) {
rtpengine_manage("SIP-source-address replace-origin replace-session-connection");
} else {
rtpengine_manage("replace-origin replace-session-connection");
}
#!else
if(nat_uac_test("8")) {
rtpproxy_manage("co");
} else {
@ -835,6 +943,15 @@ route[NATMANAGE] {
set_contact_alias();
}
}
if(isbflagset(FLB_NATB) || nat_uac_test("64")) {
# no connect message in a dialog involving NAT traversal
if (is_request()) {
if(has_totag()) {
set_forward_no_connect();
}
}
}
#!endif
return;
}
@ -853,7 +970,7 @@ route[DLGURI] {
route[SIPOUT] {
if (uri==myself) return;
append_hf("P-hint: outbound\r\n");
append_hf("P-Hint: outbound\r\n");
route(RELAY);
exit;
}
@ -899,21 +1016,23 @@ route[PSTN] {
return;
}
# XMLRPC routing
#!ifdef WITH_XMLRPC
route[XMLRPC] {
# allow XMLRPC from localhost
if ((method=="POST" || method=="GET")
&& (src_ip==127.0.0.1)) {
# close connection only for xmlrpclib user agents (there is a bug in
# xmlrpclib: it waits for EOF before interpreting the response).
if ($hdr(User-Agent) =~ "xmlrpclib")
set_reply_close();
set_reply_no_connect();
dispatch_rpc();
# JSONRPC over HTTP(S) routing
#!ifdef WITH_JSONRPC
event_route[xhttp:request] {
set_reply_close();
set_reply_no_connect();
if(src_ip!=127.0.0.1) {
xhttp_reply("403", "Forbidden", "text/html",
"<html><body>Not allowed from $si</body></html>");
exit;
}
send_reply("403", "Forbidden");
if ($hu =~ "^/RPC") {
jsonrpc_dispatch();
exit;
}
xhttp_reply("200", "OK", "text/html",
"<html><body>Wrong URL $hu</body></html>");
exit;
}
#!endif
@ -950,14 +1069,25 @@ route[TOVOICEMAIL] {
branch_route[MANAGE_BRANCH] {
xdbg("new branch [$T_branch_idx] to $ru\n");
route(NATMANAGE);
return;
}
# Manage incoming replies
reply_route {
if(!sanity_check("17604", "6")) {
xlog("Malformed SIP response from $si:$sp\n");
drop;
}
return;
}
# Manage incoming replies in transaction context
onreply_route[MANAGE_REPLY] {
xdbg("incoming reply\n");
if(status=~"[12][0-9][0-9]") {
route(NATMANAGE);
}
return;
}
# Manage failure routing cases
@ -991,6 +1121,7 @@ failure_route[MANAGE_FAILURE] {
exit;
}
#!endif
return;
}
#!ifdef WITH_WEBSOCKET
@ -1015,5 +1146,6 @@ event_route[xhttp:request] {
}
}
xhttp_reply("404", "Not Found", "", "");
return;
}
#!endif

@ -2,7 +2,7 @@
Generate a mocking framework base on the output of app_python.api_list
Usage:
### Usage:
```
/usr/sbin/kamctl rpc app_python.api_list > api.json
./kemi_mock.py api.json > KSR.py
@ -15,6 +15,19 @@ the Union type add the --no-union flag
./kemi_mock.py api.json --no-union > KSR.py
```
### Usage with Documentation:
run the generate.py from the following project
https://github.com/braams/vscode-kamailio-hover
this creates a modules.json file in a tmp directory. This file can be used to generate the KSR.py file with documentation
pass the modules.json as a 2nd parameter to kemi_mock.py
```
./kemi_mock.py api.json modules.json > KSR.py
```
## Mocking
Return values can be injected through the dictionary \_mock\_data
```python

@ -113,21 +113,41 @@ def printFunction(module_name, func, indent):
else:
print(prefix + "def " + func['name'] +"("+params+"):")
generate_function_doc(module_name, func, prefix)
print(prefix + "\tprint(\"Calling " + log_format_params + "\" % "+log_params+")")
printMocReturn(module_name, func, indent+1)
print("")
def generate_function_doc(module_name, func, prefix):
if documentation is not None and module_name in documentation:
function_parts = func['name'].split("_")
for i in range(len(function_parts), 0, -1):
function_prefix = "_".join(function_parts[:i])
if function_prefix in documentation[module_name]["functions"]:
print(prefix + "\t\"\"\"")
documentation_lines = documentation[module_name]["functions"][function_prefix].split("\n")
for line in documentation_lines:
print(prefix + "\t" + line.replace("\\", "\\\\\\\\"))
print(prefix + "\t\"\"\"")
break
classes = defaultdict(list)
if len(sys.argv) < 2:
print("Please specify the json file to parse")
sys.exit(-1)
documentation = None
if len(sys.argv) > 2:
for i in range(2,len(sys.argv)):
if sys.argv[i] == "--no-union":
noUnion = True
else:
with open(sys.argv[i]) as f:
documentation = json.load(f)
if not noUnion:
print("from typing import Union")
@ -193,12 +213,23 @@ for func in classes['']:
print("")
printFunction('', func, 0)
def document_module(module_name):
if documentation is not None and module_name in documentation:
print("\"\"\"")
documentation_lines = documentation[module_name]["overview"].split("\n")
for line in documentation_lines:
print("" + line)
print("\"\"\"")
for module_name in classes.keys():
if module_name != "":
if module_name in reserved_keywords:
print("setattr(sys.modules[__name__], '" + module_name + "', " + module_name.capitalize() + "())")
else:
print(module_name + " = "+module_name.capitalize()+"()")
document_module(module_name)
print("")

@ -4,7 +4,7 @@
# Maintainer: Nathan Angelacos <nangel@alpinelinux.org>
pkgname=kamailio
pkgver=5.8.5
pkgver=6.0.1
pkgrel=0
# If building from a git snapshot, specify the gitcommit
@ -31,7 +31,8 @@ makedepends="bison db-dev flex freeradius-client-dev expat-dev
confuse-dev ncurses-dev sqlite-dev lua-dev openldap-dev openssl-dev
net-snmp-dev libuuid libev-dev jansson-dev json-c-dev libevent-dev
linux-headers libmemcached-dev rabbitmq-c-dev hiredis-dev
ruby-dev libmaxminddb-dev libunistring-dev mongo-c-driver-dev libwebsockets-dev"
ruby-dev libmaxminddb-dev libunistring-dev mongo-c-driver-dev
libwebsockets-dev mosquitto-dev librdkafka-dev nghttp2-dev"
install="$pkgname.pre-install $pkgname.pre-upgrade"
@ -52,32 +53,45 @@ install="$pkgname.pre-install $pkgname.pre-upgrade"
# Remove db_text from _mod_list_db because we create a separate dbtext package
#
# - basic used modules, with no extra dependency (widespread usage)
_mod_list_basic="avp async auth benchmark blst cfg_rpc cfgt cfgutils corex counters \
ctl debugger diversion enum exec gzcompress ipops kex mangler \
maxfwd mediaproxy mqueue \
nat_traversal nathelper path pike pv ratelimit rr rtimer \
_mod_list_basic="avp async auth benchmark blst cfg_rpc cfgt cfgutils corex \
counters ctl debugger diversion dlgs enum exec gzcompress ipops kex \
keepalive mangler math maxfwd mediaproxy mqueue nat_traversal \
nathelper path pike posops pv pv_headers pvtpl ratelimit rr rtimer \
rtpproxy sanity sdpops siputils sl smsops statsc statistics \
textops textopsx tm tmx topoh topos xlog rtpengine stun sipt"
sworker textops textopsx tm tmx topoh topos xlog rtpengine stun sipt"
# - extra used modules, with no extra dependency
_mod_list_extras="auth_diameter call_control cnxcc dmq domainpolicy log_custom \
msrp pdb qos sca seas sms sst timer tmrec tsilo uac_redirect \
xhttp xhttp_rpc xprint nosip dmq_usrloc statsd rtjson tcpops \
auth_xkeys"
_mod_list_extras="auth_diameter call_control call_obj cnxcc dmq domainpolicy \
log_custom msrp pdb qos sca seas sms ss7ops sst timer tmrec tsilo \
uac_redirect xhttp xhttp_rpc xprint nosip dmq_usrloc statsd rtjson \
tcpops auth_xkeys"
# Add tops_htable here, because htable is here.
#
# - common modules depending on database
_mod_list_db="acc alias_db auth_db avpops cfg_db db_berkeley db_flatstore \
db_cluster dialog dispatcher domain drouting group \
htable imc matrix mohqueue msilo mtree p_usrloc pdt permissions \
pipelimit prefix_route registrar sipcapture siptrace speeddial \
sqlops uac uri_db userblocklist usrloc"
db_cluster dialog dispatcher domain drouting group htable imc matrix \
mohqueue msilo mtree p_usrloc pdt permissions pipelimit prefix_route \
registrar secfilter sipcapture siptrace speeddial sqlops topos_htable \
uac uri_db userblocklist usrloc"
# - common modules depending on database, using UID db schema
_mod_list_dbuid="db2_ops uid_auth_db uid_avp_db uid_domain uid_gflags \
uid_uri_db"
# - modules for devel purposes
_mod_list_devel="misctest print print_lib"
_mod_list_devel="misctest"
# - kemix module
_mod_list_kemix="kemix"
# _mod_list_secsipid="secsipid secsipid_proc"
# - LOST
_mod_list_lost="lost"
# - JWT
_mod_list_jwt="jwt"
# - modules depending on pcre2 library
_mod_list_pcre="dialplan lcr regex"
@ -150,14 +164,12 @@ _mod_list_authephemeral="auth_ephemeral"
# - modules related to SIMPLE presence extensions
_mod_list_presence="presence presence_conference presence_dialoginfo \
presence_mwi presence_profile presence_reginfo \
presence_xml \
pua pua_bla pua_dialoginfo pua_reginfo \
pua_rpc pua_usrloc pua_xmpp \
rls xcap_client xcap_server"
presence_mwi presence_profile presence_reginfo presence_xml \
presence_dfks pua pua_bla pua_dialoginfo pua_reginfo pua_rpc \
pua_usrloc pua_xmpp rls xcap_client xcap_server"
# - modules depending on lua library
_mod_list_lua="app_lua app_lua_sr"
_mod_list_lua="app_lua"
# - modules depending on perl library
_mod_list_perl="app_perl db_perlvdb"
@ -166,10 +178,10 @@ _mod_list_perl="app_perl db_perlvdb"
_mod_list_ruby="app_ruby"
# - modules depending on python3 library
_mod_list_python3="app_python3"
_mod_list_python3="app_python3 app_python3s"
# - modules depending on ruby library
_mod_list_ruby="app_ruby"
_mod_list_ruby="app_ruby app_ruby_proc"
# - modules depending on rabbitmq
_mod_list_rabbitmq="rabbitmq"
@ -193,9 +205,9 @@ _mod_list_redis="db_redis ndb_redis topos_redis"
_mod_list_mono="app_mono"
# - modules related to IMS extensions
_mod_list_ims="cdp cdp_avp ims_dialog ims_diameter_server ims_auth ims_isc ims_icscf ims_qos \
ims_ocs ims_registrar_pcscf ims_registrar_scscf ims_usrloc_pcscf \
ims_usrloc_scscf ims_charging"
_mod_list_ims="cdp cdp_avp ims_dialog ims_diameter_server ims_auth ims_isc \
ims_icscf ims_qos ims_ocs ims_registrar_pcscf ims_registrar_scscf \
ims_usrloc_pcscf ims_usrloc_scscf ims_charging ims_qos_npn"
# - modules depending on osp toolkit library
_mod_list_osp="osp"
@ -233,10 +245,26 @@ _mod_list_rabbitmq="rabbitmq"
# - modules depending on sipdump
_mod_list_sipdump="sipdump"
# - modules depending on xhttp_prom
_mod_list_xhttp_prom="xhttp_prom"
# - modules depending on slack
_mod_list_slack="slack"
# - modules depending on lrkproxy
_mod_list_slack="lrkproxy"
# mqtt
_mod_list_mqtt="mqtt"
# Kafka
_mod_list_kafka="kafka"
# Alpine Specific
_mod_list_debugger="$_mod_list_devel benchmark debugger"
_mod_list_nghttp2="nghttp2"
# Standard modules in main pkg
_module_group_kstandard="$_mod_list_basic $_mod_list_dbuid $_mod_list_pcre"
@ -244,13 +272,11 @@ _module_group_kstandard="$_mod_list_basic $_mod_list_dbuid $_mod_list_pcre"
subpackages="$pkgname-doc $pkgname-dbg $pkgname-openrc"
_modules="$_module_group_kstandard"
for _i in db postgres sqlite dbtext mysql \
cpl xml unixodbc snmpstats xmpp carrierroute \
ldap utils tls presence lua ims outbound debugger \
extras json websocket authephemeral mongodb\
uuid ev memcached redis geoip2 jansson sipdump \
jsdt http_async kazoo rabbitmq sctp radius perl \
python3 ruby; do
for _i in mqtt kafka lost jwt kemix db postgres sqlite dbtext mysql cpl xml \
unixodbc snmpstats xmpp carrierroute ldap utils tls presence lua ims \
outbound debugger extras json websocket authephemeral mongodb uuid ev \
memcached redis geoip2 jansson sipdump jsdt http_async kazoo rabbitmq sctp \
radius perl python3 ruby xhttp_prom slack lrkproxy; do
subpackages="$subpackages $pkgname-$_i"
eval "_modules=\"\$_modules \$_mod_list_$_i\""
@ -408,6 +434,42 @@ carrierroute() {
"$_mod_list_carrierroute"
}
kemix() {
_generic_pkg "extensions and functions to be used with KEMI SIP routing scripting" \
"$_mod_list_kemix"
}
#secsipid() {
# _generic_pkg "Secure SIP/Telephony Identity (STIR/SHAKEN) extensions" \
# "$_mod_list_secsipid"
#}
lost() {
_generic_pkg "HELD (RFC6155) and LOST (RFC5222) location-based routing" \
"$_mod_list_lost"
}
jwt() {
_generic_pkg "JSON Web Token generation and validation" \
"$_mod_list_jwt"
}
mqtt() {
_generic_pkg "MQTT connector for bi-directional publish-subscribe communication" \
"$_mod_list_mqtt"
}
kafka() {
_generic_pkg "Produces and sends messages to a Kafka server" \
"$_mod_list_kafka"
}
## doesn't compile
# tls_wolfssl() {
# _generic_pkg "TLS operations module using wolfssl" \
# "$_mod_list_tls_wolfssl"
# }
ldap() {
_generic_pkg "LDAP search functions" \
"$_mod_list_ldap"
@ -564,5 +626,25 @@ sipdump() {
"$_mod_list_sipdump"
}
xhttp_prom() {
_generic_pkg "Metrics for Prometheus monitoring." \
"$_mod_list_xhttp_prom"
}
slack() {
_generic_pkg "Send messages to Slack channels" \
"$_mod_list_slack"
}
lrkproxy() {
_generic_pkg "RTP packets relay with kernel based forwarding" \
"$_mod_list_lrkproxy"
}
nghttp2() {
_generic_pkg "Implements an embedded HTTP/2 server using nghttpd2 library" \
"$_mod_list_nghttp2"
}
sha512sums="51ea5fccd27a9d3d1783cfc5596eb28ab27e34faeec3268600363f43c48a3634c3c584c479ba874fdb53b85766a0ce8fe7df0e20954c9c6514b1d9d41d9237e6 kamailio-5.1.0.20171125-991fe9b.tar.gz
a777338f1a60b95aa2bf3e38314a0cfa77a3397ccad342955409eb95f66ad9c38a3a64d2974d353d50f2aced3936b209063a0f0a7127851b1c278d8384f4cc45 kamailio.initd"

@ -1,65 +1,47 @@
kamailio (5.8.5) unstable; urgency=medium
kamailio (6.0.1) unstable; urgency=medium
* version set 5.8.5
* version set 6.0.1
-- Victor Seva <vseva@debian.org> Thu, 23 Jan 2025 08:31:22 +0100
-- Victor Seva <vseva@debian.org> Mon, 10 Mar 2025 08:18:43 +0100
kamailio (5.8.4) unstable; urgency=medium
kamailio (6.0.0) unstable; urgency=medium
* version set 5.8.4
* version set 6.0.0
-- Victor Seva <vseva@debian.org> Tue, 12 Nov 2024 10:53:35 +0100
-- Victor Seva <vseva@debian.org> Wed, 29 Jan 2025 09:06:18 +0100
kamailio (5.8.3) unstable; urgency=medium
kamailio (6.0.0~rc0) unstable; urgency=medium
* version set 5.8.3
* version set 6.0.0~rc0
-- Victor Seva <vseva@debian.org> Wed, 04 Sep 2024 09:29:45 +0200
-- Victor Seva <vseva@debian.org> Thu, 23 Jan 2025 08:54:27 +0100
kamailio (5.8.2) unstable; urgency=medium
kamailio (6.0.0~pre0) unstable; urgency=medium
* version set 5.8.2
* version set 6.0.0~pre0
-- Victor Seva <vseva@debian.org> Wed, 12 Jun 2024 09:00:17 +0200
-- Victor Seva <vseva@debian.org> Tue, 17 Dec 2024 20:14:42 +0100
kamailio (5.8.1) unstable; urgency=medium
kamailio (6.0.0~dev3) unstable; urgency=medium
* version set 5.8.1
* version set 6.0.0~dev3
-- Victor Seva <vseva@debian.org> Wed, 03 Apr 2024 08:21:53 +0200
-- Victor Seva <vseva@debian.org> Mon, 30 Sep 2024 13:58:53 +0200
kamailio (5.8.0) unstable; urgency=medium
kamailio (6.0.0~dev2) unstable; urgency=medium
* version set 5.8.0
* version set 6.0.0~dev2
-- Victor Seva <vseva@debian.org> Thu, 07 Mar 2024 11:40:20 +0100
-- Victor Seva <vseva@debian.org> Thu, 16 May 2024 09:46:08 +0200
kamailio (5.8.0~rc0) unstable; urgency=medium
kamailio (5.9.0~dev1) unstable; urgency=medium
* version set 5.8.0~rc0
* version set 5.9.0~dev1
-- Victor Seva <vseva@debian.org> Fri, 23 Feb 2024 20:04:35 +0100
-- Victor Seva <vseva@debian.org> Mon, 15 Apr 2024 08:52:26 +0200
kamailio (5.8.0~pre0) unstable; urgency=medium
kamailio (5.9.0~dev0) unstable; urgency=medium
* version set 5.8.0~pre0
* version set 5.9.0~dev0
-- Victor Seva <vseva@debian.org> Fri, 02 Feb 2024 15:20:05 +0100
kamailio (5.8.0~dev2) unstable; urgency=medium
* version set 5.8.0~dev2
-- Victor Seva <vseva@debian.org> Tue, 05 Dec 2023 12:04:06 +0100
kamailio (5.8.0~dev1) unstable; urgency=medium
* version set 5.8.0~dev1
-- Victor Seva <vseva@debian.org> Wed, 28 Jun 2023 15:03:56 +0200
kamailio (5.8.0~dev0) unstable; urgency=medium
* version set 5.8.0~dev0
-- Victor Seva <vseva@debian.org> Thu, 04 May 2023 21:45:08 +0200
-- Victor Seva <vseva@debian.org> Thu, 23 Feb 2024 19:45:08 +0209

@ -18,7 +18,6 @@ Build-Depends:
libev-dev,
libevent-dev,
libexpat1-dev,
libgeoip-dev (>= 1.4.5),
libhiredis-dev (>= 0.10.0),
libjansson-dev,
libjson-c-dev,
@ -28,7 +27,6 @@ Build-Depends:
libmemcached-dev,
libmnl-dev,
libmongoc-dev,
libmono-2.0-dev [amd64 armel armhf i386 mipsel kfreebsd-amd64 kfreebsd-i386 ppc64 ppc64el s390x],
libmosquitto-dev,
libncurses5-dev,
libpcre2-dev,
@ -106,8 +104,7 @@ Description: very fast, dynamic and configurable SIP server
A C Shell like scripting language provides full control over the server's
behaviour. It's easy to integrate Kamailio with 3rd party API's and applications
using HTTP, AMQP, database drivers, LDAP, Radius and many other solutions.
In addition there is support for scripting using Lua, Python, Perl, Java and
a set of other languages using Mono.
In addition there is support for scripting using Lua, Python, Perl, Java.
.
Kamailio's modular architecture allows only required functionality to be loaded.
There are over 100 modules available: WebSockets for WebRTC, authentication,
@ -139,23 +136,6 @@ Description: very fast and configurable SIP server [debug symbols]
This package contains the debugging symbols for the Kamailio binaries and
modules. You only need to install it if you need to debug Kamailio.
Package: kamailio-geoip-modules
Architecture: any
Multi-Arch: same
Pre-Depends:
${misc:Pre-Depends},
Depends:
kamailio (= ${binary:Version}),
${misc:Depends},
${shlibs:Depends},
Description: The geoip module for the Kamailio SIP Server
Kamailio is a very fast and flexible SIP (RFC3261)
server. Written entirely in C, Kamailio can handle thousands calls
per second even on low-budget hardware.
.
This package provides the geoip module, an extension enabling
usage of the GeoIP API within the Kamailio configuration file.
Package: kamailio-geoip2-modules
Architecture: any
Multi-Arch: same
@ -246,23 +226,6 @@ Description: The app_lua module for Kamailio Lua support
execute embedded Lua applications within the configuration file as
well as writing the entire configuration file in Lua.
Package: kamailio-mono-modules
Architecture: any
Multi-Arch: same
Pre-Depends:
${misc:Pre-Depends},
Depends:
kamailio (= ${binary:Version}),
${misc:Depends},
${shlibs:Depends},
Description: The app_mono module for the Kamailio SIP server
Kamailio is a very fast and flexible SIP (RFC3261)
server. Written entirely in C, Kamailio can handle thousands calls
per second even on low-budget hardware.
.
This package provides the app_mono module, an extension allowing to
execute embedded Mono applications within the Kamailio SIP routing script.
Package: kamailio-python-modules
Architecture: any
Multi-Arch: same

@ -21,4 +21,3 @@ case "$1" in
esac
#DEBHELPER#

@ -26,6 +26,8 @@ export LIBSSL_STATIC_SRCPATH=/usr/$(LIBDIR)
# Modules not in the "main" kamailio package:
EXCLUDED_MODULES =
EXCLUDED_MODULES += mono
EXCLUDED_MODULES += geoip
# Extra modules to skip, because they are not compilable now:
# - regardless if they go to the main kamailio package or to some module
@ -42,6 +44,7 @@ EXTRA_EXCLUDED_MODULES += lwsc
EXTRA_EXCLUDED_MODULES += nats
EXTRA_EXCLUDED_MODULES += microhttpd
EXTRA_EXCLUDED_MODULES += tls_wolfssl
EXTRA_EXCLUDED_MODULES += kafka
## --EXCLUDED--
@ -67,11 +70,9 @@ PACKAGE_GROUPS += xmpp
PACKAGE_GROUPS += cpl
PACKAGE_GROUPS += redis
PACKAGE_GROUPS += python
PACKAGE_GROUPS += geoip
PACKAGE_GROUPS += geoip2
PACKAGE_GROUPS += sqlite
PACKAGE_GROUPS += json
PACKAGE_GROUPS += mono
PACKAGE_GROUPS += ruby
PACKAGE_GROUPS += ims
PACKAGE_GROUPS += sctp

@ -1,65 +1,47 @@
kamailio (5.8.5) unstable; urgency=medium
kamailio (6.0.1) unstable; urgency=medium
* version set 5.8.5
* version set 6.0.1
-- Victor Seva <vseva@debian.org> Thu, 23 Jan 2025 08:31:22 +0100
-- Victor Seva <vseva@debian.org> Mon, 10 Mar 2025 08:18:43 +0100
kamailio (5.8.4) unstable; urgency=medium
kamailio (6.0.0) unstable; urgency=medium
* version set 5.8.4
* version set 6.0.0
-- Victor Seva <vseva@debian.org> Tue, 12 Nov 2024 10:53:35 +0100
-- Victor Seva <vseva@debian.org> Wed, 29 Jan 2025 09:06:18 +0100
kamailio (5.8.3) unstable; urgency=medium
kamailio (6.0.0~rc0) unstable; urgency=medium
* version set 5.8.3
* version set 6.0.0~rc0
-- Victor Seva <vseva@debian.org> Wed, 04 Sep 2024 09:29:45 +0200
-- Victor Seva <vseva@debian.org> Thu, 23 Jan 2025 08:54:27 +0100
kamailio (5.8.2) unstable; urgency=medium
kamailio (6.0.0~pre0) unstable; urgency=medium
* version set 5.8.2
* version set 6.0.0~pre0
-- Victor Seva <vseva@debian.org> Wed, 12 Jun 2024 09:00:17 +0200
-- Victor Seva <vseva@debian.org> Tue, 17 Dec 2024 20:14:42 +0100
kamailio (5.8.1) unstable; urgency=medium
kamailio (6.0.0~dev3) unstable; urgency=medium
* version set 5.8.1
* version set 6.0.0~dev3
-- Victor Seva <vseva@debian.org> Wed, 03 Apr 2024 08:21:53 +0200
-- Victor Seva <vseva@debian.org> Mon, 30 Sep 2024 13:58:53 +0200
kamailio (5.8.0) unstable; urgency=medium
kamailio (6.0.0~dev2) unstable; urgency=medium
* version set 5.8.0
* version set 6.0.0~dev2
-- Victor Seva <vseva@debian.org> Thu, 07 Mar 2024 11:40:20 +0100
-- Victor Seva <vseva@debian.org> Thu, 16 May 2024 09:46:08 +0200
kamailio (5.8.0~rc0) unstable; urgency=medium
kamailio (5.9.0~dev1) unstable; urgency=medium
* version set 5.8.0~rc0
* version set 5.9.0~dev1
-- Victor Seva <vseva@debian.org> Fri, 23 Feb 2024 20:04:35 +0100
-- Victor Seva <vseva@debian.org> Mon, 15 Apr 2024 08:52:26 +0200
kamailio (5.8.0~pre0) unstable; urgency=medium
kamailio (5.9.0~dev0) unstable; urgency=medium
* version set 5.8.0~pre0
* version set 5.9.0~dev0
-- Victor Seva <vseva@debian.org> Fri, 02 Feb 2024 15:20:05 +0100
kamailio (5.8.0~dev2) unstable; urgency=medium
* version set 5.8.0~dev2
-- Victor Seva <vseva@debian.org> Tue, 05 Dec 2023 12:04:06 +0100
kamailio (5.8.0~dev1) unstable; urgency=medium
* version set 5.8.0~dev1
-- Victor Seva <vseva@debian.org> Wed, 28 Jun 2023 15:03:56 +0200
kamailio (5.8.0~dev0) unstable; urgency=medium
* version set 5.8.0~dev0
-- Victor Seva <vseva@debian.org> Thu, 04 May 2023 21:45:08 +0200
-- Victor Seva <vseva@debian.org> Thu, 23 Feb 2024 19:45:08 +0209

@ -17,7 +17,6 @@ Build-Depends:
libev-dev,
libevent-dev,
libexpat1-dev,
libgeoip-dev (>= 1.4.5),
libhiredis-dev (>= 0.10.0),
libjansson-dev,
libjson-c-dev,
@ -28,7 +27,6 @@ Build-Depends:
libmicrohttpd-dev,
libmnl-dev,
libmongoc-dev,
libmono-2.0-dev [amd64 armel armhf i386 mipsel kfreebsd-amd64 kfreebsd-i386 ppc64 ppc64el s390x],
libmosquitto-dev,
libnats-dev,
libncurses-dev,
@ -38,6 +36,7 @@ Build-Depends:
libpq-dev,
librabbitmq-dev,
libradcli-dev,
librdkafka-dev,
libreadline-dev,
libsasl2-dev,
libsctp-dev [any],
@ -107,8 +106,7 @@ Description: very fast, dynamic and configurable SIP server
A C Shell like scripting language provides full control over the server's
behaviour. It's easy to integrate Kamailio with 3rd party API's and applications
using HTTP, AMQP, database drivers, LDAP, Radius and many other solutions.
In addition there is support for scripting using Lua, Python, Perl, Java and
a set of other languages using Mono.
In addition there is support for scripting using Lua, Python, Perl, Java.
.
Kamailio's modular architecture allows only required functionality to be loaded.
There are over 100 modules available: WebSockets for WebRTC, authentication,
@ -140,23 +138,6 @@ Description: very fast and configurable SIP server [debug symbols]
This package contains the debugging symbols for the Kamailio binaries and
modules. You only need to install it if you need to debug Kamailio.
Package: kamailio-geoip-modules
Architecture: any
Multi-Arch: same
Pre-Depends:
${misc:Pre-Depends},
Depends:
kamailio (= ${binary:Version}),
${misc:Depends},
${shlibs:Depends},
Description: The geoip module for the Kamailio SIP Server
Kamailio is a very fast and flexible SIP (RFC3261)
server. Written entirely in C, Kamailio can handle thousands calls
per second even on low-budget hardware.
.
This package provides the geoip module, an extension enabling
usage of the GeoIP API within the Kamailio configuration file.
Package: kamailio-geoip2-modules
Architecture: any
Multi-Arch: same
@ -247,23 +228,6 @@ Description: The app_lua module for Kamailio Lua support
execute embedded Lua applications within the configuration file as
well as writing the entire configuration file in Lua.
Package: kamailio-mono-modules
Architecture: any
Multi-Arch: same
Pre-Depends:
${misc:Pre-Depends},
Depends:
kamailio (= ${binary:Version}),
${misc:Depends},
${shlibs:Depends},
Description: The app_mono module for the Kamailio SIP server
Kamailio is a very fast and flexible SIP (RFC3261)
server. Written entirely in C, Kamailio can handle thousands calls
per second even on low-budget hardware.
.
This package provides the app_mono module, an extension allowing to
execute embedded Mono applications within the Kamailio SIP routing script.
Package: kamailio-python3-modules
Architecture: any
Multi-Arch: same
@ -897,6 +861,22 @@ Description: Microhttpd module for the Kamailio SIP server
.
This package provides an embedded HTTP server using libmicrohttpd.
Package: kamailio-kafka-modules
Architecture: any
Multi-Arch: same
Pre-Depends:
${misc:Pre-Depends},
Depends:
kamailio (= ${binary:Version}),
${misc:Depends},
${shlibs:Depends},
Description: Kafka module for the Kamailio SIP server
Kamailio is a very fast and flexible SIP (RFC3261)
server. Written entirely in C, Kamailio can handle thousands calls
per second even on low-budget hardware.
.
This package provides an embedded kafka producer using librdkafka.
Package: kamailio-extra-modules
Architecture: any
Multi-Arch: same

@ -21,4 +21,3 @@ case "$1" in
esac
#DEBHELPER#

@ -26,6 +26,8 @@ export LIBSSL_STATIC_SRCPATH=/usr/$(LIBDIR)
# Modules not in the "main" kamailio package:
EXCLUDED_MODULES =
EXCLUDED_MODULES += mono
EXCLUDED_MODULES += geoip
# Extra modules to skip, because they are not compilable now:
# - regardless if they go to the main kamailio package or to some module
@ -62,11 +64,9 @@ PACKAGE_GROUPS += carrierroute
PACKAGE_GROUPS += xmpp
PACKAGE_GROUPS += cpl
PACKAGE_GROUPS += redis
PACKAGE_GROUPS += geoip
PACKAGE_GROUPS += geoip2
PACKAGE_GROUPS += sqlite
PACKAGE_GROUPS += json
PACKAGE_GROUPS += mono
PACKAGE_GROUPS += ruby
PACKAGE_GROUPS += ims
PACKAGE_GROUPS += sctp
@ -88,6 +88,7 @@ PACKAGE_GROUPS += lwsc
PACKAGE_GROUPS += nats
PACKAGE_GROUPS += tls_wolfssl
PACKAGE_GROUPS += microhttpd
PACKAGE_GROUPS += kafka
# Module groups to be packaged onto kamailio-extra-modules.
EXTRA_GROUPS += ev

@ -1,65 +1,47 @@
kamailio (5.8.5) unstable; urgency=medium
kamailio (6.0.1) unstable; urgency=medium
* version set 5.8.5
* version set 6.0.1
-- Victor Seva <vseva@debian.org> Thu, 23 Jan 2025 08:31:22 +0100
-- Victor Seva <vseva@debian.org> Mon, 10 Mar 2025 08:18:44 +0100
kamailio (5.8.4) unstable; urgency=medium
kamailio (6.0.0) unstable; urgency=medium
* version set 5.8.4
* version set 6.0.0
-- Victor Seva <vseva@debian.org> Tue, 12 Nov 2024 10:53:35 +0100
-- Victor Seva <vseva@debian.org> Wed, 29 Jan 2025 09:06:18 +0100
kamailio (5.8.3) unstable; urgency=medium
kamailio (6.0.0~rc0) unstable; urgency=medium
* version set 5.8.3
* version set 6.0.0~rc0
-- Victor Seva <vseva@debian.org> Wed, 04 Sep 2024 09:29:45 +0200
-- Victor Seva <vseva@debian.org> Thu, 23 Jan 2025 08:54:27 +0100
kamailio (5.8.2) unstable; urgency=medium
kamailio (6.0.0~pre0) unstable; urgency=medium
* version set 5.8.2
* version set 6.0.0~pre0
-- Victor Seva <vseva@debian.org> Wed, 12 Jun 2024 09:00:17 +0200
-- Victor Seva <vseva@debian.org> Tue, 17 Dec 2024 20:14:42 +0100
kamailio (5.8.1) unstable; urgency=medium
kamailio (6.0.0~dev3) unstable; urgency=medium
* version set 5.8.1
* version set 6.0.0~dev3
-- Victor Seva <vseva@debian.org> Wed, 03 Apr 2024 08:21:53 +0200
-- Victor Seva <vseva@debian.org> Mon, 30 Sep 2024 13:58:53 +0200
kamailio (5.8.0) unstable; urgency=medium
kamailio (6.0.0~dev2) unstable; urgency=medium
* version set 5.8.0
* version set 6.0.0~dev2
-- Victor Seva <vseva@debian.org> Thu, 07 Mar 2024 11:40:20 +0100
-- Victor Seva <vseva@debian.org> Thu, 16 May 2024 09:46:08 +0200
kamailio (5.8.0~rc0) unstable; urgency=medium
kamailio (5.9.0~dev1) unstable; urgency=medium
* version set 5.8.0~rc0
* version set 5.9.0~dev1
-- Victor Seva <vseva@debian.org> Fri, 23 Feb 2024 20:04:35 +0100
-- Victor Seva <vseva@debian.org> Mon, 15 Apr 2024 08:52:26 +0200
kamailio (5.8.0~pre0) unstable; urgency=medium
kamailio (5.9.0~dev0) unstable; urgency=medium
* version set 5.8.0~pre0
* version set 5.9.0~dev0
-- Victor Seva <vseva@debian.org> Fri, 02 Feb 2024 15:20:05 +0100
kamailio (5.8.0~dev2) unstable; urgency=medium
* version set 5.8.0~dev2
-- Victor Seva <vseva@debian.org> Tue, 05 Dec 2023 12:04:06 +0100
kamailio (5.8.0~dev1) unstable; urgency=medium
* version set 5.8.0~dev1
-- Victor Seva <vseva@debian.org> Wed, 28 Jun 2023 15:03:56 +0200
kamailio (5.8.0~dev0) unstable; urgency=medium
* version set 5.8.0~dev0
-- Victor Seva <vseva@debian.org> Thu, 04 May 2023 21:45:08 +0200
-- Victor Seva <vseva@debian.org> Thu, 23 Feb 2024 19:45:08 +0209

@ -17,7 +17,6 @@ Build-Depends:
libev-dev,
libevent-dev,
libexpat1-dev,
libgeoip-dev (>= 1.4.5),
libhiredis-dev (>= 0.10.0),
libjansson-dev,
libjson-c-dev,
@ -28,7 +27,6 @@ Build-Depends:
libmicrohttpd-dev,
libmnl-dev,
libmongoc-dev,
libmono-2.0-dev [amd64 armel armhf i386 mipsel kfreebsd-amd64 kfreebsd-i386 ppc64 ppc64el s390x],
libmosquitto-dev,
libncurses5-dev,
libpcre2-dev,
@ -37,6 +35,7 @@ Build-Depends:
libpq-dev,
librabbitmq-dev,
libradcli-dev,
librdkafka-dev,
libreadline-dev,
libsasl2-dev,
libsctp-dev [any],
@ -108,8 +107,7 @@ Description: very fast, dynamic and configurable SIP server
A C Shell like scripting language provides full control over the server's
behaviour. It's easy to integrate Kamailio with 3rd party API's and applications
using HTTP, AMQP, database drivers, LDAP, Radius and many other solutions.
In addition there is support for scripting using Lua, Python, Perl, Java and
a set of other languages using Mono.
In addition there is support for scripting using Lua, Python, Perl, Java.
.
Kamailio's modular architecture allows only required functionality to be loaded.
There are over 100 modules available: WebSockets for WebRTC, authentication,
@ -141,23 +139,6 @@ Description: very fast and configurable SIP server [debug symbols]
This package contains the debugging symbols for the Kamailio binaries and
modules. You only need to install it if you need to debug Kamailio.
Package: kamailio-geoip-modules
Architecture: any
Multi-Arch: same
Pre-Depends:
${misc:Pre-Depends},
Depends:
kamailio (= ${binary:Version}),
${misc:Depends},
${shlibs:Depends},
Description: The geoip module for the Kamailio SIP Server
Kamailio is a very fast and flexible SIP (RFC3261)
server. Written entirely in C, Kamailio can handle thousands calls
per second even on low-budget hardware.
.
This package provides the geoip module, an extension enabling
usage of the GeoIP API within the Kamailio configuration file.
Package: kamailio-geoip2-modules
Architecture: any
Multi-Arch: same
@ -248,23 +229,6 @@ Description: The app_lua module for Kamailio Lua support
execute embedded Lua applications within the configuration file as
well as writing the entire configuration file in Lua.
Package: kamailio-mono-modules
Architecture: any
Multi-Arch: same
Pre-Depends:
${misc:Pre-Depends},
Depends:
kamailio (= ${binary:Version}),
${misc:Depends},
${shlibs:Depends},
Description: The app_mono module for the Kamailio SIP server
Kamailio is a very fast and flexible SIP (RFC3261)
server. Written entirely in C, Kamailio can handle thousands calls
per second even on low-budget hardware.
.
This package provides the app_mono module, an extension allowing to
execute embedded Mono applications within the Kamailio SIP routing script.
Package: kamailio-python-modules
Architecture: any
Multi-Arch: same
@ -897,6 +861,22 @@ Description: Microhttpd module for the Kamailio SIP server
.
This package provides an embedded HTTP server using libmicrohttpd.
Package: kamailio-kafka-modules
Architecture: any
Multi-Arch: same
Pre-Depends:
${misc:Pre-Depends},
Depends:
kamailio (= ${binary:Version}),
${misc:Depends},
${shlibs:Depends},
Description: Kafka module for the Kamailio SIP server
Kamailio is a very fast and flexible SIP (RFC3261)
server. Written entirely in C, Kamailio can handle thousands calls
per second even on low-budget hardware.
.
This package provides an embedded kafka producer using librdkafka.
Package: kamailio-extra-modules
Architecture: any
Multi-Arch: same

@ -21,4 +21,3 @@ case "$1" in
esac
#DEBHELPER#

@ -26,6 +26,8 @@ export LIBSSL_STATIC_SRCPATH=/usr/$(LIBDIR)
# Modules not in the "main" kamailio package:
EXCLUDED_MODULES =
EXCLUDED_MODULES += mono
EXCLUDED_MODULES += geoip
# Extra modules to skip, because they are not compilable now:
# - regardless if they go to the main kamailio package or to some module
@ -64,11 +66,9 @@ PACKAGE_GROUPS += xmpp
PACKAGE_GROUPS += cpl
PACKAGE_GROUPS += redis
PACKAGE_GROUPS += python
PACKAGE_GROUPS += geoip
PACKAGE_GROUPS += geoip2
PACKAGE_GROUPS += sqlite
PACKAGE_GROUPS += json
PACKAGE_GROUPS += mono
PACKAGE_GROUPS += ruby
PACKAGE_GROUPS += ims
PACKAGE_GROUPS += sctp
@ -88,6 +88,7 @@ PACKAGE_GROUPS += mqtt
PACKAGE_GROUPS += secsipid
PACKAGE_GROUPS += lwsc
PACKAGE_GROUPS += microhttpd
PACKAGE_GROUPS += kafka
# Module groups to be packaged onto kamailio-extra-modules.
EXTRA_GROUPS += ev

@ -1,65 +1,47 @@
kamailio (5.8.5) unstable; urgency=medium
kamailio (6.0.1) unstable; urgency=medium
* version set 5.8.5
* version set 6.0.1
-- Victor Seva <vseva@debian.org> Thu, 23 Jan 2025 08:31:22 +0100
-- Victor Seva <vseva@debian.org> Mon, 10 Mar 2025 08:18:44 +0100
kamailio (5.8.4) unstable; urgency=medium
kamailio (6.0.0) unstable; urgency=medium
* version set 5.8.4
* version set 6.0.0
-- Victor Seva <vseva@debian.org> Tue, 12 Nov 2024 10:53:35 +0100
-- Victor Seva <vseva@debian.org> Wed, 29 Jan 2025 09:06:18 +0100
kamailio (5.8.3) unstable; urgency=medium
kamailio (6.0.0~rc0) unstable; urgency=medium
* version set 5.8.3
* version set 6.0.0~rc0
-- Victor Seva <vseva@debian.org> Wed, 04 Sep 2024 09:29:45 +0200
-- Victor Seva <vseva@debian.org> Thu, 23 Jan 2025 08:54:27 +0100
kamailio (5.8.2) unstable; urgency=medium
kamailio (6.0.0~pre0) unstable; urgency=medium
* version set 5.8.2
* version set 6.0.0~pre0
-- Victor Seva <vseva@debian.org> Wed, 12 Jun 2024 09:00:17 +0200
-- Victor Seva <vseva@debian.org> Tue, 17 Dec 2024 20:14:42 +0100
kamailio (5.8.1) unstable; urgency=medium
kamailio (6.0.0~dev3) unstable; urgency=medium
* version set 5.8.1
* version set 6.0.0~dev3
-- Victor Seva <vseva@debian.org> Wed, 03 Apr 2024 08:21:53 +0200
-- Victor Seva <vseva@debian.org> Mon, 30 Sep 2024 13:58:53 +0200
kamailio (5.8.0) unstable; urgency=medium
kamailio (6.0.0~dev2) unstable; urgency=medium
* version set 5.8.0
* version set 6.0.0~dev2
-- Victor Seva <vseva@debian.org> Thu, 07 Mar 2024 11:40:20 +0100
-- Victor Seva <vseva@debian.org> Thu, 16 May 2024 09:46:08 +0200
kamailio (5.8.0~rc0) unstable; urgency=medium
kamailio (5.9.0~dev1) unstable; urgency=medium
* version set 5.8.0~rc0
* version set 5.9.0~dev1
-- Victor Seva <vseva@debian.org> Fri, 23 Feb 2024 20:04:35 +0100
-- Victor Seva <vseva@debian.org> Mon, 15 Apr 2024 08:52:26 +0200
kamailio (5.8.0~pre0) unstable; urgency=medium
kamailio (5.9.0~dev0) unstable; urgency=medium
* version set 5.8.0~pre0
* version set 5.9.0~dev0
-- Victor Seva <vseva@debian.org> Fri, 02 Feb 2024 15:20:05 +0100
kamailio (5.8.0~dev2) unstable; urgency=medium
* version set 5.8.0~dev2
-- Victor Seva <vseva@debian.org> Tue, 05 Dec 2023 12:04:06 +0100
kamailio (5.8.0~dev1) unstable; urgency=medium
* version set 5.8.0~dev1
-- Victor Seva <vseva@debian.org> Wed, 28 Jun 2023 15:03:56 +0200
kamailio (5.8.0~dev0) unstable; urgency=medium
* version set 5.8.0~dev0
-- Victor Seva <vseva@debian.org> Thu, 04 May 2023 21:45:08 +0200
-- Victor Seva <vseva@debian.org> Thu, 23 Feb 2024 19:45:08 +0209

@ -18,7 +18,6 @@ Build-Depends:
libev-dev,
libevent-dev,
libexpat1-dev,
libgeoip-dev (>= 1.4.5),
libhiredis-dev (>= 0.10.0),
libjansson-dev,
libjson-c-dev,
@ -28,7 +27,6 @@ Build-Depends:
libmemcached-dev,
libmnl-dev,
libmongoc-dev,
libmono-2.0-dev [amd64 armel armhf i386 mipsel kfreebsd-amd64 kfreebsd-i386 ppc64 ppc64el s390x],
libmosquitto-dev,
libncurses5-dev,
libpcre2-dev,
@ -106,8 +104,7 @@ Description: very fast, dynamic and configurable SIP server
A C Shell like scripting language provides full control over the server's
behaviour. It's easy to integrate Kamailio with 3rd party API's and applications
using HTTP, AMQP, database drivers, LDAP, Radius and many other solutions.
In addition there is support for scripting using Lua, Python, Perl, Java and
a set of other languages using Mono.
In addition there is support for scripting using Lua, Python, Perl, Java.
.
Kamailio's modular architecture allows only required functionality to be loaded.
There are over 100 modules available: WebSockets for WebRTC, authentication,
@ -139,23 +136,6 @@ Description: very fast and configurable SIP server [debug symbols]
This package contains the debugging symbols for the Kamailio binaries and
modules. You only need to install it if you need to debug Kamailio.
Package: kamailio-geoip-modules
Architecture: any
Multi-Arch: same
Pre-Depends:
${misc:Pre-Depends},
Depends:
kamailio (= ${binary:Version}),
${misc:Depends},
${shlibs:Depends},
Description: The geoip module for the Kamailio SIP Server
Kamailio is a very fast and flexible SIP (RFC3261)
server. Written entirely in C, Kamailio can handle thousands calls
per second even on low-budget hardware.
.
This package provides the geoip module, an extension enabling
usage of the GeoIP API within the Kamailio configuration file.
Package: kamailio-geoip2-modules
Architecture: any
Multi-Arch: same
@ -246,23 +226,6 @@ Description: The app_lua module for Kamailio Lua support
execute embedded Lua applications within the configuration file as
well as writing the entire configuration file in Lua.
Package: kamailio-mono-modules
Architecture: any
Multi-Arch: same
Pre-Depends:
${misc:Pre-Depends},
Depends:
kamailio (= ${binary:Version}),
${misc:Depends},
${shlibs:Depends},
Description: The app_mono module for the Kamailio SIP server
Kamailio is a very fast and flexible SIP (RFC3261)
server. Written entirely in C, Kamailio can handle thousands calls
per second even on low-budget hardware.
.
This package provides the app_mono module, an extension allowing to
execute embedded Mono applications within the Kamailio SIP routing script.
Package: kamailio-python-modules
Architecture: any
Multi-Arch: same

@ -21,4 +21,3 @@ case "$1" in
esac
#DEBHELPER#

@ -26,6 +26,8 @@ export LIBSSL_STATIC_SRCPATH=/usr/$(LIBDIR)
# Modules not in the "main" kamailio package:
EXCLUDED_MODULES =
EXCLUDED_MODULES += mono
EXCLUDED_MODULES += geoip
# Extra modules to skip, because they are not compilable now:
# - regardless if they go to the main kamailio package or to some module
@ -42,6 +44,7 @@ EXTRA_EXCLUDED_MODULES += lwsc
EXTRA_EXCLUDED_MODULES += nats
EXTRA_EXCLUDED_MODULES += microhttpd
EXTRA_EXCLUDED_MODULES += tls_wolfssl
EXTRA_EXCLUDED_MODULES += kafka
## --EXCLUDED--
@ -67,11 +70,9 @@ PACKAGE_GROUPS += xmpp
PACKAGE_GROUPS += cpl
PACKAGE_GROUPS += redis
PACKAGE_GROUPS += python
PACKAGE_GROUPS += geoip
PACKAGE_GROUPS += geoip2
PACKAGE_GROUPS += sqlite
PACKAGE_GROUPS += json
PACKAGE_GROUPS += mono
PACKAGE_GROUPS += ruby
PACKAGE_GROUPS += ims
PACKAGE_GROUPS += sctp

@ -52,6 +52,13 @@ sed -i -e '/^ libwolfssl-dev,/d' \
sed -i -e '/^PACKAGE_GROUPS += tls_wolfssl/d' ${DIST}/rules
sed -i -e '/--EXCLUDED--/i EXTRA_EXCLUDED_MODULES += tls_wolfssl' ${DIST}/rules
# librdkafka-dev < 1.1.0
sed -i -e '/^ librdkafka-dev,/d' \
-e '/^Package: kamailio-kafka-modules/,/^$/d' \
${DIST}/control
sed -i -e '/^PACKAGE_GROUPS += kafka/d' ${DIST}/rules
sed -i -e '/--EXCLUDED--/i EXTRA_EXCLUDED_MODULES += kafka' ${DIST}/rules
wrap-and-sort -sat -d ${DIST}
# clean backports scripts

@ -52,6 +52,13 @@ sed -i -e '/^ libwolfssl-dev,/d' \
sed -i -e '/^PACKAGE_GROUPS += tls_wolfssl/d' ${DIST}/rules
sed -i -e '/--EXCLUDED--/i EXTRA_EXCLUDED_MODULES += tls_wolfssl' ${DIST}/rules
# librdkafka-dev < 1.1.0
sed -i -e '/^ librdkafka-dev,/d' \
-e '/^Package: kamailio-kafka-modules/,/^$/d' \
${DIST}/control
sed -i -e '/^PACKAGE_GROUPS += kafka/d' ${DIST}/rules
sed -i -e '/--EXCLUDED--/i EXTRA_EXCLUDED_MODULES += kafka' ${DIST}/rules
wrap-and-sort -sat -d ${DIST}
# clean backports scripts

@ -65,6 +65,13 @@ sed -i -e '/^ libwolfssl-dev,/d' \
sed -i -e '/^PACKAGE_GROUPS += tls_wolfssl/d' ${DIST}/rules
sed -i -e '/--EXCLUDED--/i EXTRA_EXCLUDED_MODULES += tls_wolfssl' ${DIST}/rules
# librdkafka-dev < 1.1.0
sed -i -e '/^ librdkafka-dev,/d' \
-e '/^Package: kamailio-kafka-modules/,/^$/d' \
${DIST}/control
sed -i -e '/^PACKAGE_GROUPS += kafka/d' ${DIST}/rules
sed -i -e '/--EXCLUDED--/i EXTRA_EXCLUDED_MODULES += kafka' ${DIST}/rules
wrap-and-sort -sat -d ${DIST}
# clean backports scripts

@ -1,6 +1,6 @@
#!/bin/bash
#
# Target dist: Ubuntu 24.04 (Noble Numbat)
# Target dist: Ubuntu Noble
DIST=noble
rm -rf ${DIST}

@ -128,6 +128,13 @@ sed -i -e '/^ libwolfssl-dev,/d' \
sed -i -e '/^PACKAGE_GROUPS += tls_wolfssl/d' ${DIST}/rules
sed -i -e '/--EXCLUDED--/i EXTRA_EXCLUDED_MODULES += tls_wolfssl' ${DIST}/rules
# librdkafka-dev < 1.1.0
sed -i -e '/^ librdkafka-dev,/d' \
-e '/^Package: kamailio-kafka-modules/,/^$/d' \
${DIST}/control
sed -i -e '/^PACKAGE_GROUPS += kafka/d' ${DIST}/rules
sed -i -e '/--EXCLUDED--/i EXTRA_EXCLUDED_MODULES += kafka' ${DIST}/rules
wrap-and-sort -sat -d ${DIST}
# clean backports scripts

@ -55,6 +55,13 @@ sed -i -e '/^ libwolfssl-dev,/d' \
sed -i -e '/^PACKAGE_GROUPS += tls_wolfssl/d' ${DIST}/rules
sed -i -e '/--EXCLUDED--/i EXTRA_EXCLUDED_MODULES += tls_wolfssl' ${DIST}/rules
# librdkafka-dev < 1.1.0
sed -i -e '/^ librdkafka-dev,/d' \
-e '/^Package: kamailio-kafka-modules/,/^$/d' \
${DIST}/control
sed -i -e '/^PACKAGE_GROUPS += kafka/d' ${DIST}/rules
sed -i -e '/--EXCLUDED--/i EXTRA_EXCLUDED_MODULES += kafka' ${DIST}/rules
wrap-and-sort -sat -d ${DIST}
# clean backports scripts

@ -91,6 +91,13 @@ sed -i -e '/^ libwolfssl-dev,/d' \
sed -i -e '/^PACKAGE_GROUPS += tls_wolfssl/d' ${DIST}/rules
sed -i -e '/--EXCLUDED--/i EXTRA_EXCLUDED_MODULES += tls_wolfssl' ${DIST}/rules
# librdkafka-dev < 1.1.0
sed -i -e '/^ librdkafka-dev,/d' \
-e '/^Package: kamailio-kafka-modules/,/^$/d' \
${DIST}/control
sed -i -e '/^PACKAGE_GROUPS += kafka/d' ${DIST}/rules
sed -i -e '/--EXCLUDED--/i EXTRA_EXCLUDED_MODULES += kafka' ${DIST}/rules
wrap-and-sort -sat -d ${DIST}
# clean backports scripts

@ -134,6 +134,13 @@ sed -i -e '/^ libwolfssl-dev,/d' \
sed -i -e '/^PACKAGE_GROUPS += tls_wolfssl/d' ${DIST}/rules
sed -i -e '/--EXCLUDED--/i EXTRA_EXCLUDED_MODULES += tls_wolfssl' ${DIST}/rules
# librdkafka-dev < 1.1.0
sed -i -e '/^ librdkafka-dev,/d' \
-e '/^Package: kamailio-kafka-modules/,/^$/d' \
${DIST}/control
sed -i -e '/^PACKAGE_GROUPS += kafka/d' ${DIST}/rules
sed -i -e '/--EXCLUDED--/i EXTRA_EXCLUDED_MODULES += kafka' ${DIST}/rules
wrap-and-sort -sat -d ${DIST}
# clean backports scripts

@ -64,6 +64,13 @@ sed -i -e '/^ libwolfssl-dev,/d' \
sed -i -e '/^PACKAGE_GROUPS += tls_wolfssl/d' ${DIST}/rules
sed -i -e '/--EXCLUDED--/i EXTRA_EXCLUDED_MODULES += tls_wolfssl' ${DIST}/rules
# librdkafka-dev < 1.1.0
sed -i -e '/^ librdkafka-dev,/d' \
-e '/^Package: kamailio-kafka-modules/,/^$/d' \
${DIST}/control
sed -i -e '/^PACKAGE_GROUPS += kafka/d' ${DIST}/rules
sed -i -e '/--EXCLUDED--/i EXTRA_EXCLUDED_MODULES += kafka' ${DIST}/rules
# tlsa build fails
sed -i -e 's/KTLS_INCLUDE_TLSA=yes/KTLS_INCLUDE_TLSA=no/' ${DIST}/rules

@ -1,65 +1,47 @@
kamailio (5.8.5) unstable; urgency=medium
kamailio (6.0.1) unstable; urgency=medium
* version set 5.8.5
* version set 6.0.1
-- Victor Seva <vseva@debian.org> Thu, 23 Jan 2025 08:31:22 +0100
-- Victor Seva <vseva@debian.org> Mon, 10 Mar 2025 08:18:44 +0100
kamailio (5.8.4) unstable; urgency=medium
kamailio (6.0.0) unstable; urgency=medium
* version set 5.8.4
* version set 6.0.0
-- Victor Seva <vseva@debian.org> Tue, 12 Nov 2024 10:53:35 +0100
-- Victor Seva <vseva@debian.org> Wed, 29 Jan 2025 09:06:18 +0100
kamailio (5.8.3) unstable; urgency=medium
kamailio (6.0.0~rc0) unstable; urgency=medium
* version set 5.8.3
* version set 6.0.0~rc0
-- Victor Seva <vseva@debian.org> Wed, 04 Sep 2024 09:29:45 +0200
-- Victor Seva <vseva@debian.org> Thu, 23 Jan 2025 08:54:27 +0100
kamailio (5.8.2) unstable; urgency=medium
kamailio (6.0.0~pre0) unstable; urgency=medium
* version set 5.8.2
* version set 6.0.0~pre0
-- Victor Seva <vseva@debian.org> Wed, 12 Jun 2024 09:00:17 +0200
-- Victor Seva <vseva@debian.org> Tue, 17 Dec 2024 20:14:42 +0100
kamailio (5.8.1) unstable; urgency=medium
kamailio (6.0.0~dev3) unstable; urgency=medium
* version set 5.8.1
* version set 6.0.0~dev3
-- Victor Seva <vseva@debian.org> Wed, 03 Apr 2024 08:21:53 +0200
-- Victor Seva <vseva@debian.org> Mon, 30 Sep 2024 13:58:53 +0200
kamailio (5.8.0) unstable; urgency=medium
kamailio (6.0.0~dev2) unstable; urgency=medium
* version set 5.8.0
* version set 6.0.0~dev2
-- Victor Seva <vseva@debian.org> Thu, 07 Mar 2024 11:40:20 +0100
-- Victor Seva <vseva@debian.org> Thu, 16 May 2024 09:46:08 +0200
kamailio (5.8.0~rc0) unstable; urgency=medium
kamailio (5.9.0~dev1) unstable; urgency=medium
* version set 5.8.0~rc0
* version set 5.9.0~dev1
-- Victor Seva <vseva@debian.org> Fri, 23 Feb 2024 20:04:35 +0100
-- Victor Seva <vseva@debian.org> Mon, 15 Apr 2024 08:52:26 +0200
kamailio (5.8.0~pre0) unstable; urgency=medium
kamailio (5.9.0~dev0) unstable; urgency=medium
* version set 5.8.0~pre0
* version set 5.9.0~dev0
-- Victor Seva <vseva@debian.org> Fri, 02 Feb 2024 15:20:05 +0100
kamailio (5.8.0~dev2) unstable; urgency=medium
* version set 5.8.0~dev2
-- Victor Seva <vseva@debian.org> Tue, 05 Dec 2023 12:04:06 +0100
kamailio (5.8.0~dev1) unstable; urgency=medium
* version set 5.8.0~dev1
-- Victor Seva <vseva@debian.org> Wed, 28 Jun 2023 15:03:56 +0200
kamailio (5.8.0~dev0) unstable; urgency=medium
* version set 5.8.0~dev0
-- Victor Seva <vseva@debian.org> Thu, 04 May 2023 21:45:08 +0200
-- Victor Seva <vseva@debian.org> Thu, 23 Feb 2024 19:45:08 +0209

@ -19,7 +19,6 @@ Build-Depends:
libev-dev,
libevent-dev,
libexpat1-dev,
libgeoip-dev (>= 1.4.5),
libhiredis-dev (>= 0.10.0),
libjansson-dev,
libjson-c-dev,
@ -30,7 +29,6 @@ Build-Depends:
libmicrohttpd-dev,
libmnl-dev,
libmongoc-dev,
libmono-2.0-dev [amd64 armel armhf i386 mipsel kfreebsd-amd64 kfreebsd-i386 ppc64 ppc64el s390x],
libmosquitto-dev,
libnats-dev,
libncurses5-dev,
@ -40,6 +38,7 @@ Build-Depends:
libpq-dev,
librabbitmq-dev,
libradcli-dev,
librdkafka-dev,
libreadline-dev,
libsasl2-dev,
libsctp-dev [any],
@ -113,8 +112,7 @@ Description: very fast, dynamic and configurable SIP server
A C Shell like scripting language provides full control over the server's
behaviour. It's easy to integrate Kamailio with 3rd party API's and applications
using HTTP, AMQP, database drivers, LDAP, Radius and many other solutions.
In addition there is support for scripting using Lua, Python, Perl, Java and
a set of other languages using Mono.
In addition there is support for scripting using Lua, Python, Perl, Java.
.
Kamailio's modular architecture allows only required functionality to be loaded.
There are over 100 modules available: WebSockets for WebRTC, authentication,
@ -146,23 +144,6 @@ Description: very fast and configurable SIP server [debug symbols]
This package contains the debugging symbols for the Kamailio binaries and
modules. You only need to install it if you need to debug Kamailio.
Package: kamailio-geoip-modules
Architecture: any
Multi-Arch: same
Pre-Depends:
${misc:Pre-Depends},
Depends:
kamailio (= ${binary:Version}),
${misc:Depends},
${shlibs:Depends},
Description: The geoip module for the Kamailio SIP Server
Kamailio is a very fast and flexible SIP (RFC3261)
server. Written entirely in C, Kamailio can handle thousands calls
per second even on low-budget hardware.
.
This package provides the geoip module, an extension enabling
usage of the GeoIP API within the Kamailio configuration file.
Package: kamailio-geoip2-modules
Architecture: any
Multi-Arch: same
@ -253,23 +234,6 @@ Description: The app_lua module for Kamailio Lua support
execute embedded Lua applications within the configuration file as
well as writing the entire configuration file in Lua.
Package: kamailio-mono-modules
Architecture: any
Multi-Arch: same
Pre-Depends:
${misc:Pre-Depends},
Depends:
kamailio (= ${binary:Version}),
${misc:Depends},
${shlibs:Depends},
Description: The app_mono module for the Kamailio SIP server
Kamailio is a very fast and flexible SIP (RFC3261)
server. Written entirely in C, Kamailio can handle thousands calls
per second even on low-budget hardware.
.
This package provides the app_mono module, an extension allowing to
execute embedded Mono applications within the Kamailio SIP routing script.
Package: kamailio-python-modules
Architecture: any
Multi-Arch: same
@ -954,6 +918,22 @@ Description: Microhttpd module for the Kamailio SIP server
.
This package provides an embedded HTTP server using libmicrohttpd.
Package: kamailio-kafka-modules
Architecture: any
Multi-Arch: same
Pre-Depends:
${misc:Pre-Depends},
Depends:
kamailio (= ${binary:Version}),
${misc:Depends},
${shlibs:Depends},
Description: Kafka module for the Kamailio SIP server
Kamailio is a very fast and flexible SIP (RFC3261)
server. Written entirely in C, Kamailio can handle thousands calls
per second even on low-budget hardware.
.
This package provides an embedded kafka producer using librdkafka.
Package: kamailio-extra-modules
Architecture: any
Multi-Arch: same

@ -21,4 +21,3 @@ case "$1" in
esac
#DEBHELPER#

@ -27,6 +27,8 @@ export LIBSSL_STATIC_SRCPATH=/usr/$(LIBDIR)
# Modules not in the "main" kamailio package:
EXCLUDED_MODULES =
EXCLUDED_MODULES += mono
EXCLUDED_MODULES += geoip
# Extra modules to skip, because they are not compilable now:
# - regardless if they go to the main kamailio package or to some module
@ -61,11 +63,9 @@ PACKAGE_GROUPS += xmpp
PACKAGE_GROUPS += cpl
PACKAGE_GROUPS += redis
PACKAGE_GROUPS += python
PACKAGE_GROUPS += geoip
PACKAGE_GROUPS += geoip2
PACKAGE_GROUPS += sqlite
PACKAGE_GROUPS += json
PACKAGE_GROUPS += mono
PACKAGE_GROUPS += ruby
PACKAGE_GROUPS += ims
PACKAGE_GROUPS += sctp
@ -89,6 +89,7 @@ PACKAGE_GROUPS += lwsc
PACKAGE_GROUPS += nats
PACKAGE_GROUPS += tls_wolfssl
PACKAGE_GROUPS += microhttpd
PACKAGE_GROUPS += kafka
# Module groups to be packaged onto kamailio-extra-modules.
EXTRA_GROUPS += ev

@ -1,65 +1,47 @@
kamailio (5.8.5) unstable; urgency=medium
kamailio (6.0.1) unstable; urgency=medium
* version set 5.8.5
* version set 6.0.1
-- Victor Seva <vseva@debian.org> Thu, 23 Jan 2025 08:31:22 +0100
-- Victor Seva <vseva@debian.org> Mon, 10 Mar 2025 08:18:44 +0100
kamailio (5.8.4) unstable; urgency=medium
kamailio (6.0.0) unstable; urgency=medium
* version set 5.8.4
* version set 6.0.0
-- Victor Seva <vseva@debian.org> Tue, 12 Nov 2024 10:53:35 +0100
-- Victor Seva <vseva@debian.org> Wed, 29 Jan 2025 09:06:18 +0100
kamailio (5.8.3) unstable; urgency=medium
kamailio (6.0.0~rc0) unstable; urgency=medium
* version set 5.8.3
* version set 6.0.0~rc0
-- Victor Seva <vseva@debian.org> Wed, 04 Sep 2024 09:29:45 +0200
-- Victor Seva <vseva@debian.org> Thu, 23 Jan 2025 08:54:27 +0100
kamailio (5.8.2) unstable; urgency=medium
kamailio (6.0.0~pre0) unstable; urgency=medium
* version set 5.8.2
* version set 6.0.0~pre0
-- Victor Seva <vseva@debian.org> Wed, 12 Jun 2024 09:00:17 +0200
-- Victor Seva <vseva@debian.org> Tue, 17 Dec 2024 20:14:42 +0100
kamailio (5.8.1) unstable; urgency=medium
kamailio (6.0.0~dev3) unstable; urgency=medium
* version set 5.8.1
* version set 6.0.0~dev3
-- Victor Seva <vseva@debian.org> Wed, 03 Apr 2024 08:21:53 +0200
-- Victor Seva <vseva@debian.org> Mon, 30 Sep 2024 13:58:53 +0200
kamailio (5.8.0) unstable; urgency=medium
kamailio (6.0.0~dev2) unstable; urgency=medium
* version set 5.8.0
* version set 6.0.0~dev2
-- Victor Seva <vseva@debian.org> Thu, 07 Mar 2024 11:40:20 +0100
-- Victor Seva <vseva@debian.org> Thu, 16 May 2024 09:46:08 +0200
kamailio (5.8.0~rc0) unstable; urgency=medium
kamailio (5.9.0~dev1) unstable; urgency=medium
* version set 5.8.0~rc0
* version set 5.9.0~dev1
-- Victor Seva <vseva@debian.org> Fri, 23 Feb 2024 20:04:35 +0100
-- Victor Seva <vseva@debian.org> Mon, 15 Apr 2024 08:52:26 +0200
kamailio (5.8.0~pre0) unstable; urgency=medium
kamailio (5.9.0~dev0) unstable; urgency=medium
* version set 5.8.0~pre0
* version set 5.9.0~dev0
-- Victor Seva <vseva@debian.org> Fri, 02 Feb 2024 15:20:05 +0100
kamailio (5.8.0~dev2) unstable; urgency=medium
* version set 5.8.0~dev2
-- Victor Seva <vseva@debian.org> Tue, 05 Dec 2023 12:04:06 +0100
kamailio (5.8.0~dev1) unstable; urgency=medium
* version set 5.8.0~dev1
-- Victor Seva <vseva@debian.org> Wed, 28 Jun 2023 15:03:56 +0200
kamailio (5.8.0~dev0) unstable; urgency=medium
* version set 5.8.0~dev0
-- Victor Seva <vseva@debian.org> Thu, 04 May 2023 21:45:08 +0200
-- Victor Seva <vseva@debian.org> Thu, 23 Feb 2024 19:45:08 +0209

@ -18,7 +18,6 @@ Build-Depends:
libev-dev,
libevent-dev,
libexpat1-dev,
libgeoip-dev (>= 1.4.5),
libhiredis-dev (>= 0.10.0),
libjansson-dev,
libjson-c-dev,
@ -28,7 +27,6 @@ Build-Depends:
libmemcached-dev,
libmnl-dev,
libmongoc-dev,
libmono-2.0-dev [amd64 armel armhf i386 mipsel kfreebsd-amd64 kfreebsd-i386 ppc64 ppc64el s390x],
libmosquitto-dev,
libncurses5-dev,
libpcre2-dev,
@ -37,6 +35,7 @@ Build-Depends:
libpq-dev,
librabbitmq-dev,
libradcli-dev,
librdkafka-dev,
libreadline-dev,
libsasl2-dev,
libsctp-dev [any],
@ -107,8 +106,7 @@ Description: very fast, dynamic and configurable SIP server
A C Shell like scripting language provides full control over the server's
behaviour. It's easy to integrate Kamailio with 3rd party API's and applications
using HTTP, AMQP, database drivers, LDAP, Radius and many other solutions.
In addition there is support for scripting using Lua, Python, Perl, Java and
a set of other languages using Mono.
In addition there is support for scripting using Lua, Python, Perl, Java.
.
Kamailio's modular architecture allows only required functionality to be loaded.
There are over 100 modules available: WebSockets for WebRTC, authentication,
@ -140,23 +138,6 @@ Description: very fast and configurable SIP server [debug symbols]
This package contains the debugging symbols for the Kamailio binaries and
modules. You only need to install it if you need to debug Kamailio.
Package: kamailio-geoip-modules
Architecture: any
Multi-Arch: same
Pre-Depends:
${misc:Pre-Depends},
Depends:
kamailio (= ${binary:Version}),
${misc:Depends},
${shlibs:Depends},
Description: The geoip module for the Kamailio SIP Server
Kamailio is a very fast and flexible SIP (RFC3261)
server. Written entirely in C, Kamailio can handle thousands calls
per second even on low-budget hardware.
.
This package provides the geoip module, an extension enabling
usage of the GeoIP API within the Kamailio configuration file.
Package: kamailio-geoip2-modules
Architecture: any
Multi-Arch: same
@ -247,23 +228,6 @@ Description: The app_lua module for Kamailio Lua support
execute embedded Lua applications within the configuration file as
well as writing the entire configuration file in Lua.
Package: kamailio-mono-modules
Architecture: any
Multi-Arch: same
Pre-Depends:
${misc:Pre-Depends},
Depends:
kamailio (= ${binary:Version}),
${misc:Depends},
${shlibs:Depends},
Description: The app_mono module for the Kamailio SIP server
Kamailio is a very fast and flexible SIP (RFC3261)
server. Written entirely in C, Kamailio can handle thousands calls
per second even on low-budget hardware.
.
This package provides the app_mono module, an extension allowing to
execute embedded Mono applications within the Kamailio SIP routing script.
Package: kamailio-python-modules
Architecture: any
Multi-Arch: same
@ -864,6 +828,22 @@ Description: Libwebsockets module for the Kamailio SIP server
This package contains the lwcs module, which provides a client-side WebSockets
API through libwebsockets.
Package: kamailio-kafka-modules
Architecture: any
Multi-Arch: same
Pre-Depends:
${misc:Pre-Depends},
Depends:
kamailio (= ${binary:Version}),
${misc:Depends},
${shlibs:Depends},
Description: Kafka module for the Kamailio SIP server
Kamailio is a very fast and flexible SIP (RFC3261)
server. Written entirely in C, Kamailio can handle thousands calls
per second even on low-budget hardware.
.
This package provides an embedded kafka producer using librdkafka.
Package: kamailio-extra-modules
Architecture: any
Multi-Arch: same

@ -21,4 +21,3 @@ case "$1" in
esac
#DEBHELPER#

@ -26,6 +26,8 @@ export LIBSSL_STATIC_SRCPATH=/usr/$(LIBDIR)
# Modules not in the "main" kamailio package:
EXCLUDED_MODULES =
EXCLUDED_MODULES += mono
EXCLUDED_MODULES += geoip
# Extra modules to skip, because they are not compilable now:
# - regardless if they go to the main kamailio package or to some module
@ -66,11 +68,9 @@ PACKAGE_GROUPS += xmpp
PACKAGE_GROUPS += cpl
PACKAGE_GROUPS += redis
PACKAGE_GROUPS += python
PACKAGE_GROUPS += geoip
PACKAGE_GROUPS += geoip2
PACKAGE_GROUPS += sqlite
PACKAGE_GROUPS += json
PACKAGE_GROUPS += mono
PACKAGE_GROUPS += ruby
PACKAGE_GROUPS += ims
PACKAGE_GROUPS += sctp
@ -88,6 +88,7 @@ PACKAGE_GROUPS += rabbitmq
PACKAGE_GROUPS += python3
PACKAGE_GROUPS += mqtt
PACKAGE_GROUPS += lwsc
PACKAGE_GROUPS += kafka
# Module groups to be packaged onto kamailio-extra-modules.
EXTRA_GROUPS += ev

@ -1,65 +1,47 @@
kamailio (5.8.5) unstable; urgency=medium
kamailio (6.0.1) unstable; urgency=medium
* version set 5.8.5
* version set 6.0.1
-- Victor Seva <vseva@debian.org> Thu, 23 Jan 2025 08:31:22 +0100
-- Victor Seva <vseva@debian.org> Mon, 10 Mar 2025 08:18:44 +0100
kamailio (5.8.4) unstable; urgency=medium
kamailio (6.0.0) unstable; urgency=medium
* version set 5.8.4
* version set 6.0.0
-- Victor Seva <vseva@debian.org> Tue, 12 Nov 2024 10:53:35 +0100
-- Victor Seva <vseva@debian.org> Wed, 29 Jan 2025 09:06:18 +0100
kamailio (5.8.3) unstable; urgency=medium
kamailio (6.0.0~rc0) unstable; urgency=medium
* version set 5.8.3
* version set 6.0.0~rc0
-- Victor Seva <vseva@debian.org> Wed, 04 Sep 2024 09:29:45 +0200
-- Victor Seva <vseva@debian.org> Thu, 23 Jan 2025 08:54:27 +0100
kamailio (5.8.2) unstable; urgency=medium
kamailio (6.0.0~pre0) unstable; urgency=medium
* version set 5.8.2
* version set 6.0.0~pre0
-- Victor Seva <vseva@debian.org> Wed, 12 Jun 2024 09:00:17 +0200
-- Victor Seva <vseva@debian.org> Tue, 17 Dec 2024 20:14:42 +0100
kamailio (5.8.1) unstable; urgency=medium
kamailio (6.0.0~dev3) unstable; urgency=medium
* version set 5.8.1
* version set 6.0.0~dev3
-- Victor Seva <vseva@debian.org> Wed, 03 Apr 2024 08:21:53 +0200
-- Victor Seva <vseva@debian.org> Mon, 30 Sep 2024 13:58:53 +0200
kamailio (5.8.0) unstable; urgency=medium
kamailio (6.0.0~dev2) unstable; urgency=medium
* version set 5.8.0
* version set 6.0.0~dev2
-- Victor Seva <vseva@debian.org> Thu, 07 Mar 2024 11:40:20 +0100
-- Victor Seva <vseva@debian.org> Thu, 16 May 2024 09:46:08 +0200
kamailio (5.8.0~rc0) unstable; urgency=medium
kamailio (5.9.0~dev1) unstable; urgency=medium
* version set 5.8.0~rc0
* version set 5.9.0~dev1
-- Victor Seva <vseva@debian.org> Fri, 23 Feb 2024 20:04:35 +0100
-- Victor Seva <vseva@debian.org> Mon, 15 Apr 2024 08:52:26 +0200
kamailio (5.8.0~pre0) unstable; urgency=medium
kamailio (5.9.0~dev0) unstable; urgency=medium
* version set 5.8.0~pre0
* version set 5.9.0~dev0
-- Victor Seva <vseva@debian.org> Fri, 02 Feb 2024 15:20:05 +0100
kamailio (5.8.0~dev2) unstable; urgency=medium
* version set 5.8.0~dev2
-- Victor Seva <vseva@debian.org> Tue, 05 Dec 2023 12:04:06 +0100
kamailio (5.8.0~dev1) unstable; urgency=medium
* version set 5.8.0~dev1
-- Victor Seva <vseva@debian.org> Wed, 28 Jun 2023 15:03:56 +0200
kamailio (5.8.0~dev0) unstable; urgency=medium
* version set 5.8.0~dev0
-- Victor Seva <vseva@debian.org> Thu, 04 May 2023 21:45:08 +0200
-- Victor Seva <vseva@debian.org> Thu, 23 Feb 2024 19:45:08 +0209

@ -17,7 +17,6 @@ Build-Depends:
libev-dev,
libevent-dev,
libexpat1-dev,
libgeoip-dev (>= 1.4.5),
libhiredis-dev (>= 0.10.0),
libjansson-dev,
libjson-c-dev,
@ -28,7 +27,6 @@ Build-Depends:
libmicrohttpd-dev,
libmnl-dev,
libmongoc-dev,
libmono-2.0-dev [amd64 armel armhf i386 mipsel kfreebsd-amd64 kfreebsd-i386 ppc64 ppc64el s390x],
libmosquitto-dev,
libnats-dev,
libncurses5-dev,
@ -38,6 +36,7 @@ Build-Depends:
libpq-dev,
librabbitmq-dev,
libradcli-dev,
librdkafka-dev,
libreadline-dev,
libsasl2-dev,
libsctp-dev [any],
@ -108,8 +107,7 @@ Description: very fast, dynamic and configurable SIP server
A C Shell like scripting language provides full control over the server's
behaviour. It's easy to integrate Kamailio with 3rd party API's and applications
using HTTP, AMQP, database drivers, LDAP, Radius and many other solutions.
In addition there is support for scripting using Lua, Python, Perl, Java and
a set of other languages using Mono.
In addition there is support for scripting using Lua, Python, Perl, Java.
.
Kamailio's modular architecture allows only required functionality to be loaded.
There are over 100 modules available: WebSockets for WebRTC, authentication,
@ -141,23 +139,6 @@ Description: very fast and configurable SIP server [debug symbols]
This package contains the debugging symbols for the Kamailio binaries and
modules. You only need to install it if you need to debug Kamailio.
Package: kamailio-geoip-modules
Architecture: any
Multi-Arch: same
Pre-Depends:
${misc:Pre-Depends},
Depends:
kamailio (= ${binary:Version}),
${misc:Depends},
${shlibs:Depends},
Description: The geoip module for the Kamailio SIP Server
Kamailio is a very fast and flexible SIP (RFC3261)
server. Written entirely in C, Kamailio can handle thousands calls
per second even on low-budget hardware.
.
This package provides the geoip module, an extension enabling
usage of the GeoIP API within the Kamailio configuration file.
Package: kamailio-geoip2-modules
Architecture: any
Multi-Arch: same
@ -248,23 +229,6 @@ Description: The app_lua module for Kamailio Lua support
execute embedded Lua applications within the configuration file as
well as writing the entire configuration file in Lua.
Package: kamailio-mono-modules
Architecture: any
Multi-Arch: same
Pre-Depends:
${misc:Pre-Depends},
Depends:
kamailio (= ${binary:Version}),
${misc:Depends},
${shlibs:Depends},
Description: The app_mono module for the Kamailio SIP server
Kamailio is a very fast and flexible SIP (RFC3261)
server. Written entirely in C, Kamailio can handle thousands calls
per second even on low-budget hardware.
.
This package provides the app_mono module, an extension allowing to
execute embedded Mono applications within the Kamailio SIP routing script.
Package: kamailio-python3-modules
Architecture: any
Multi-Arch: same
@ -898,6 +862,22 @@ Description: Microhttpd module for the Kamailio SIP server
.
This package provides an embedded HTTP server using libmicrohttpd.
Package: kamailio-kafka-modules
Architecture: any
Multi-Arch: same
Pre-Depends:
${misc:Pre-Depends},
Depends:
kamailio (= ${binary:Version}),
${misc:Depends},
${shlibs:Depends},
Description: Kafka module for the Kamailio SIP server
Kamailio is a very fast and flexible SIP (RFC3261)
server. Written entirely in C, Kamailio can handle thousands calls
per second even on low-budget hardware.
.
This package provides an embedded kafka producer using librdkafka.
Package: kamailio-extra-modules
Architecture: any
Multi-Arch: same

@ -21,4 +21,3 @@ case "$1" in
esac
#DEBHELPER#

@ -26,6 +26,8 @@ export LIBSSL_STATIC_SRCPATH=/usr/$(LIBDIR)
# Modules not in the "main" kamailio package:
EXCLUDED_MODULES =
EXCLUDED_MODULES += mono
EXCLUDED_MODULES += geoip
# Extra modules to skip, because they are not compilable now:
# - regardless if they go to the main kamailio package or to some module
@ -62,11 +64,9 @@ PACKAGE_GROUPS += carrierroute
PACKAGE_GROUPS += xmpp
PACKAGE_GROUPS += cpl
PACKAGE_GROUPS += redis
PACKAGE_GROUPS += geoip
PACKAGE_GROUPS += geoip2
PACKAGE_GROUPS += sqlite
PACKAGE_GROUPS += json
PACKAGE_GROUPS += mono
PACKAGE_GROUPS += ruby
PACKAGE_GROUPS += ims
PACKAGE_GROUPS += sctp
@ -88,6 +88,7 @@ PACKAGE_GROUPS += lwsc
PACKAGE_GROUPS += nats
PACKAGE_GROUPS += tls_wolfssl
PACKAGE_GROUPS += microhttpd
PACKAGE_GROUPS += kafka
# Module groups to be packaged onto kamailio-extra-modules.
EXTRA_GROUPS += ev

@ -1,65 +1,47 @@
kamailio (5.8.5) unstable; urgency=medium
kamailio (6.0.1) unstable; urgency=medium
* version set 5.8.5
* version set 6.0.1
-- Victor Seva <vseva@debian.org> Thu, 23 Jan 2025 08:31:22 +0100
-- Victor Seva <vseva@debian.org> Mon, 10 Mar 2025 08:18:44 +0100
kamailio (5.8.4) unstable; urgency=medium
kamailio (6.0.0) unstable; urgency=medium
* version set 5.8.4
* version set 6.0.0
-- Victor Seva <vseva@debian.org> Tue, 12 Nov 2024 10:53:35 +0100
-- Victor Seva <vseva@debian.org> Wed, 29 Jan 2025 09:06:18 +0100
kamailio (5.8.3) unstable; urgency=medium
kamailio (6.0.0~rc0) unstable; urgency=medium
* version set 5.8.3
* version set 6.0.0~rc0
-- Victor Seva <vseva@debian.org> Wed, 04 Sep 2024 09:29:45 +0200
-- Victor Seva <vseva@debian.org> Thu, 23 Jan 2025 08:54:27 +0100
kamailio (5.8.2) unstable; urgency=medium
kamailio (6.0.0~pre0) unstable; urgency=medium
* version set 5.8.2
* version set 6.0.0~pre0
-- Victor Seva <vseva@debian.org> Wed, 12 Jun 2024 09:00:17 +0200
-- Victor Seva <vseva@debian.org> Tue, 17 Dec 2024 20:14:42 +0100
kamailio (5.8.1) unstable; urgency=medium
kamailio (6.0.0~dev3) unstable; urgency=medium
* version set 5.8.1
* version set 6.0.0~dev3
-- Victor Seva <vseva@debian.org> Wed, 03 Apr 2024 08:21:53 +0200
-- Victor Seva <vseva@debian.org> Mon, 30 Sep 2024 13:58:53 +0200
kamailio (5.8.0) unstable; urgency=medium
kamailio (6.0.0~dev2) unstable; urgency=medium
* version set 5.8.0
* version set 6.0.0~dev2
-- Victor Seva <vseva@debian.org> Thu, 07 Mar 2024 11:40:20 +0100
-- Victor Seva <vseva@debian.org> Thu, 16 May 2024 09:46:08 +0200
kamailio (5.8.0~rc0) unstable; urgency=medium
kamailio (5.9.0~dev1) unstable; urgency=medium
* version set 5.8.0~rc0
* version set 5.9.0~dev1
-- Victor Seva <vseva@debian.org> Fri, 23 Feb 2024 20:04:35 +0100
-- Victor Seva <vseva@debian.org> Mon, 15 Apr 2024 08:52:26 +0200
kamailio (5.8.0~pre0) unstable; urgency=medium
kamailio (5.9.0~dev0) unstable; urgency=medium
* version set 5.8.0~pre0
* version set 5.9.0~dev0
-- Victor Seva <vseva@debian.org> Fri, 02 Feb 2024 15:20:05 +0100
kamailio (5.8.0~dev2) unstable; urgency=medium
* version set 5.8.0~dev2
-- Victor Seva <vseva@debian.org> Tue, 05 Dec 2023 12:04:06 +0100
kamailio (5.8.0~dev1) unstable; urgency=medium
* version set 5.8.0~dev1
-- Victor Seva <vseva@debian.org> Wed, 28 Jun 2023 15:03:56 +0200
kamailio (5.8.0~dev0) unstable; urgency=medium
* version set 5.8.0~dev0
-- Victor Seva <vseva@debian.org> Thu, 04 May 2023 21:45:08 +0200
-- Victor Seva <vseva@debian.org> Thu, 23 Feb 2024 19:45:08 +0209

@ -19,7 +19,6 @@ Build-Depends:
libevent-dev,
libexpat1-dev,
libfreeradius-client-dev,
libgeoip-dev (>= 1.4.5),
libhiredis-dev (>= 0.10.0),
libjansson-dev,
libjson-c-dev,
@ -28,7 +27,6 @@ Build-Depends:
libmemcached-dev,
libmicrohttpd-dev,
libmnl-dev,
libmono-2.0-dev [amd64 armel armhf i386 mipsel kfreebsd-amd64 kfreebsd-i386 ppc64 ppc64el s390x],
libmosquitto-dev,
libmysqlclient-dev,
libncurses5-dev,
@ -106,8 +104,7 @@ Description: very fast, dynamic and configurable SIP server
A C Shell like scripting language provides full control over the server's
behaviour. It's easy to integrate Kamailio with 3rd party API's and applications
using HTTP, AMQP, database drivers, LDAP, Radius and many other solutions.
In addition there is support for scripting using Lua, Python, Perl, Java and
a set of other languages using Mono.
In addition there is support for scripting using Lua, Python, Perl, Java.
.
Kamailio's modular architecture allows only required functionality to be loaded.
There are over 100 modules available: WebSockets for WebRTC, authentication,
@ -139,23 +136,6 @@ Description: very fast and configurable SIP server [debug symbols]
This package contains the debugging symbols for the Kamailio binaries and
modules. You only need to install it if you need to debug Kamailio.
Package: kamailio-geoip-modules
Architecture: any
Multi-Arch: same
Pre-Depends:
${misc:Pre-Depends},
Depends:
kamailio (= ${binary:Version}),
${misc:Depends},
${shlibs:Depends},
Description: The geoip module for the Kamailio SIP Server
Kamailio is a very fast and flexible SIP (RFC3261)
server. Written entirely in C, Kamailio can handle thousands calls
per second even on low-budget hardware.
.
This package provides the geoip module, an extension enabling
usage of the GeoIP API within the Kamailio configuration file.
Package: kamailio-sqlite-modules
Architecture: any
Multi-Arch: same
@ -228,23 +208,6 @@ Description: The app_lua module for Kamailio Lua support
execute embedded Lua applications within the configuration file as
well as writing the entire configuration file in Lua.
Package: kamailio-mono-modules
Architecture: any
Multi-Arch: same
Pre-Depends:
${misc:Pre-Depends},
Depends:
kamailio (= ${binary:Version}),
${misc:Depends},
${shlibs:Depends},
Description: The app_mono module for the Kamailio SIP server
Kamailio is a very fast and flexible SIP (RFC3261)
server. Written entirely in C, Kamailio can handle thousands calls
per second even on low-budget hardware.
.
This package provides the app_mono module, an extension allowing to
execute embedded Mono applications within the Kamailio SIP routing script.
Package: kamailio-python-modules
Architecture: any
Multi-Arch: same

@ -21,4 +21,3 @@ case "$1" in
esac
#DEBHELPER#

@ -27,6 +27,8 @@ export LIBSSL_STATIC_SRCPATH=/usr/$(LIBDIR)
# Modules not in the "main" kamailio package:
EXCLUDED_MODULES =
EXCLUDED_MODULES += mono
EXCLUDED_MODULES += geoip
# Extra modules to skip, because they are not compilable now:
# - regardless if they go to the main kamailio package or to some module
@ -43,6 +45,7 @@ EXTRA_EXCLUDED_MODULES += secsipid
EXTRA_EXCLUDED_MODULES += lwsc
EXTRA_EXCLUDED_MODULES += nats
EXTRA_EXCLUDED_MODULES += tls_wolfssl
EXTRA_EXCLUDED_MODULES += kafka
## --EXCLUDED--
@ -68,10 +71,8 @@ PACKAGE_GROUPS += xmpp
PACKAGE_GROUPS += cpl
PACKAGE_GROUPS += redis
PACKAGE_GROUPS += python
PACKAGE_GROUPS += geoip
PACKAGE_GROUPS += sqlite
PACKAGE_GROUPS += json
PACKAGE_GROUPS += mono
PACKAGE_GROUPS += ruby
PACKAGE_GROUPS += ims
PACKAGE_GROUPS += sctp

@ -1,65 +1,47 @@
kamailio (5.8.5) unstable; urgency=medium
kamailio (6.0.1) unstable; urgency=medium
* version set 5.8.5
* version set 6.0.1
-- Victor Seva <vseva@debian.org> Thu, 23 Jan 2025 08:31:22 +0100
-- Victor Seva <vseva@debian.org> Mon, 10 Mar 2025 08:18:44 +0100
kamailio (5.8.4) unstable; urgency=medium
kamailio (6.0.0) unstable; urgency=medium
* version set 5.8.4
* version set 6.0.0
-- Victor Seva <vseva@debian.org> Tue, 12 Nov 2024 10:53:35 +0100
-- Victor Seva <vseva@debian.org> Wed, 29 Jan 2025 09:06:18 +0100
kamailio (5.8.3) unstable; urgency=medium
kamailio (6.0.0~rc0) unstable; urgency=medium
* version set 5.8.3
* version set 6.0.0~rc0
-- Victor Seva <vseva@debian.org> Wed, 04 Sep 2024 09:29:45 +0200
-- Victor Seva <vseva@debian.org> Thu, 23 Jan 2025 08:54:27 +0100
kamailio (5.8.2) unstable; urgency=medium
kamailio (6.0.0~pre0) unstable; urgency=medium
* version set 5.8.2
* version set 6.0.0~pre0
-- Victor Seva <vseva@debian.org> Wed, 12 Jun 2024 09:00:17 +0200
-- Victor Seva <vseva@debian.org> Tue, 17 Dec 2024 20:14:42 +0100
kamailio (5.8.1) unstable; urgency=medium
kamailio (6.0.0~dev3) unstable; urgency=medium
* version set 5.8.1
* version set 6.0.0~dev3
-- Victor Seva <vseva@debian.org> Wed, 03 Apr 2024 08:21:53 +0200
-- Victor Seva <vseva@debian.org> Mon, 30 Sep 2024 13:58:53 +0200
kamailio (5.8.0) unstable; urgency=medium
kamailio (6.0.0~dev2) unstable; urgency=medium
* version set 5.8.0
* version set 6.0.0~dev2
-- Victor Seva <vseva@debian.org> Thu, 07 Mar 2024 11:40:20 +0100
-- Victor Seva <vseva@debian.org> Thu, 16 May 2024 09:46:08 +0200
kamailio (5.8.0~rc0) unstable; urgency=medium
kamailio (5.9.0~dev1) unstable; urgency=medium
* version set 5.8.0~rc0
* version set 5.9.0~dev1
-- Victor Seva <vseva@debian.org> Fri, 23 Feb 2024 20:04:35 +0100
-- Victor Seva <vseva@debian.org> Mon, 15 Apr 2024 08:52:26 +0200
kamailio (5.8.0~pre0) unstable; urgency=medium
kamailio (5.9.0~dev0) unstable; urgency=medium
* version set 5.8.0~pre0
* version set 5.9.0~dev0
-- Victor Seva <vseva@debian.org> Fri, 02 Feb 2024 15:20:05 +0100
kamailio (5.8.0~dev2) unstable; urgency=medium
* version set 5.8.0~dev2
-- Victor Seva <vseva@debian.org> Tue, 05 Dec 2023 12:04:06 +0100
kamailio (5.8.0~dev1) unstable; urgency=medium
* version set 5.8.0~dev1
-- Victor Seva <vseva@debian.org> Wed, 28 Jun 2023 15:03:56 +0200
kamailio (5.8.0~dev0) unstable; urgency=medium
* version set 5.8.0~dev0
-- Victor Seva <vseva@debian.org> Thu, 04 May 2023 21:45:08 +0200
-- Victor Seva <vseva@debian.org> Thu, 23 Feb 2024 19:45:08 +0209

@ -17,7 +17,6 @@ Build-Depends:
libev-dev,
libevent-dev,
libexpat1-dev,
libgeoip-dev (>= 1.4.5),
libhiredis-dev (>= 0.10.0),
libjansson-dev,
libjson-c-dev,
@ -28,7 +27,6 @@ Build-Depends:
libmicrohttpd-dev,
libmnl-dev,
libmongoc-dev,
libmono-2.0-dev [amd64 armel armhf i386 mipsel kfreebsd-amd64 kfreebsd-i386 ppc64 ppc64el s390x],
libmosquitto-dev,
libnats-dev,
libncurses-dev,
@ -38,6 +36,7 @@ Build-Depends:
libpq-dev,
librabbitmq-dev,
libradcli-dev,
librdkafka-dev,
libreadline-dev,
libsasl2-dev,
libsctp-dev [any],
@ -107,8 +106,7 @@ Description: very fast, dynamic and configurable SIP server
A C Shell like scripting language provides full control over the server's
behaviour. It's easy to integrate Kamailio with 3rd party API's and applications
using HTTP, AMQP, database drivers, LDAP, Radius and many other solutions.
In addition there is support for scripting using Lua, Python, Perl, Java and
a set of other languages using Mono.
In addition there is support for scripting using Lua, Python, Perl, Java.
.
Kamailio's modular architecture allows only required functionality to be loaded.
There are over 100 modules available: WebSockets for WebRTC, authentication,
@ -140,23 +138,6 @@ Description: very fast and configurable SIP server [debug symbols]
This package contains the debugging symbols for the Kamailio binaries and
modules. You only need to install it if you need to debug Kamailio.
Package: kamailio-geoip-modules
Architecture: any
Multi-Arch: same
Pre-Depends:
${misc:Pre-Depends},
Depends:
kamailio (= ${binary:Version}),
${misc:Depends},
${shlibs:Depends},
Description: The geoip module for the Kamailio SIP Server
Kamailio is a very fast and flexible SIP (RFC3261)
server. Written entirely in C, Kamailio can handle thousands calls
per second even on low-budget hardware.
.
This package provides the geoip module, an extension enabling
usage of the GeoIP API within the Kamailio configuration file.
Package: kamailio-geoip2-modules
Architecture: any
Multi-Arch: same
@ -247,23 +228,6 @@ Description: The app_lua module for Kamailio Lua support
execute embedded Lua applications within the configuration file as
well as writing the entire configuration file in Lua.
Package: kamailio-mono-modules
Architecture: any
Multi-Arch: same
Pre-Depends:
${misc:Pre-Depends},
Depends:
kamailio (= ${binary:Version}),
${misc:Depends},
${shlibs:Depends},
Description: The app_mono module for the Kamailio SIP server
Kamailio is a very fast and flexible SIP (RFC3261)
server. Written entirely in C, Kamailio can handle thousands calls
per second even on low-budget hardware.
.
This package provides the app_mono module, an extension allowing to
execute embedded Mono applications within the Kamailio SIP routing script.
Package: kamailio-python3-modules
Architecture: any
Multi-Arch: same
@ -897,6 +861,22 @@ Description: Microhttpd module for the Kamailio SIP server
.
This package provides an embedded HTTP server using libmicrohttpd.
Package: kamailio-kafka-modules
Architecture: any
Multi-Arch: same
Pre-Depends:
${misc:Pre-Depends},
Depends:
kamailio (= ${binary:Version}),
${misc:Depends},
${shlibs:Depends},
Description: Kafka module for the Kamailio SIP server
Kamailio is a very fast and flexible SIP (RFC3261)
server. Written entirely in C, Kamailio can handle thousands calls
per second even on low-budget hardware.
.
This package provides an embedded kafka producer using librdkafka.
Package: kamailio-extra-modules
Architecture: any
Multi-Arch: same

@ -26,6 +26,8 @@ export LIBSSL_STATIC_SRCPATH=/usr/$(LIBDIR)
# Modules not in the "main" kamailio package:
EXCLUDED_MODULES =
EXCLUDED_MODULES += mono
EXCLUDED_MODULES += geoip
# Extra modules to skip, because they are not compilable now:
# - regardless if they go to the main kamailio package or to some module
@ -62,11 +64,9 @@ PACKAGE_GROUPS += carrierroute
PACKAGE_GROUPS += xmpp
PACKAGE_GROUPS += cpl
PACKAGE_GROUPS += redis
PACKAGE_GROUPS += geoip
PACKAGE_GROUPS += geoip2
PACKAGE_GROUPS += sqlite
PACKAGE_GROUPS += json
PACKAGE_GROUPS += mono
PACKAGE_GROUPS += ruby
PACKAGE_GROUPS += ims
PACKAGE_GROUPS += sctp
@ -88,6 +88,7 @@ PACKAGE_GROUPS += lwsc
PACKAGE_GROUPS += nats
PACKAGE_GROUPS += tls_wolfssl
PACKAGE_GROUPS += microhttpd
PACKAGE_GROUPS += kafka
# Module groups to be packaged onto kamailio-extra-modules.
EXTRA_GROUPS += ev

@ -1,65 +1,47 @@
kamailio (5.8.5) unstable; urgency=medium
kamailio (6.0.1) unstable; urgency=medium
* version set 5.8.5
* version set 6.0.1
-- Victor Seva <vseva@debian.org> Thu, 23 Jan 2025 08:31:22 +0100
-- Victor Seva <vseva@debian.org> Mon, 10 Mar 2025 08:18:44 +0100
kamailio (5.8.4) unstable; urgency=medium
kamailio (6.0.0) unstable; urgency=medium
* version set 5.8.4
* version set 6.0.0
-- Victor Seva <vseva@debian.org> Tue, 12 Nov 2024 10:53:35 +0100
-- Victor Seva <vseva@debian.org> Wed, 29 Jan 2025 09:06:18 +0100
kamailio (5.8.3) unstable; urgency=medium
kamailio (6.0.0~rc0) unstable; urgency=medium
* version set 5.8.3
* version set 6.0.0~rc0
-- Victor Seva <vseva@debian.org> Wed, 04 Sep 2024 09:29:45 +0200
-- Victor Seva <vseva@debian.org> Thu, 23 Jan 2025 08:54:27 +0100
kamailio (5.8.2) unstable; urgency=medium
kamailio (6.0.0~pre0) unstable; urgency=medium
* version set 5.8.2
* version set 6.0.0~pre0
-- Victor Seva <vseva@debian.org> Wed, 12 Jun 2024 09:00:17 +0200
-- Victor Seva <vseva@debian.org> Tue, 17 Dec 2024 20:14:42 +0100
kamailio (5.8.1) unstable; urgency=medium
kamailio (6.0.0~dev3) unstable; urgency=medium
* version set 5.8.1
* version set 6.0.0~dev3
-- Victor Seva <vseva@debian.org> Wed, 03 Apr 2024 08:21:53 +0200
-- Victor Seva <vseva@debian.org> Mon, 30 Sep 2024 13:58:53 +0200
kamailio (5.8.0) unstable; urgency=medium
kamailio (6.0.0~dev2) unstable; urgency=medium
* version set 5.8.0
* version set 6.0.0~dev2
-- Victor Seva <vseva@debian.org> Thu, 07 Mar 2024 11:40:20 +0100
-- Victor Seva <vseva@debian.org> Thu, 16 May 2024 09:46:08 +0200
kamailio (5.8.0~rc0) unstable; urgency=medium
kamailio (5.9.0~dev1) unstable; urgency=medium
* version set 5.8.0~rc0
* version set 5.9.0~dev1
-- Victor Seva <vseva@debian.org> Fri, 23 Feb 2024 20:04:35 +0100
-- Victor Seva <vseva@debian.org> Mon, 15 Apr 2024 08:52:26 +0200
kamailio (5.8.0~pre0) unstable; urgency=medium
kamailio (5.9.0~dev0) unstable; urgency=medium
* version set 5.8.0~pre0
* version set 5.9.0~dev0
-- Victor Seva <vseva@debian.org> Fri, 02 Feb 2024 15:20:05 +0100
kamailio (5.8.0~dev2) unstable; urgency=medium
* version set 5.8.0~dev2
-- Victor Seva <vseva@debian.org> Tue, 05 Dec 2023 12:04:06 +0100
kamailio (5.8.0~dev1) unstable; urgency=medium
* version set 5.8.0~dev1
-- Victor Seva <vseva@debian.org> Wed, 28 Jun 2023 15:03:56 +0200
kamailio (5.8.0~dev0) unstable; urgency=medium
* version set 5.8.0~dev0
-- Victor Seva <vseva@debian.org> Thu, 04 May 2023 21:45:08 +0200
-- Victor Seva <vseva@debian.org> Thu, 23 Feb 2024 19:45:08 +0209

@ -17,7 +17,6 @@ Build-Depends:
libev-dev,
libevent-dev,
libexpat1-dev,
libgeoip-dev (>= 1.4.5),
libhiredis-dev (>= 0.10.0),
libjansson-dev,
libjson0-dev,
@ -26,7 +25,6 @@ Build-Depends:
libmemcached-dev,
libmicrohttpd-dev,
libmnl-dev,
libmono-2.0-dev [amd64 armel armhf i386 mipsel kfreebsd-amd64 kfreebsd-i386 ppc64 ppc64el s390x],
libmysqlclient-dev,
libncurses5-dev,
libpcre3-dev,
@ -97,8 +95,7 @@ Description: very fast, dynamic and configurable SIP server
A C Shell like scripting language provides full control over the server's
behaviour. It's easy to integrate Kamailio with 3rd party API's and applications
using HTTP, AMQP, database drivers, LDAP, Radius and many other solutions.
In addition there is support for scripting using Lua, Python, Perl, Java and
a set of other languages using Mono.
In addition there is support for scripting using Lua, Python, Perl, Java.
.
Kamailio's modular architecture allows only required functionality to be loaded.
There are over 100 modules available: WebSockets for WebRTC, authentication,
@ -130,23 +127,6 @@ Description: very fast and configurable SIP server [debug symbols]
This package contains the debugging symbols for the Kamailio binaries and
modules. You only need to install it if you need to debug Kamailio.
Package: kamailio-geoip-modules
Architecture: any
Multi-Arch: same
Pre-Depends:
${misc:Pre-Depends},
Depends:
kamailio (= ${binary:Version}),
${misc:Depends},
${shlibs:Depends},
Description: The geoip module for the Kamailio SIP Server
Kamailio is a very fast and flexible SIP (RFC3261)
server. Written entirely in C, Kamailio can handle thousands calls
per second even on low-budget hardware.
.
This package provides the geoip module, an extension enabling
usage of the GeoIP API within the Kamailio configuration file.
Package: kamailio-sqlite-modules
Architecture: any
Multi-Arch: same
@ -219,23 +199,6 @@ Description: The app_lua module for Kamailio Lua support
execute embedded Lua applications within the configuration file as
well as writing the entire configuration file in Lua.
Package: kamailio-mono-modules
Architecture: any
Multi-Arch: same
Pre-Depends:
${misc:Pre-Depends},
Depends:
kamailio (= ${binary:Version}),
${misc:Depends},
${shlibs:Depends},
Description: The app_mono module for the Kamailio SIP server
Kamailio is a very fast and flexible SIP (RFC3261)
server. Written entirely in C, Kamailio can handle thousands calls
per second even on low-budget hardware.
.
This package provides the app_mono module, an extension allowing to
execute embedded Mono applications within the Kamailio SIP routing script.
Package: kamailio-python-modules
Architecture: any
Multi-Arch: same

@ -21,4 +21,3 @@ case "$1" in
esac
#DEBHELPER#

@ -26,6 +26,8 @@ export LIBSSL_STATIC_SRCPATH=/usr/$(LIBDIR)
# Modules not in the "main" kamailio package:
EXCLUDED_MODULES =
EXCLUDED_MODULES += mono
EXCLUDED_MODULES += geoip
# Extra modules to skip, because they are not compilable now:
# - regardless if they go to the main kamailio package or to some module
@ -50,6 +52,7 @@ EXTRA_EXCLUDED_MODULES += secsipid
EXTRA_EXCLUDED_MODULES += lwsc
EXTRA_EXCLUDED_MODULES += nats
EXTRA_EXCLUDED_MODULES += tls_wolfssl
EXTRA_EXCLUDED_MODULES += kafka
## --EXCLUDED--
@ -75,10 +78,8 @@ PACKAGE_GROUPS += xmpp
PACKAGE_GROUPS += cpl
PACKAGE_GROUPS += redis
PACKAGE_GROUPS += python
PACKAGE_GROUPS += geoip
PACKAGE_GROUPS += sqlite
PACKAGE_GROUPS += json
PACKAGE_GROUPS += mono
PACKAGE_GROUPS += ims
PACKAGE_GROUPS += sctp
PACKAGE_GROUPS += java

@ -1,65 +1,47 @@
kamailio (5.8.5) unstable; urgency=medium
kamailio (6.0.1) unstable; urgency=medium
* version set 5.8.5
* version set 6.0.1
-- Victor Seva <vseva@debian.org> Thu, 23 Jan 2025 08:31:22 +0100
-- Victor Seva <vseva@debian.org> Mon, 10 Mar 2025 08:18:44 +0100
kamailio (5.8.4) unstable; urgency=medium
kamailio (6.0.0) unstable; urgency=medium
* version set 5.8.4
* version set 6.0.0
-- Victor Seva <vseva@debian.org> Tue, 12 Nov 2024 10:53:35 +0100
-- Victor Seva <vseva@debian.org> Wed, 29 Jan 2025 09:06:18 +0100
kamailio (5.8.3) unstable; urgency=medium
kamailio (6.0.0~rc0) unstable; urgency=medium
* version set 5.8.3
* version set 6.0.0~rc0
-- Victor Seva <vseva@debian.org> Wed, 04 Sep 2024 09:29:45 +0200
-- Victor Seva <vseva@debian.org> Thu, 23 Jan 2025 08:54:27 +0100
kamailio (5.8.2) unstable; urgency=medium
kamailio (6.0.0~pre0) unstable; urgency=medium
* version set 5.8.2
* version set 6.0.0~pre0
-- Victor Seva <vseva@debian.org> Wed, 12 Jun 2024 09:00:17 +0200
-- Victor Seva <vseva@debian.org> Tue, 17 Dec 2024 20:14:42 +0100
kamailio (5.8.1) unstable; urgency=medium
kamailio (6.0.0~dev3) unstable; urgency=medium
* version set 5.8.1
* version set 6.0.0~dev3
-- Victor Seva <vseva@debian.org> Wed, 03 Apr 2024 08:21:53 +0200
-- Victor Seva <vseva@debian.org> Mon, 30 Sep 2024 13:58:53 +0200
kamailio (5.8.0) unstable; urgency=medium
kamailio (6.0.0~dev2) unstable; urgency=medium
* version set 5.8.0
* version set 6.0.0~dev2
-- Victor Seva <vseva@debian.org> Thu, 07 Mar 2024 11:40:20 +0100
-- Victor Seva <vseva@debian.org> Thu, 16 May 2024 09:46:08 +0200
kamailio (5.8.0~rc0) unstable; urgency=medium
kamailio (5.9.0~dev1) unstable; urgency=medium
* version set 5.8.0~rc0
* version set 5.9.0~dev1
-- Victor Seva <vseva@debian.org> Fri, 23 Feb 2024 20:04:35 +0100
-- Victor Seva <vseva@debian.org> Mon, 15 Apr 2024 08:52:26 +0200
kamailio (5.8.0~pre0) unstable; urgency=medium
kamailio (5.9.0~dev0) unstable; urgency=medium
* version set 5.8.0~pre0
* version set 5.9.0~dev0
-- Victor Seva <vseva@debian.org> Fri, 02 Feb 2024 15:20:05 +0100
kamailio (5.8.0~dev2) unstable; urgency=medium
* version set 5.8.0~dev2
-- Victor Seva <vseva@debian.org> Tue, 05 Dec 2023 12:04:06 +0100
kamailio (5.8.0~dev1) unstable; urgency=medium
* version set 5.8.0~dev1
-- Victor Seva <vseva@debian.org> Wed, 28 Jun 2023 15:03:56 +0200
kamailio (5.8.0~dev0) unstable; urgency=medium
* version set 5.8.0~dev0
-- Victor Seva <vseva@debian.org> Thu, 04 May 2023 21:45:08 +0200
-- Victor Seva <vseva@debian.org> Thu, 23 Feb 2024 19:45:08 +0209

@ -17,7 +17,6 @@ Build-Depends:
libev-dev,
libevent-dev,
libexpat1-dev,
libgeoip-dev (>= 1.4.5),
libhiredis-dev (>= 0.10.0),
libjansson-dev,
libjson-c-dev,
@ -28,7 +27,6 @@ Build-Depends:
libmicrohttpd-dev,
libmnl-dev,
libmongoc-dev,
libmono-2.0-dev [amd64 armel armhf i386 mipsel kfreebsd-amd64 kfreebsd-i386 ppc64 ppc64el s390x],
libmosquitto-dev,
libnats-dev,
libncurses-dev,
@ -38,6 +36,7 @@ Build-Depends:
libpq-dev,
librabbitmq-dev,
libradcli-dev,
librdkafka-dev,
libreadline-dev,
libsasl2-dev,
libsctp-dev [any],
@ -107,8 +106,7 @@ Description: very fast, dynamic and configurable SIP server
A C Shell like scripting language provides full control over the server's
behaviour. It's easy to integrate Kamailio with 3rd party API's and applications
using HTTP, AMQP, database drivers, LDAP, Radius and many other solutions.
In addition there is support for scripting using Lua, Python, Perl, Java and
a set of other languages using Mono.
In addition there is support for scripting using Lua, Python, Perl, Java.
.
Kamailio's modular architecture allows only required functionality to be loaded.
There are over 100 modules available: WebSockets for WebRTC, authentication,
@ -140,23 +138,6 @@ Description: very fast and configurable SIP server [debug symbols]
This package contains the debugging symbols for the Kamailio binaries and
modules. You only need to install it if you need to debug Kamailio.
Package: kamailio-geoip-modules
Architecture: any
Multi-Arch: same
Pre-Depends:
${misc:Pre-Depends},
Depends:
kamailio (= ${binary:Version}),
${misc:Depends},
${shlibs:Depends},
Description: The geoip module for the Kamailio SIP Server
Kamailio is a very fast and flexible SIP (RFC3261)
server. Written entirely in C, Kamailio can handle thousands calls
per second even on low-budget hardware.
.
This package provides the geoip module, an extension enabling
usage of the GeoIP API within the Kamailio configuration file.
Package: kamailio-geoip2-modules
Architecture: any
Multi-Arch: same
@ -247,23 +228,6 @@ Description: The app_lua module for Kamailio Lua support
execute embedded Lua applications within the configuration file as
well as writing the entire configuration file in Lua.
Package: kamailio-mono-modules
Architecture: any
Multi-Arch: same
Pre-Depends:
${misc:Pre-Depends},
Depends:
kamailio (= ${binary:Version}),
${misc:Depends},
${shlibs:Depends},
Description: The app_mono module for the Kamailio SIP server
Kamailio is a very fast and flexible SIP (RFC3261)
server. Written entirely in C, Kamailio can handle thousands calls
per second even on low-budget hardware.
.
This package provides the app_mono module, an extension allowing to
execute embedded Mono applications within the Kamailio SIP routing script.
Package: kamailio-python3-modules
Architecture: any
Multi-Arch: same
@ -897,6 +861,22 @@ Description: Microhttpd module for the Kamailio SIP server
.
This package provides an embedded HTTP server using libmicrohttpd.
Package: kamailio-kafka-modules
Architecture: any
Multi-Arch: same
Pre-Depends:
${misc:Pre-Depends},
Depends:
kamailio (= ${binary:Version}),
${misc:Depends},
${shlibs:Depends},
Description: Kafka module for the Kamailio SIP server
Kamailio is a very fast and flexible SIP (RFC3261)
server. Written entirely in C, Kamailio can handle thousands calls
per second even on low-budget hardware.
.
This package provides an embedded kafka producer using librdkafka.
Package: kamailio-extra-modules
Architecture: any
Multi-Arch: same

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save