sip-router
11 years agoMerge branch 'master' of ssh://git.sip-router.org/sip-router
Andrei Pelinescu-Onciul [Fri, 3 Apr 2009 14:32:24 +0000 (16:32 +0200)]
Merge branch 'master' of ssh://git.sip-router.org/sip-router

* 'master' of ssh://git.sip-router.org/sip-router:
  build system: support for multiple modules dirs

11 years agobuild system: support for multiple modules dirs
Andrei Pelinescu-Onciul [Fri, 27 Mar 2009 19:44:36 +0000 (20:44 +0100)]
build system: support for multiple modules dirs

Multiple modules directories are now supported.
The list of the modules directories is in Makefile.dirs in
 $(modules_dirs).
Name restrictions: the names must not match any makefile variable name
and they shouldn't contain any '-' char.

The modules and modules doc/READMEs will be installed in separate dirs
(e.g. for modules_dirs="modules modules_s modules_k" , the modules
 will be installed in .../lib/ser/modules , ...lib/ser/modules_s
 and ...lib/ser/modules_k).
The module man pages will all be installed in the same man dir
(but so far only some ser modules have man pages so we should be
safe).

New make targets:
every-module          -  make all the modules in all the module dirs
install-every-module  - like above, but install
install-every-module-doc
install-every-module-man

Targets dependent on $(modules_dirs) content:
$(m), $(m)-doc, $(m)-readme, $(m)-man, install-$(m),
install-$(m)-doc,  install-$(m)-man.

E.g.: for modules_dirs=modules modules_k modules_s
make modules - make all modules in the directory "modules".
make modules_k - make all the modules in the directory modules_k.
make every-module - make all the modules in the directories
                     modules, modules_k and modules_s.
make install-modules_s - install all the modules in the directory
                        modules_s.

11 years agoMerge commit 'origin/ser_core_cvs'
Andrei Pelinescu-Onciul [Fri, 3 Apr 2009 14:07:04 +0000 (16:07 +0200)]
Merge commit 'origin/ser_core_cvs'

* commit 'origin/ser_core_cvs':
  Wrapper functions for regcomp, regexec, regfree, and regerror using shared
  make: minor optimizations
  make: fail if make version < 3.80
  make: workaround for make 3.80
  make: workaround for backwards compat. with make 3.80
  dns: fix selecting neg. cname entry

11 years agoWrapper functions for regcomp, regexec, regfree, and regerror using shared
Miklos Tirpak [Fri, 3 Apr 2009 13:03:46 +0000 (13:03 +0000)]
Wrapper functions for regcomp, regexec, regfree, and regerror using shared
memory allocators instead of libc malloc/realloc/free.
Check the README file for more details.

11 years agoremove wrong EXTRA_DEBUG definition on module loader
Henning Westerholt [Fri, 3 Apr 2009 12:14:58 +0000 (14:14 +0200)]
remove wrong EXTRA_DEBUG definition on module loader

11 years agomake: minor optimizations
Andrei Pelinescu-Onciul [Fri, 3 Apr 2009 11:38:34 +0000 (11:38 +0000)]
make: minor optimizations

- make cfg should be a little faster

11 years agomake: fail if make version < 3.80
Andrei Pelinescu-Onciul [Fri, 3 Apr 2009 11:06:57 +0000 (11:06 +0000)]
make: fail if make version < 3.80

11 years agomake: workaround for make 3.80
Andrei Pelinescu-Onciul [Fri, 3 Apr 2009 10:50:13 +0000 (10:50 +0000)]
make: workaround for make 3.80

- if make version is 3.80* replace $(realpath ...) with our own
  function (realpath is not supported in 3.80)

11 years agoremove superflous ')' from previous commit
Henning Westerholt [Fri, 3 Apr 2009 08:48:01 +0000 (10:48 +0200)]
remove superflous ')' from previous commit

