10 years agoMerge branch 'ser_core_cvs' of ssh://
Andrei Pelinescu-Onciul [Tue, 31 Mar 2009 17:26:41 +0000 (19:26 +0200)]
Merge branch 'ser_core_cvs' of ssh://

* 'ser_core_cvs' of ssh://
  dns: minor fixes
  Static buffer is resetted before calling the route block -- Thanks to Jan.
  Missing include is added.

modules/tm/t_suspend.c : sip-router version uses
i                        run_top_route()

10 years agodns: minor fixes
Andrei Pelinescu-Onciul [Tue, 31 Mar 2009 17:06:00 +0000 (17:06 +0000)]
dns: minor fixes

- some dns record parsers need only the record end for their
  internal overflow checks, while others need also the message end
  (anything that expands compressed strings).

10 years agoStatic buffer is resetted before calling the route block -- Thanks to Jan.
Miklos Tirpak [Tue, 31 Mar 2009 12:33:38 +0000 (12:33 +0000)]
Static buffer is resetted before calling the route block -- Thanks to Jan.

10 years agoMissing include is added.
Miklos Tirpak [Tue, 31 Mar 2009 12:32:31 +0000 (12:32 +0000)]
Missing include is added.

10 years agoShared memory versions of mk_proxy and free_proxy.
Jan Janak [Tue, 31 Mar 2009 00:47:44 +0000 (02:47 +0200)]
Shared memory versions of mk_proxy and free_proxy.

This patch adds function mk_shm_proxy, which is the shared memory
version of function mk_proxy. In addition to that it adds function
free_shm_proxy which is the shared memory version of free_proxy.

To avoid code duplication, we turned the body of the original
hostent_cpy function into macro called HOSTENT_CPY, the macro takes
malloc and free functions as parameters. The macro is then called in
the body of hostent_cpy with pkg_malloc and pkg_free as parameters and
in the body of hostent_shm_cpy with shm_malloc and shm_free as

We did the same to mk_proxy function. The original body of the function
was converted into macro MK_PROXY which, again, takes memory allocation
functions as we all the hostent copy function as parameters.

10 years agoAn update to the methods parser
Jan Janak [Tue, 31 Mar 2009 11:32:31 +0000 (13:32 +0200)]
An update to the methods parser

List if changes:
  * METHOD_REFER defined in msg_parser.h
  * Changed the prototype of parse_method to use enum request_type
  * Define ALL_METHODS macro
  * Replace METH_* with METHOD_*

10 years agodns: TXT record cache support & more rpcs
Andrei Pelinescu-Onciul [Mon, 30 Mar 2009 18:44:23 +0000 (20:44 +0200)]
dns: TXT record cache support & more rpcs

- TXT records can be cached (dns_get_entry supports T_TXT)
- more delete entry from cache rpcs:
- dns.lookup rpc: dns.lookup <type> <name>
   (useful for debugging or for pre-populating the dns cache)
    e.g.: utils/sercmd/sercmd dns.lookup A

10 years agodns: TXT records support
Andrei Pelinescu-Onciul [Mon, 30 Mar 2009 18:40:23 +0000 (20:40 +0200)]
dns: TXT records support

- support for TXT lookups, both single and multiple strings are

10 years agoMerge branch 'ser_core_cvs' of ssh://
Andrei Pelinescu-Onciul [Mon, 30 Mar 2009 18:55:25 +0000 (20:55 +0200)]
Merge branch 'ser_core_cvs' of ssh://

* 'ser_core_cvs' of ssh://
  dns: more strict record end checking
  dns: minor fixes: long lines, unlikely(), end of msg checks
  Adding missing reset_static_buffer()


10 years agodns: more strict record end checking
Andrei Pelinescu-Onciul [Mon, 30 Mar 2009 13:59:42 +0000 (13:59 +0000)]
dns: more strict record end checking