11 years agoport from kamailio, r3528
Henning Westerholt [Fri, 3 Apr 2009 08:46:17 +0000 (10:46 +0200)]
port from kamailio, r3528
- make error messages generated for cfg warnings and errors more userfriendly

11 years agomake: workaround for backwards compat. with make 3.80
Andrei Pelinescu-Onciul [Thu, 2 Apr 2009 18:42:58 +0000 (18:42 +0000)]
make: workaround for backwards compat. with make 3.80

- workaround for export not supported in gnu make 3.80 target
  specific variables: use $(mk_params) for each $(MAKE) invocation

11 years agodns: PTR support
Andrei Pelinescu-Onciul [Wed, 1 Apr 2009 16:48:52 +0000 (18:48 +0200)]
dns: PTR support

- PTR resolve support
- PTR dns cache support
- rpc  dns.delete_ptr
  (e.g. sercmd dns.delete_ptr 56.1.10.10.in-addr.arpa)

11 years agodns: fix selecting neg. cname entry
Andrei Pelinescu-Onciul [Tue, 31 Mar 2009 18:11:25 +0000 (18:11 +0000)]
dns: fix selecting neg. cname entry

- do not select a neg. cache cname entry as a response, unless
  the request is for a cname.
  This fixes an unlikely bug: someone makes a specific cname
  request (from ser) for a name that doesn't resolve and then later when
  a normal non-cname request is made (e.g. A) the empty negative cname
  entry is selected, leading to a coredump. So far there is no
  code in ser that could trigger this bug. Only dns.lookup cname
  ... from sip-router could trigger it.

11 years agodns: EBL records support
Andrei Pelinescu-Onciul [Tue, 31 Mar 2009 17:07:44 +0000 (19:07 +0200)]
dns: EBL records support

- support for EBL records
- dns cache support for EBLs
- dns.delete_ebl rpc added

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

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

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

11 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).

11 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.

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

11 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
parameters.

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.

11 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_*

11 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.delete_naptr
    dns.delete_cname
    dns.delete_txt
- 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 iptel.org

11 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
  supported.

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

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

Conflicts:
modules/tm/t_reply.c

11 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
  message).

11 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

11 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

  reset_static_buffer();
  init_run_actions_ctx();
  run_actions();

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

11 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
section.

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

11 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.

11 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 <jan@iptel.org>
11 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

11 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
available.

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.

11 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

11 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

11 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

11 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.

11 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.

11 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(..).

11 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

11 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.

11 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)
  ...

11 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

11 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))

11 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
structure.

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
documents.

11 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

11 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 <jan@iptel.org>
11 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 <jan@iptel.org>
11 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 <jan@iptel.org>
11 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.

11 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 <jan@iptel.org>
11 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 <jan@iptel.org>
11 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 <jan@iptel.org>
11 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 ser_mysql.sh script
  Debian packaging - fixing path to mysql sql files in my_create.sh 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

Conflicts:
Makefile.rules
action.c
cfg.lex
cfg.y
route_struct.h

11 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)

11 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)

11 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.

11 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.

11 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 <libor@iptel.org>
11 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 <jan@iptel.org>
11 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

11 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

11 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

11 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.

11 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.

11 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.

11 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.

11 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

11 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
parse_event.h

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.

11 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.

11 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

11 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.

11 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.

11 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

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

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

11 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.

11 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
'proto:address:port'.

11 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
fields.

11 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
structure.

11 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.

11 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
   parameter.

 * 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.

11 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

11 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

11 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.

11 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

11 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).

11 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.

11 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

11 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

11 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

11 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.)

11 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

11 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.

11 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

11 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.

11 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.

11 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*)

11 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.

11 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_NAME_VALUE_MASK
 * AVP_CORE_MASK
 * AVP_SCRIPT_MASK
 * avp_core_flags
 * avp_script_flags
 * avp_get_script_flags
 * is_avp_str_name
 * is_avp_str_val

11 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
destroyed.