- be more strict and check always if a record doesn't exceed it's
  declared length (before we checked only if the end is inside the

10 years agodns: minor fixes: long lines, unlikely(), end of msg checks
Andrei Pelinescu-Onciul [Mon, 30 Mar 2009 13:50:36 +0000 (13:50 +0000)]
dns: minor fixes: long lines, unlikely(), end of msg checks

- check if the rdlength is valid (points inside the answer),
  before skipping over a record
- added unlikely() for error checks
- cosmetic: broken some long lines

10 years agoUse run_top_route where appropriate
Jan Janak [Sun, 29 Mar 2009 16:05:24 +0000 (18:05 +0200)]
Use run_top_route where appropriate

This patch replaces the sequence of


at the following places in the code:
 * execution of a branch route in tm
 * execution of a failure route in tm
 * execution of an onreply route in tm
 * execution of on_sl_reply in tm
 * execution of a route block after t_continue has been called
 * execution of the top-level route block in the core when a new SIP
   request arrives
 * execution of the top-level onreply route block in the core when a
   new SIP reply arrives

10 years agoIntroducing run_top_route function
Jan Janak [Sun, 29 Mar 2009 15:53:58 +0000 (17:53 +0200)]
Introducing run_top_route function

Function run_top_route can be used to initialize the environment before
a SIP message starts processing in *_route blocks. Internally it resets
the script flags, resets the select buffer, initializes the environment
using init_run_actions_ctx and passes control to the specified route

10 years agoAdding missing reset_static_buffer()
Jan Janak [Sun, 29 Mar 2009 15:39:27 +0000 (15:39 +0000)]
Adding missing reset_static_buffer()

10 years agoUse shorter default send and SSL handshake timeouts
Jan Janak [Sat, 28 Mar 2009 11:13:24 +0000 (12:13 +0100)]
Use shorter default send and SSL handshake timeouts

Instead of 120 seconds we use use 30 seconds by default for both SSL
handshake timeouts and send timeouts, this way the server can detect
connection problems faster.

10 years agoExport picked branch index via the tm module API.
Daniel-Constantin Mierla [Sat, 28 Mar 2009 14:01:19 +0000 (15:01 +0100)]
Export picked branch index via the tm module API.

This patch turns a function-local variable into a global variable in the
module and adds a new function to read the value of the variable. The
function is then exported via the tm module API.

Signed-off-by: Jan Janak <>
10 years agoAdding function is_peer_verified from kamailio
Jan Janak [Fri, 27 Mar 2009 17:47:43 +0000 (18:47 +0100)]
Adding function is_peer_verified from kamailio

10 years agoSwitch to the openser module interface version
Jan Janak [Fri, 27 Mar 2009 17:36:18 +0000 (18:36 +0100)]
Switch to the openser module interface version

We need to switch the tls module to the openser version of module
interface in order to make all the tls related pseudo-variables

This comes with a price, we won't be able to use the TLS rpc
commands temporarily because they can only be exported through
the SER version of the module interface. But there are only two
functions available through the rpc interface anyway and not
having them harms less than not having the pseudo-variables.

10 years agoExporting TLS module functions through the pseudo-variable interface
Jan Janak [Fri, 27 Mar 2009 17:12:12 +0000 (18:12 +0100)]
Exporting TLS module functions through the pseudo-variable interface

This patch adds pseudo-variable related function from kamailio, these
function work on top of the generic functions in tls_select.c

10 years agoSupport for server name TLS extension
Jan Janak [Fri, 27 Mar 2009 15:24:58 +0000 (16:24 +0100)]
Support for server name TLS extension

This patch adds support fot the server name TLS extension, the server
name string can be retrieved with the following two selects:
  @tls.serverName or @tls.server_name

10 years agoPrepare for inclusion of kamailio PV functions
Jan Janak [Fri, 27 Mar 2009 14:23:55 +0000 (15:23 +0100)]
Prepare for inclusion of kamailio PV functions

List of changes:
 * All select functions has been split into a generit part that can be
   reused by PV function and a select part which contains the code
   specific for the SER select framework.
 * Indentation fixed
 * check_cert renamed to sel_check_cert to follow the naming scheme of
   all other select functions
 * get_cert function logs an error message when it fails to retrieve
   certificate from the SSL structure

10 years agoKamailio compatibility: Privacy header field name parser
Jan Janak [Fri, 27 Mar 2009 08:03:47 +0000 (09:03 +0100)]
Kamailio compatibility: Privacy header field name parser

This patch extendes the tm module with support for the Privacy header
field which are now parsed by the core, this patch teaches tm how to
ignore them.

10 years agoKamailio compatibility: Privacy header field name parser
Jan Janak [Fri, 27 Mar 2009 07:59:37 +0000 (08:59 +0100)]
Kamailio compatibility: Privacy header field name parser

This patch adds support for the Privacy header field name parser.

10 years agoReplace TCP_BUF_SIZE with a cfg_get(..).
Jan Janak [Thu, 26 Mar 2009 13:49:36 +0000 (14:49 +0100)]
Replace TCP_BUF_SIZE with a cfg_get(..).

10 years agoRemove shm_str_dup function.
Jan Janak [Thu, 26 Mar 2009 13:45:40 +0000 (14:45 +0100)]
Remove shm_str_dup function.

This function is not being used anywhere in TLS module and conflicts
with a function in ../../ut.h

10 years agoDefine SER_MOD_INTERFACE in Makefile.
Jan Janak [Thu, 26 Mar 2009 13:33:39 +0000 (14:33 +0100)]
Define SER_MOD_INTERFACE in Makefile.

This patch adds -DSER_MOD_INTERFACE to the modules Makefile, this
is needed to make ser modules compile with the sip router core.

10 years agoMerge ser tls module into the sip-router repository
Jan Janak [Thu, 26 Mar 2009 13:23:27 +0000 (14:23 +0100)]
Merge ser tls module into the sip-router repository

* commit 'ser/modules/tls': (50 commits)
  - a set of minimalistic config files for testing purposes
  - tls module todo
  - default key and certificate names changed to ser-selfsigned*
  - updated to the latest changes in the cfg parser
  - Use the new configuration file parser
  - fixed includes (rm malloc.h) due to portability problems
  - shm_str_dup and shm_asciiz_dup set the destination buffer to NULL if
  - Convert all relative pathnames of files to absolute with
  - modified function get_pathname to return path relative to the
  - support for setting the source address in tcp_send() and tcpconn_get()
  - updated all the child_init users to ignore or treat specially the
  - added low_mem_threshold1 & low_mem_threshold2 (the ammount of free memory
  - tls: tls_update_fd improvement - use SSL_set_fd only when the connection is
  - workaround for openssl bug #1491 (multiple problems on low memory): tls
  -  malloc debugging for openssl and random malloc null returns turened off
  - added tls module documentation (not yet complete, still missing select, rpc and better tls.cfg description).
  - make tar doesn't exclude tls*, but instead tls/*
  - call tls_shutdown() only if tls_set_fd() was succesfull
  - tls: openssl kerberos malloc bug (# 1467) fixed on cvs (0.9.8e-dev and 0.9.9-dev), so add extra checks for enabling the workarround (which disables kerberos) only when necessary:  if openssl compiled with kerberos support, and openssl < 0.9.8e-beta1 or openssl between 0.9.9-dev and 0.9.9-beta1 apply workarround.
  - tls-core.patch removed (no longer necessary)

10 years agoDo not clone sip_msg->body into shared memory
Jan Janak [Tue, 24 Mar 2009 19:48:44 +0000 (20:48 +0100)]
Do not clone sip_msg->body into shared memory

10 years agoUpdate the SDP parser for the sip-router core.
Jan Janak [Tue, 24 Mar 2009 19:36:57 +0000 (20:36 +0100)]
Update the SDP parser for the sip-router core.

This patch makes the SDP parser work with the sip-router core. The
sr core sip_msg structure does not contain the pointer to sdp_info_t,
instead it contains an element called body which points to a generic
structure msg_body_t.

To make the SDP parser work with the sr core we need to cast msg_body_t
to sdp_info_t and add 'type' and 'free' elements at the beginning of
the sdp_info structure.

Function new_sdp then stores the type of the document being parsed in
msg->body->type and a pointer to free_sdp function in msg->body->free.

Furthemore, testing just if (msg->body != 0) is not enough anymore,
because the variable could also contain a pointer to a different body
document type. So we need to change all such tests to something like:

if ((msg->body != 0) && (msg->body->type == MSG_BODY_SDP))

10 years agoNew element of sip_msg structure with pointer to parsed body
Jan Janak [Tue, 24 Mar 2009 19:30:31 +0000 (20:30 +0100)]
New element of sip_msg structure with pointer to parsed body

This patch adds a new variable (called body) to the sip_msg structure
which can be used to store a pointer to parsed message body. This is
useful for modules that need to parse the SIP message body and would
like to store the result somewhere in the sip_msg structure so that
the body does not get parsed repeatedly.

The pointer is of type msg_body which is a generic structure that
represents parsed body of any type (SDP documents, XML documents, etc.).
This structure contains only two elements, the first element is enum
msg_body_type which designates the type of the parsed body document.
The second element is a pointer to a free function that is called by
the sr core to free all memory associated with the parsed body

Body parsers do not use the generic structure directly, instead they
are supposed to cast it to some other data structure. The target
structure must, however, retain the first two elements (the type and
the free function pointer) in the same order as the generic structure.
Body parsers provide the value of 'type' and 'free' elements.

The new structure in this commit only supports one body document type
per SIP message. As a possible future extension we could modify the
structure so that multiple such structures can be arranged into a
tree-like structure and then we will have support for multi-part body

10 years agoCompile also the files in parser/sdp
Jan Janak [Tue, 24 Mar 2009 19:04:18 +0000 (20:04 +0100)]
Compile also the files in parser/sdp

10 years agoSDP document parser
Ovidiu Sas [Tue, 24 Mar 2009 17:48:32 +0000 (18:48 +0100)]
SDP document parser

Signed-off-by: Jan Janak <>
10 years agoSupport for mixed content type.
Ovidiu Sas [Tue, 24 Mar 2009 14:14:53 +0000 (15:14 +0100)]
Support for mixed content type.

This patch extendes the content type parser and adds support for
content type mixed.

Signed-off-by: Jan Janak <>
10 years agoTeach the parser recognize PRACK and UPDATE methods
Ovidiu Sas [Mon, 23 Mar 2009 19:09:40 +0000 (20:09 +0100)]
Teach the parser recognize PRACK and UPDATE methods

Signed-off-by: Jan Janak <>
10 years agoKamailio compatiblity: Added pointer to a free function to tm callbacks
Jan Janak [Mon, 23 Mar 2009 14:04:41 +0000 (15:04 +0100)]
Kamailio compatiblity: Added pointer to a free function to tm callbacks

This patch adds a new pointer to the tm_callback structure. The
parameter contains pointer to a function which, if not NULL, will be
called to dispose the callback parameter when it is not needed anymore.

This is useful if the parameter given ti a transaction callback is a
complex data structure of it is stored on the heap and the memory needs
to be free when the corresponding transaction is being destroyed.

Patch contributed by Ovidiu Sas.

10 years agoNew function to return the To tag for local reply
Daniel-Constantin Mierla [Fri, 20 Mar 2009 16:42:53 +0000 (17:42 +0100)]
New function to return the To tag for local reply

Added t_get_reply_totag() to access the to-tag value for generated
replies. This is needed by sl to cope with presence modules

Signed-off-by: Jan Janak <>
10 years agoAllow parser syn'ced with kamailio version
Daniel-Constantin Mierla [Fri, 20 Mar 2009 16:19:22 +0000 (17:19 +0100)]
Allow parser syn'ced with kamailio version

Sync'ed parse_allow_header() prototype name with implementation. New
parse_allow() function that work over sim_msg structure

Signed-off-by: Jan Janak <>
10 years agoNew functions that can be used to search for a header with given type
Daniel-Constantin Mierla [Fri, 20 Mar 2009 15:42:26 +0000 (16:42 +0100)]
New functions that can be used to search for a header with given type

This patch adds two new functions to the sip-router core. Function
get_hdr can be used to find the first occurrence of header with a given
type in a sip message if the particular header type does not have its
own hook in the sip_msg data structure.

The second function next_sibling_hdr can be used to find the next
occurence of header with the same type as the header in parameter
in the sip message.

Signed-off-by: Jan Janak <>
10 years agoMerge commit 'origin/ser_core_cvs'
Andrei Pelinescu-Onciul [Fri, 20 Mar 2009 20:47:32 +0000 (21:47 +0100)]
Merge commit 'origin/ser_core_cvs'

* commit 'origin/ser_core_cvs':
  tcp: minor optimization
  sercmd: minor makefile fix
  tcp internal: send timeout is now kept only in ticks
  core: typo fix
  tcp: typo & minor optimization
  Rename Contact parameter select 'method' to 'methods'
  Rename Contact parameter 'method' to 'methods'
  make install: avoid re-linking lib dependent modules
  build system: avoid libraries re-compiling
  fixing missing $ in script
  Debian packaging - fixing path to mysql sql files in script
  The fixup function prototypes of the config variables have been
  Strip, prefix, rewriteuser, ... all the SET_* actions preserve the
  core: check & fix Content-Length when sending on tcp
  tcp: config option for the async write block size
  tcp: config option for the read buffer size
  tcp: dyn. config fix for tcp_con_lifetime
  tcp: diff. connect timeout for async & states cleanup


10 years agotcp: minor optimization
Andrei Pelinescu-Onciul [Fri, 20 Mar 2009 19:59:14 +0000 (19:59 +0000)]
tcp: minor optimization

- tcp_req complete & has_content_len transformed into flags
  (4 bytes saved per connection)

10 years agosercmd: minor makefile fix
Andrei Pelinescu-Onciul [Fri, 20 Mar 2009 17:27:15 +0000 (17:27 +0000)]
sercmd: minor makefile fix

- clear C_DEFS, since we don't need ser common DEFS for building sercmd
 (minor compile warning that appeared after the recend DEFS->C_DEFS changes
 in the main Makefiles)

10 years agotcp internal: send timeout is now kept only in ticks
Andrei Pelinescu-Onciul [Fri, 20 Mar 2009 17:26:51 +0000 (17:26 +0000)]
tcp internal: send timeout is now kept only in ticks

- removed send_timeout_s and wq_timeout and replaced them with send_timeout,
 which is now kept only in ticks. This fixes the cfg.set_delayed_int problem
 reported by Miklos.

10 years agocore: typo fix
Andrei Pelinescu-Onciul [Fri, 20 Mar 2009 16:10:37 +0000 (16:10 +0000)]
core: typo fix

- ';' after if() (again). Fortunately it didn't have any impact
  since right now nobody returns NONSIP_MSG_ACCEPT from a
  nonsip_msg callback.

10 years agotcp: typo & minor optimization
Andrei Pelinescu-Onciul [Thu, 19 Mar 2009 17:59:14 +0000 (17:59 +0000)]
tcp: typo & minor optimization

- fixed ';' after if() on tcp connection free (luckily that code path was
 not very common and it was even more improbable to have a ref'ed connection
 at that point).

- changed unlikely() into likely() when checking connect() return in async
mode (it's much more probable to get an EINPROGRESS).

Reported-by: Libor Chocholaty <>
10 years agoSupport for auto_inv_100_reason tm parameter.
Andreas Heise [Thu, 19 Mar 2009 15:32:58 +0000 (16:32 +0100)]
Support for auto_inv_100_reason tm parameter.

This patch adds support for auto_inv_100_reason parameter in tm module.
The patch was created originally for kamailio and we merge it into the
sr version of tm module too. The parameter allows to configure the
reason phrase used in 100 replies.
Signed-off-by: Jan Janak <>
10 years agoRename Contact parameter select 'method' to 'methods'
Jan Janak [Thu, 19 Mar 2009 15:15:51 +0000 (15:15 +0000)]
Rename Contact parameter select 'method' to 'methods'

According RFC3840 the correct name of the parameter is 'methods',
not 'method'.

Reported by Daniel-Constantin Mierla

10 years agoRename Contact parameter 'method' to 'methods'
Jan Janak [Thu, 19 Mar 2009 15:15:04 +0000 (15:15 +0000)]
Rename Contact parameter 'method' to 'methods'

According RFC3840 the correct name of the parameter is 'methods',
not 'method'.

Reported by Daniel-Constantin Mierla

10 years agomake install: avoid re-linking lib dependent modules
Andrei Pelinescu-Onciul [Thu, 19 Mar 2009 14:32:36 +0000 (14:32 +0000)]
make install: avoid re-linking lib dependent modules

- install doesn't try first to build everything, it will build as
  it installs. This will avoid re-linking ser-lib dependent
  modules (the normal "make all" would use a local rpath, while "make
  install" would change rpath to the install destination dir => the
  module needs to be relinked with a different rpath or on Darwin
  the lib has to be rebuilt)
- avoid an extra make call on lib install

10 years agobuild system: avoid libraries re-compiling
Andrei Pelinescu-Onciul [Thu, 19 Mar 2009 13:42:09 +0000 (13:42 +0000)]
build system: avoid libraries re-compiling

- ignore module DEFS when deciding whether or not to recompile a
  library: DEFS split into C_DEFS (for common DEFS which are taken
  into account when deciding whether or not to recompile a lib)
  and DEFS, which are now visible only inside the module or lib
  that uses them. Same for INCLUDES and C_INCLUDES.

10 years agoAdd support for SET_HOSTALL_T action.
Jan Janak [Tue, 17 Mar 2009 22:06:02 +0000 (23:06 +0100)]
Add support for SET_HOSTALL_T action.

This patch adds support for SET_HOSTALL_T action which can be used to
rewrite the hostname, port, parameters, and headers parts of the
Request-URI, all at once.

10 years agoReplace missing logging macros with va_arg support using static buffer.
Jan Janak [Tue, 17 Mar 2009 21:06:36 +0000 (22:06 +0100)]
Replace missing logging macros with va_arg support using static buffer.

There is no support for logging macros with va_arg support in the
sr core, so we need to reimplement it in conf_error using a static
buffer. The function first prints the whole string into a static
buffer using vsnprintf and the buffer is then logged using LM_GEN1.

10 years agoAdding send_sock to the dlg_t structure.
Jan Janak [Tue, 17 Mar 2009 20:03:46 +0000 (21:03 +0100)]
Adding send_sock to the dlg_t structure.

This patch adds a pointer to the socket to be used for sending into
the dlg_t structure. The pointer is not yet used, we will add the
code to use the socket later.

10 years agoUpdate to the refurbished event parser.
Jan Janak [Tue, 17 Mar 2009 16:42:05 +0000 (17:42 +0100)]
Update to the refurbished event parser.

event->text has been renamed to event->name in parse_event.h

10 years agoRefurbished event header field parser.
Jan Janak [Tue, 17 Mar 2009 16:41:19 +0000 (17:41 +0100)]
Refurbished event header field parser.

This is a new refurbished version of the Event header parser which adds
support for extra event packages and parameters needed by kamailio
presence modules, however both the implementation and the parser API
are different. It turned out that the original k. event parser (which
is an extended version of the same parser in ser) did not parse dialog
event packages correctly. The parser relies on the recently added
extensions to the generic parameter parser.

First off, the event structure contains different fields now, field
text has been renamed to name and field parsed has been renamed to type.
In addition that that there is a new structure dialog which contains
the linked list of all parsed parameters in variable list and pointers
to well known dialog event package parameters in structure dialog.

The test for the presence of the sla dialog event parameter would then
look like this:

if (e->type == EVENT_DIALOG && e->params.dialog.sla) ...

Support for new event types can be easily added by extending the global
variable events in parse_event.c, previously it was necessary to modify
the parser function, in the refurbished version it is sufficient just
to add a new element in the array and define a new event type in

The original k. version handled "dialog;sla" and "dialog" as different
event types. This is no more so, in both cases event->type will be set
to EVENT_DIALOG and the caller can descriminate them by testing for
the presence of the sla parameter as described in the text above.

Function free_event has been modified to free the linked list of parsed
parameters in event->params.list.

10 years agoExtend the parser parameter with support for dialog event parameters.
Jan Janak [Tue, 17 Mar 2009 16:17:44 +0000 (17:17 +0100)]
Extend the parser parameter with support for dialog event parameters.

This patch extends the generic parameter parser in the sip-router core
with support for the following dialog event package parameters: call-id,
from-tag, to-tag, include-session-description, and sla.

The patch introduces a new parameter class called CLASS_EVENT_DIALOG
which can be used to instruct the parser to look for the well-known
parameters above.

It also adds a new parameter hook structure called event_dialog_hooks
which will be filled with pointers to the well known parameters if
the are found in the parsed string.

10 years agoAdding cases for HDR_PPI_T, HDR_PAI_T, and HDR_PATH_T
Jan Janak [Tue, 17 Mar 2009 09:24:46 +0000 (10:24 +0100)]
Adding cases for HDR_PPI_T, HDR_PAI_T, and HDR_PATH_T

10 years agoTeach sip-router how to recognized Path header field name.
Jan Janak [Mon, 16 Mar 2009 17:49:27 +0000 (18:49 +0100)]
Teach sip-router how to recognized Path header field name.

10 years agoInclude dlfcn.h for RTLD_NOW and friends.
Jan Janak [Mon, 16 Mar 2009 15:54:44 +0000 (16:54 +0100)]
Include dlfcn.h for RTLD_NOW and friends.

There is a test in sr_module.h which tests whether the macro RTLD_NOW is
defined and defines it to DL_LAZY if not. The header file did not include
dlfcn.h which defines the macro RTLD_NOW, so as a result it was always
re-defined to DL_LAZY.

10 years agoKamailio compatiblity: function to set/get all branch flags
Jan Janak [Mon, 16 Mar 2009 13:46:51 +0000 (14:46 +0100)]
Kamailio compatiblity: function to set/get all branch flags

10 years agofixing missing $ in script
Pavel Kasparek [Mon, 16 Mar 2009 10:35:10 +0000 (10:35 +0000)]
fixing missing $ in script

10 years agoDebian packaging - fixing path to mysql sql files in script
Pavel Kasparek [Mon, 16 Mar 2009 10:08:44 +0000 (10:08 +0000)]
Debian packaging - fixing path to mysql sql files in script

10 years agoKamailio compatibility: dset manipulation functions
Jan Janak [Sun, 15 Mar 2009 23:48:06 +0000 (00:48 +0100)]
Kamailio compatibility: dset manipulation functions

This patch adds two extra kamailio compatibility functions:
 * get_branch which allows the caller to obtain the parameters of a
   branch using its index
 * km_append_branch which is similar to append_branch in sip-router
   except that the parameters of the function are slightly different.

10 years agoAdd sock_str (si as string) to struct socket_info.
Jan Janak [Sun, 15 Mar 2009 22:38:32 +0000 (23:38 +0100)]
Add sock_str (si as string) to struct socket_info.

This patch adds a new variable to the structure socket_info. The
variable contains a string representation of the socket in form

10 years agoKamailio compatibility: Parse and store integer message id in cseq.
Jan Janak [Sun, 15 Mar 2009 20:17:30 +0000 (21:17 +0100)]
Kamailio compatibility: Parse and store integer message id in cseq.

This patch modifies the CSeq header field parser. The new version of
the parser will also parse the method string and store an integer id
of the method string in the data structure representing cseq header

10 years agoSplit free_to to two functions: free_to_params and free_to.
Jan Janak [Sun, 15 Mar 2009 20:02:57 +0000 (21:02 +0100)]
Split free_to to two functions: free_to_params and free_to.

This patch splits the function free_to to two functions, free_to_params
which only destroys the linked list of parameters and free_to which
calls free_to_params internally and also frees the entire to header

10 years agoKamailio compatiblity: export parse_method function to modules.
Jan Janak [Sun, 15 Mar 2009 19:52:41 +0000 (20:52 +0100)]
Kamailio compatiblity: export parse_method function to modules.

The parser function was originally static and we are now exporting
it to other object files so that they can reuse the method parser.

10 years agoKamailio compatibility: script flags
Jan Janak [Sun, 15 Mar 2009 19:45:53 +0000 (20:45 +0100)]
Kamailio compatibility: script flags

This patch adds support for script flags identical to those present in
the kamailio core. Script flags is a global set of flags which preserve
their value for the duration of script processing. Script flags are kept
in a global variable in the sip-router core.

There are several functions that can be used to manipulate the value
of script flags:
 * setflagsval - This function sets the value of _all_ script flags
   at once. The new value of all the flags must be combined in the
   single function parameter.

 * setsflag - This function sets one particular script flag to 1. The
   function gets the index of the flag (counting from 0) as a

 * resetsflag - This function sets one particular script flag to 0. The
   function gets the index of the flag (counting from 0) as a parameter.

 * issflagset - Test the value of a script flag. Returns 1 if the flag
   is set and -1 otherwise.

 * getsflags - Returns the value of all script flags combined into a
   single variable of type flag_t. This function can be used to make a
   backup copy of script flags.

10 years agoKamailio compatiblity: Function get_diversion_param
Jan Janak [Sun, 15 Mar 2009 16:31:45 +0000 (17:31 +0100)]
Kamailio compatiblity: Function get_diversion_param

10 years agoKamailio compatibility: function reset_dst_uri
Jan Janak [Sun, 15 Mar 2009 16:24:04 +0000 (17:24 +0100)]
Kamailio compatibility: function reset_dst_uri

10 years agoSupport for P-Preferred-Identity and P-Asserted-Identity in the core.
Jan Janak [Sun, 15 Mar 2009 16:17:24 +0000 (17:17 +0100)]
Support for P-Preferred-Identity and P-Asserted-Identity in the core.

This patch adds variables that are needed by the P-Preferred-Identity
and P-Asserted-Identity parsers in the libkcore library.

10 years agoExport parse_phostport function to modules.
Jan Janak [Sun, 15 Mar 2009 16:00:06 +0000 (17:00 +0100)]
Export parse_phostport function to modules.

Function parse_phostport was originally defined static in file.c, some
of kamailio modules use the function and so we re-define it as public
and add a declaration to header file socket_info.h

10 years agoFunctions to set/reset/test per-branch flags.
Jan Janak [Sat, 14 Mar 2009 18:23:07 +0000 (19:23 +0100)]
Functions to set/reset/test per-branch flags.

This patch adds support for setbflag,resetbflag, and isbflagset
functions, these functions can be used to manipulate branch flags and
they are inspired by similar functions in kamailio.

There is a small difference compared to their counterparts in kamailio
though. The second parameter of all these functions is of type flag_t
and it is the index (counting from 0) of the flag to be manipulated.
This is better aligned with how normal flags (flags.[ch]) in sip-router
work. Similar functions in kamailio took the mask as the second
parameter with values of flags to be manipulated.

This also prevents users from modifying multiple flags at the same time
accidental (note that it is not obvious from the function name that
the function could do it).

10 years agoThe fixup function prototypes of the config variables have been
Miklos Tirpak [Fri, 13 Mar 2009 13:59:28 +0000 (13:59 +0000)]
The fixup function prototypes of the config variables have been
extended with the group name.
All the fixup functions have been updated.

10 years agoAdded missing hash_func.h header
Jan Janak [Wed, 11 Mar 2009 00:12:24 +0000 (01:12 +0100)]
Added missing hash_func.h header

h_table.h uses TABLE_ENTRIES macro but did not include hash_func.h
where the macro is defined. When h_table.h is included from another
modules which does not include hash_func.h then the modules does
not compile

10 years agoMDString Array was renamed to MD5StringArray
Jan Janak [Tue, 10 Mar 2009 22:50:07 +0000 (23:50 +0100)]
MDString Array was renamed to MD5StringArray

10 years agoKamailio compatibility: Rename MDStringArray to MD5StringArray
Jan Janak [Tue, 10 Mar 2009 22:46:05 +0000 (23:46 +0100)]
Kamailio compatibility: Rename MDStringArray to MD5StringArray

10 years agotimers: helpers for forking separate timer procs
Andrei Pelinescu-Onciul [Tue, 10 Mar 2009 21:35:33 +0000 (22:35 +0100)]
timers: helpers for forking separate timer procs

Helper functions for forking simple separate timer processes:

 fork_dummy_timer(...) - forks a process that will just sleep()
    for the required interval and then will call the provided
    timer function, all that in a loop.
    Care must be taken to use it only when fork_process() is
    allowed (e.g.: module  child_init function, when
    rank==PROC_MAIN; see doc/modules_init.txt for more details)
    It can be used to replace kamailio register_timer_process()
    (but note that it's not a "drop-in" replacement).

 fork_local_timer_process() - forks a process, initializes a
    local_timer for it, and returns the local_timer handler both
    to the parent and to the child process, so both of them can
    add/del timers (if appropriate locking is used).
    Example usage:
      struct local_timer* lt_h;

      pid=fork_local_timer_process(...., &lt_h);
      if (pid==0){
          timer_init(&my_timer1, my_timer_f1, 0, 0);
          local_timer_add(&lt_h, &my_timer, S_TO_TICKS(10), get_ticks_raw());
          while(1) { sleep(1); local_timer_run(lt, get_ticks_raw()); }
      (note that instead of sleep()-ing the process can do some useful work,
       like polling some fds a.s.o.)

10 years agoExport get_sock_info_list function to modules
Jan Janak [Tue, 10 Mar 2009 16:44:42 +0000 (17:44 +0100)]
Export get_sock_info_list function to modules

10 years agoStrip, prefix, rewriteuser, ... all the SET_* actions preserve the
Miklos Tirpak [Tue, 10 Mar 2009 16:26:35 +0000 (16:26 +0000)]
Strip, prefix, rewriteuser, ... all the SET_* actions preserve the
original URI scheme unless the host name is rewritten. If the host name
is set, then tel: and tels: URIs are converted to sip: or sips:, and the
user=phone parameter is added.

A script function, userphone(), is introduced: It adds the "user=phone"
parameter to a sip: or sips: RURI if the param is not yet present.
(Does not change tel: and tels: URIs).

(Patch has been created with cooperation with Michal Matyska.)
Fixes SER-435.

10 years agocore: check & fix Content-Length when sending on tcp
Andrei Pelinescu-Onciul [Mon, 9 Mar 2009 13:47:48 +0000 (13:47 +0000)]
core: check & fix Content-Length when sending on tcp

- automatically check & fix wrong Content-Length before forwarding
  on tcp or tls

10 years agotcp: config option for the async write block size
Andrei Pelinescu-Onciul [Mon, 9 Mar 2009 13:45:49 +0000 (13:45 +0000)]
tcp: config option for the async write block size

 - the block size used for the async writes can now be configured
   both from ser.cfg (tcp_wq_blk_size) and at runtime. This value
   has only a little performance impact and only when writes are
   delayed.  Small values are safer (big values on proxies that
   open thousands of connections over slow links would eat up a
   lot of memory). For now it's main use is debugging.

10 years agotcp: config option for the read buffer size
Andrei Pelinescu-Onciul [Mon, 9 Mar 2009 13:45:28 +0000 (13:45 +0000)]
tcp: config option for the read buffer size

- the read buffer size can now be configured both at runtime and
  from ser.cfg (tcp_rd_buf_size). A high value will help
  performance for tcp connections with lots of traffic, however it
  will increase the memory consumption. As a rule of thumb use
  high values(e.g. 32768, 65536) on servers which open only a few
  tcp connections and have very heavy traffic on them and a low
  value (e.g. 4096, 2048) on servers that are expected to have
  lots of open connections (50k - 100k+). Note also that this
  value will also limit the maximum sip datagram size that can be
  received on tcp. The default value is 4096.

10 years agotcp: dyn. config fix for tcp_con_lifetime
Andrei Pelinescu-Onciul [Mon, 9 Mar 2009 13:39:10 +0000 (13:39 +0000)]
tcp: dyn. config fix for tcp_con_lifetime

- cfg.set_delayed_int didn't work (fixup tried to modify another
  config variable which doesn't work with cfg.set_delayed*)

10 years agoK. compatibility members of the branch structure in dset.c
Jan Janak [Sun, 8 Mar 2009 23:15:31 +0000 (00:15 +0100)]
K. compatibility members of the branch structure in dset.c

The structure now also contains the buffer and length variable
to store the path header and an unsigned int variable to store
branch flags.

10 years agoFew kamailio compatiblity macros
Jan Janak [Sun, 8 Mar 2009 22:05:23 +0000 (23:05 +0100)]
Few kamailio compatiblity macros

New macros:
 * avp_core_flags
 * avp_script_flags
 * avp_get_script_flags
 * is_avp_str_name
 * is_avp_str_val

10 years agodestroy_avps kamailio compatiblity function.
Jan Janak [Sun, 8 Mar 2009 21:46:07 +0000 (22:46 +0100)]
destroy_avps kamailio compatiblity function.

The last parameter of the function controls if the function destroys
all avps with given name or just one. Returns the number of avps

10 years agoRemove function replace_len which is no longer needed.
Jan Janak [Sun, 8 Mar 2009 03:42:10 +0000 (04:42 +0100)]
Remove function replace_len which is no longer needed.

This function was originally used to calculate the size of the memory
buffer in replace_build for the resulting string. Since we now print
the result into a static buffer, this function is no longer needed.

10 years agoKamailio compatibility changes: replace_build
Jan Janak [Sun, 8 Mar 2009 03:40:13 +0000 (04:40 +0100)]
Kamailio compatibility changes: replace_build

List of changes:
 * Add support for pseudo variables
 * Create a static buffer allocated on the stack that will be used to
   print the resulting string, we no longer can determine the final
   size of the result in advance because of pseudo-variable support and
   thus we print to a fixed-size buffer and copy the result into a
   dynamically allocated buffer when done.
 * Define macro RBUF_APPEND which is used to add text to the static
   buffer, the macro checks if there is enough space in the buffer
   before each write
 * Remove the call to replace_len at the beginning of the function
 * Replace all occurrences of memcpy(...) and dest+=... with
 * At the end create a dynamically allocated buffer for the result and
   copy the string from the static buffer into the dynamic buffer.

10 years agoImporting kamailio fixes into the sip-router version of re.c
Jan Janak [Sun, 8 Mar 2009 03:32:34 +0000 (04:32 +0100)]
Importing kamailio fixes into the sip-router version of re.c

This patch imports the following two fixes:
 *  bug fixed in multiple matching on complete lines.
    Closes bug #1819248.
    Credits go to Alexander Bergolth (SF bergolth)
    (svn commit id 3096)

 * non-critical bug fixed - invalid regexps may lead to infinite matches
   and finally to memory starvation.
   Reported to Klaus Darilion <>
   (svn commit id 1039)

10 years agoUse parse_repl from within subst_parser function.
Jan Janak [Sun, 8 Mar 2009 03:20:23 +0000 (04:20 +0100)]
Use parse_repl from within subst_parser function.

The code now in parse_repl function was originally hardwired into the
subst_parser function, we moved the code into a separate function and
now just call the function from subst_parser.

10 years agoKamailio compatiblity changes: REPLACE_BUFFER_SIZE
Jan Janak [Sun, 8 Mar 2009 03:17:54 +0000 (04:17 +0100)]
Kamailio compatiblity changes: REPLACE_BUFFER_SIZE

 * Move the definition of MAX_REPLACE_WITH to the beginning of the file
 * Add the macro configuring default size of static buffer

10 years agoKamailio compatibility: parse_repl
Jan Janak [Sun, 8 Mar 2009 03:16:08 +0000 (04:16 +0100)]
Kamailio compatibility: parse_repl

 * Move the replace parser into a separate function called parse_repl
 * Declare the function in the header file
 * Add support for PV_MARKER (pseudo-variable marker $) to the parser

10 years agoKamailio compatibility declarations
Jan Janak [Sun, 8 Mar 2009 03:12:22 +0000 (04:12 +0100)]
Kamailio compatibility declarations

 * Define WITH_SEP and WITHOUT_SEP for k. compatiblity
 * Extend enum replace_special with REPLACE_SPEC
 * Add pv_spec_t type to the union in replace_with

10 years agoUpdate tm module to use and set the global route_type variable.
Jan Janak [Sat, 7 Mar 2009 00:51:19 +0000 (01:51 +0100)]
Update tm module to use and set the global route_type variable.

This patch removes the rmode variable from tm module and replaces it
with the global variable route_type defined in route.h. In addition to
that we replaced MODE_* constants with *_ROUTE (also defined in

A variable that was once defined in the tm module is now better moved
to the core, because just the core itself without the tm module loaded
can execute two types of routes, the request route and the global
onreply route (if used).

10 years agoNew global variable route_type with the type of route being executed
Jan Janak [Sat, 7 Mar 2009 00:42:04 +0000 (01:42 +0100)]
New global variable route_type with the type of route being executed

This patch adds a new global variable called route_type. This value of
the variable is one of the *_ROUTE values defined in route.h. Those
defines have been moved from sr_module.h, originally they were used
as the flags for functions in module exports but we can use them here
for the global route_type variable as well.

The variable route_type is meant to be used by module functions, in
some cases they need to test for the type of the route being executed
to know what functions are available and whether the sip message being
process is stored in shared memory or private memory.

The tm module contained similar variable (which was exported through
the tm module API), but it makes more sense to keep it in sip-router
core, because the core can execute two route types, the request route
and the onreply route, even if the tm module is not used.

10 years agotcp: diff. connect timeout for async & states cleanup
Andrei Pelinescu-Onciul [Fri, 6 Mar 2009 16:54:10 +0000 (16:54 +0000)]
tcp: diff. connect timeout for async & states cleanup

- async mode will now honour tcp_connect_timeout (up to now it
  used tcp_send_timeout also for connects)
- internal states cleanup (dropped S_CONN_PENDING, fixed
  S_CONN_ACCEPT->S_CONN_OK transition a.s.o)

10 years agoA warning comment about FL_USE_MEDIA_PROXY_FLAG reserved in mediaproxy
Jan Janak [Fri, 6 Mar 2009 00:02:59 +0000 (01:02 +0100)]
A warning comment about FL_USE_MEDIA_PROXY_FLAG reserved in mediaproxy

10 years agoMerge branch 'master' of ssh:// into sr
Jan Janak [Thu, 5 Mar 2009 23:41:57 +0000 (00:41 +0100)]
Merge branch 'master' of ssh:// into sr

* 'master' of ssh://
  tcp: config option to disable active connects
  tcp: async mode on by default
  tcp: enable runtime changing for most of the cfg vars
  tcp: use dynamic config framework, part 2
  tcp: use dynamic config framework, part 1
  test: updated parse uri test program
  sctp: rpc info command
  sctp: connection reuse & connection tracking
  sctp: empty  sctp_handle_assoc_change added
  regfree() function call is added to free the memory allocated by regcomp().

10 years agoInclude parse_to.h explicitly where needed.
Jan Janak [Thu, 5 Mar 2009 22:51:40 +0000 (23:51 +0100)]
Include parse_to.h explicitly where needed.

Since msg_parser.h does not include parse_to.h after a recent change,
we need to include parse_to.h in all files that access data structures
and parsers from the to parser and only included msg_parser.h

10 years agoAdd parsed_uri structure to the to_body structure.
Jan Janak [Thu, 5 Mar 2009 22:47:02 +0000 (23:47 +0100)]
Add parsed_uri structure to the to_body structure.

This is a compatiblity change inspired by kamailio changes. It makes
it possible to store already parsed to and from URIs in the sip
message structure and there is no need to reparse such URIs later.
To and From headers are often parsed repeatedly in modules.

As a side effect I had to avoid a nasty cyclic dependency in parser
headers. I removed parse_to from msg_parser.h, the header does not have
to be included there because nothing in msg_parser.h uses stuff from
parse_to. In addition to that many files that previously included only
msg_parser.h, and assumed that the header would pull parse_to.h as well,
needed to be modified to include parse_to.h explicitly.