sip-router
10 years agoio_wait: fix kqueue io_wait_add & POLLIN
Andrei Pelinescu-Onciul [Fri, 18 Jun 2010 22:35:47 +0000 (00:35 +0200)]
io_wait: fix kqueue io_wait_add & POLLIN

A "goto error" was placed outside the error handling "if",
resulting in any io_watch_add(), that tried to enable write
watching on a new FD, returning failure (fortunately this kind
of io_watch_add() usage doesn't happen very often, usually write
watch is enabled via io_watch_chg() on FDs already
io_watch_add()'ed for reading).

Only POLL_KQUEUE was affected by this bug, meaning the default on
all *bsd and darwin.

10 years agoio_wait: don't update FD watched status on error
Andrei Pelinescu-Onciul [Fri, 18 Jun 2010 07:48:21 +0000 (09:48 +0200)]
io_wait: don't update FD watched status on error

If the syscall to change the events or delete a watched FD fails,
don't update/delete the FD status in fd_hash.
For /dev/poll if a change fails when re-adding the FD, delete it
from the hash (in the /dev/poll case to change the events a FD is
watched for one has to remove it and re-add it with the new
events).
The syscalls should never fail in an un-handled way, but in the
unlikely event that it happens this change will make the code more
robust.

10 years agoio_wait: fix kqueue and too many errors in changelist
Andrei Pelinescu-Onciul [Thu, 17 Jun 2010 16:43:14 +0000 (18:43 +0200)]
io_wait: fix kqueue and too many errors in changelist

kevent() tries to return errors in the changelist back in the
supplied eventlist array. However if this is not large enough, the
whole kevent() syscall will fail.
Now if kevent() fails with EBADF the call will be retried with a
smaller set of changes, until the entire original changelist is
applied.
Fixes also kq_ev_change() flush mode: on error it will try to
apply the changes one-by-one.

(this affects only systems that have kqueue: *bsd and darwin)

10 years agoio_wait: fix: check for EV_ERROR for kqueue()
Andrei Pelinescu-Onciul [Thu, 17 Jun 2010 14:15:10 +0000 (16:15 +0200)]
io_wait: fix: check for EV_ERROR for kqueue()

Re-enabled and enhanced the check for EV_ERROR when using kqueue
(*bsd).  This is needed to workaround errors reported by kqueue
when trying to delete (EV_DELETE) an already closed FD (this
can happen in the tcp code, where we try to avoid applying
immediately changes in the set of watched FDs and instead
collect them and apply them after all the current kqueue
events are processed => in some corner case situations it's
possible to try to delete the FD from kqueue after the fd
was close()'ed).
This fix will ignore EV_ERROR with data == EBADF. All the other
errors will result in a POLLERR flag for the callback.

It fixes crashes with *bsd under tcp stress tests (lots of very
short lived connections).

10 years agotcp: fix fd passing bug
Andrei Pelinescu-Onciul [Wed, 16 Jun 2010 19:03:06 +0000 (21:03 +0200)]
tcp: fix fd passing bug

If connections are opened and closed very quickly when data is
sent on them, it is possible that a connection gets closed
(close() inside tcp_main) while a process waits for its fd, just
before tcp_main attempts to send the fd.  In this case the fd
sending will fail (one cannot send a closed fd) and the process
that asked for it will remain waiting forever.
The fix always checks before attempting to send the fd if the fd is
still open and the connection is not in a "bad" state. If not,
 a new error response is sent (no fd and connection == NULL).

10 years agotls: config option for sending close notify alerts
Andrei Pelinescu-Onciul [Wed, 16 Jun 2010 16:26:51 +0000 (18:26 +0200)]
tls: config option for sending close notify alerts

Added a new config option for enabling or disabling the sending of
close notify alerts prior to closing the corresponding tcp
connection. Sending the close notify prior to tcp shutdown is
nicer from a TLS point of view, but it has a measurable
performance impact and it's not a must (3-4% when using 50% cpu,
 with a debug build and 300cps  => 6-8% from the cpu is spent on
 close notify alerts).
By default it's off (change from older versions where it was
hardwired-on).
It can be changed via modparam (
e.g. modparam("tls", "send_close_notify", 1) )
or at runtime
(e.g. sercmd cfg.set_now_int tls send_close_notify 1 ).

10 years agotls: SSL_shutdown() only fully established connections
Andrei Pelinescu-Onciul [Wed, 16 Jun 2010 08:05:07 +0000 (10:05 +0200)]
tls: SSL_shutdown() only fully established connections

- do SSL_shutdown() only on established TLS connections
  (established here is from the SSL point of view  and not from
  the tcp one)
- minor warning fixes

10 years agotls: ssl_flush() fix and re-worked error reporting
Andrei Pelinescu-Onciul [Fri, 4 Jun 2010 20:26:01 +0000 (22:26 +0200)]
tls: ssl_flush() fix and re-worked error reporting

- ssl_flush() did not properly handle connection in non-established state
- all ssl_errors are now treated inside tls_generic_send() and
  tls_read_f()
- queue size accounting fix

10 years agotls: tls.list rpc: fix timeout & ip display
Andrei Pelinescu-Onciul [Fri, 4 Jun 2010 20:20:16 +0000 (22:20 +0200)]
tls: tls.list rpc:  fix timeout & ip display

- fix ip address display
- fix timeout computation

10 years agotls: fix queue accounting
Andrei Pelinescu-Onciul [Fri, 4 Jun 2010 20:17:51 +0000 (22:17 +0200)]
tls: fix queue accounting

On queue flush the size of the queue was substracted twice.

10 years agotls: rpc: tls.list and tls.options update
Andrei Pelinescu-Onciul [Fri, 4 Jun 2010 16:43:15 +0000 (18:43 +0200)]
tls: rpc: tls.list and tls.options update

- tls.list update/cleanups (more detailed now)
- tls.options - print also the new options.
- code in tls_rpc.* is iptelorg only => changed (c) and license
  (BSD-like).

10 years agotls: config options for the internal queues
Andrei Pelinescu-Onciul [Fri, 4 Jun 2010 16:38:50 +0000 (18:38 +0200)]
tls: config options for the internal queues

Added runtime config options for the internal queues used when
data has to be queued due to renegotiations or on-going
initialization of the connections:

ct_wq_max - maximum bytes queued globally for write when write has
           to wait due to TLS-level renegotiation.
con_ct_wq_max - maximum bytes queued for write per connection.
ct_wq_blk_size - internal TLS pre-write (clear-text) queue
                 minimum block size (advanced tunning or
                 debugging).

10 years agotls: fix wrong wbio usage
Andrei Pelinescu-Onciul [Fri, 4 Jun 2010 16:30:48 +0000 (18:30 +0200)]
tls: fix wrong wbio usage

The openssl library sometimes (after write operations) sets a
buffering bio "over" the wbio that we set. In this case one can no
longer rely on the wbio returned by SSL_get_wbio() (it might be the
buffering bio).
Now the BIOs are set at connection initialization time (and not on
their first use) and are stored inside the tls_extra_data
structure attached to the tcp connection. This way we are sure we
are always controlling our wbio and not something that openssl
might have stacked on top of it.

10 years agotls: fix empty files treatment
Andrei Pelinescu-Onciul [Fri, 28 May 2010 11:22:00 +0000 (13:22 +0200)]
tls: fix empty files treatment

Empty filenames ("") are now treated as unset.

10 years agotls: added tls.options rpc
Andrei Pelinescu-Onciul [Fri, 28 May 2010 11:18:57 +0000 (13:18 +0200)]
tls: added tls.options rpc

- fixed ca list string initializer
- removed fixups from read-only config variables
- added a new tls.options rpc that dumps the entire tls config.
 E.g.:
sercmd> tls.options
{
force_run: 0
method: TLSv1
verify_certificate: 0
verify_depth: 9
require_certificate: 0
private_key: /home/andrei/sr.git/modules/tls/sip-router-selfsigned.key
ca_list:
certificate: /home/andrei/sr.git/modules/tls/sip-router-selfsigned.pem
cipher_list:
session_cache: 0
session_id: sip-router-tls-3.1
config:
log: 0
connection_timeout: 600
disable_compression: 1
ssl_release_buffers: 0
ssl_freelist_max: 0
ssl_max_send_fragment: -1
ssl_read_ahead: 1
low_mem_threshold1: 15204352
low_mem_threshold2: 7602176
}

10 years agotls: migrated to the runtime cfg framework
Andrei Pelinescu-Onciul [Fri, 28 May 2010 10:35:07 +0000 (12:35 +0200)]
tls: migrated to the runtime cfg framework

- moved all the module params to runtime config. Most of the
  variables are read-only (for now) with the following exceptions:
    config - can be changed at runtime and if followed by a
             tls.realod, the configuration from the new file will
             be loaded.
    log
    connection_timeout
    low_mem_threshold1
    low_mem_threshold2
- renamed tls_fix_cfg() to tls_fix_domains_cfg() to avoid
  confusion with the runtime cfg (named tls_cfg).

10 years agodb_flatstore: updated get_abs_pathname use
Andrei Pelinescu-Onciul [Fri, 28 May 2010 10:33:33 +0000 (12:33 +0200)]
db_flatstore: updated get_abs_pathname use

Use pkg_free() now for freeing the result of get_abs_pathname().

10 years agocore: get_abs_pathname() uses now pkg_malloc()
Andrei Pelinescu-Onciul [Fri, 28 May 2010 10:30:39 +0000 (12:30 +0200)]
core: get_abs_pathname() uses now pkg_malloc()

get_abs_pathname() used libc malloc() instead of pkg_malloc(),
making it difficult to know which free to use in fixups.

10 years agocore: str.h - s/NULL/0/
Andrei Pelinescu-Onciul [Thu, 27 May 2010 18:00:25 +0000 (20:00 +0200)]
core: str.h - s/NULL/0/

Replace NULL with 0 (saves an extra #include).

10 years agotls: doc - removed handshake_timeout and send_timeout
Andrei Pelinescu-Onciul [Thu, 27 May 2010 18:00:00 +0000 (20:00 +0200)]
tls: doc - removed handshake_timeout and send_timeout

10 years agotls: removed handshake_timeout and send_timeout
Andrei Pelinescu-Onciul [Thu, 27 May 2010 17:48:02 +0000 (19:48 +0200)]
tls: removed handshake_timeout and send_timeout

Removed the handshake_timeout and send_timeout parameters.
The values from tcp are used instead (tcp_connect_timeout and
 tcp_send_timeout).

10 years agotls: s/tls_cfg/tls_domains_cfg
Andrei Pelinescu-Onciul [Thu, 27 May 2010 15:20:16 +0000 (17:20 +0200)]
tls: s/tls_cfg/tls_domains_cfg

Internal variable and type name change: replaces tls_cfg with
tls_domains_cfg. This frees up tls_cfg for use with the runtime
configuration framework (by convention a module runtime
configuration is named <module_name>_cfg and it would be very
confusing to have an exception for the tls module).

10 years agotls: added tls_info rpc
Andrei Pelinescu-Onciul [Wed, 26 May 2010 13:53:33 +0000 (15:53 +0200)]
tls: added tls_info rpc

The tls_info rpc should print various internal tls informations
and statistics. For now it prints the overall amount of write-queued
clear text.

10 years agotls: fix unregistered rpc commands
Andrei Pelinescu-Onciul [Wed, 26 May 2010 13:48:59 +0000 (15:48 +0200)]
tls: fix unregistered rpc commands

In the process of merging the tls modules with some k tls PVs the
module interface was changed, leaving the rpc functions
un-registered (and hence unaccessible).

10 years agotls: async support (major tls core rewrite)
Andrei Pelinescu-Onciul [Thu, 20 May 2010 16:24:38 +0000 (18:24 +0200)]
tls: async support (major tls core rewrite)

The new tls hook interface (exported by the tcp code) is now used.
All the IO operations are made through a custom SSL BIO, that
reads and writes in some memory buffers (see tls_bio.h), while
externally emulating a socket.  This BIO provides in fact some
functions that will be called by the openssl code on IO.
In the case of a read event, the data is first read in memory
(using tcp_read_data()), then assigned to the BIO and after that
one of SSL_read(), SSL_connect/accept (if the connection is not
yet established) or SSL_write (if the last write wanted to read
some data due to re-keying) are called.  They will all read from
the custom BIO.  A SSL_read() might not use all the data (in some
very unlikely situations), so in this case the encrypted data is
queued and the tcp code is signaled (via some flags) that it
should repeat the read call when more space is available.
Writes are split in 2: 1st write on a new connection in async mode
and other writes (they need to be handled slightly differently).
The encrypted data will end up in a memory buffer (via SSL_write()
and the custom BIO). From there it will be either sent directly if
possible or queued (tcp_async).  In the case when the SSL_write()
needs to read some data (e.g. re-keying), the whole clear text
data will be queued and the SSL_write() will be retried on the
first read event.

There is no separate async mode for tls, if tcp is in async mode,
then tls will be too and vice versa.
Runtime tunning (queue sizes a.s.o) and statistics are missing for
now.

(C) and license changes:
 - moved tls_dump_verification_failure into a separate file
   (tls_dump_vf.c), out of tls_server.c.
 - the remaining tcp_server.[ch] code is either re-written (most of it,
   the entire read & write part) or comes from old iptel code =>
   changed the (c) to iptelorg only and the license to BSD-like
   (only for tcp_server.[ch]).

10 years agotls: tls_bio ctrl cmd support, fixes and debug
Andrei Pelinescu-Onciul [Thu, 20 May 2010 15:44:13 +0000 (17:44 +0200)]
tls: tls_bio ctrl cmd support, fixes and debug

- proper return code for some BIO_ctrl commands used internally by SSL_*.
 (BIO_CTRL_DUP, BIO_CTRL_FLUSH)
- when the attached memory buffer is null and read or write is
  attempted, behave similar to socket bio on EAGAIN
  (BIO_set_retry_read(b)).
- fixed tls_bio_mbuf_read bug (switched params in memcpy).
- added tls_mbuf_init(...)
- extended debug messages if TLS_BIO_DEBUG is defined.

10 years agotls: clear text write queue implementation
Andrei Pelinescu-Onciul [Thu, 20 May 2010 14:26:22 +0000 (16:26 +0200)]
tls: clear text write queue implementation

In some cases the not-yet-encrypted data must be queued on write
and the write retried later (e.g. a SSL_write returns WANT_READ
because of an ongoing re-keying or trying to write while the SSL
connection is not yet fully established).

10 years agotls: added a minimum overhead shm buffer queue
Andrei Pelinescu-Onciul [Thu, 20 May 2010 14:22:16 +0000 (16:22 +0200)]
tls: added a minimum overhead shm buffer queue

Minimum overhead buffer queue in shm memory, based on
tcp_wbuffer_queue (tcp_conn.h).

10 years agotls: safer destroy_cfg
Andrei Pelinescu-Onciul [Thu, 20 May 2010 14:18:16 +0000 (16:18 +0200)]
tls: safer destroy_cfg

- tls_destroy_cfg() can now be called safely more then once.

10 years agotcp: new tls hooks interface and async tls changes
Andrei Pelinescu-Onciul [Thu, 20 May 2010 14:00:29 +0000 (16:00 +0200)]
tcp: new tls hooks interface and async tls changes

- new tls hooks interface that better accommodates tls async use.
  Changed read() (takes an extra flags parameter now), removed
  blocking_write() and fix_read_con(), added do_send() and
  fst_send() (both of them handle snd_flags now and might return a
  command that should be sent to tcp_main).
- more tcp send functions (tcpconn_1st_send(),
  tcpconn_send_unsafe()) and more send functions exported
  (tls_int_send.h) for use from the tls module.
- split tcp_read() into tcp_read() and tcp_read_data() and
  exported tcp_read_data() (tcp_read.h).
- support for repeating a tcp_read() if indicated
  (RD_CONN_REPEAT_READ), needed for tls.

10 years agotls: added custom memory based bio
Andrei Pelinescu-Onciul [Thu, 25 Mar 2010 19:30:57 +0000 (20:30 +0100)]
tls: added custom memory based bio

Added a custom memory based BIO, that reads and writes in some
memory buffers. It will be used to replace the direct socket
access.

10 years agotcp: minor cleanups & spelling
Andrei Pelinescu-Onciul [Thu, 25 Mar 2010 19:29:32 +0000 (20:29 +0100)]
tcp: minor cleanups & spelling

- removed F_CONN_NON_BLOCKING (not used anymore)
- spelling & whitespace cleanups

10 years agotcp: tcp_send() split in 3 smaller functions
Andrei Pelinescu-Onciul [Tue, 23 Mar 2010 16:58:30 +0000 (17:58 +0100)]
tcp: tcp_send() split in 3 smaller functions

- tcp_send() split into 3 smaller internal functions (needed for
  future tls use) + minor cleanups.
- CONN_QUEUED_WRITE now auto-decrements the connection refcnt.

10 years agotcp: comments & new internal command
Andrei Pelinescu-Onciul [Tue, 23 Mar 2010 16:54:12 +0000 (17:54 +0100)]
tcp: comments & new internal command

- commented the enum conn_cmds members
- added new cmd. CONN_NOP

10 years agotls: doc: update default value for compression
Andrei Pelinescu-Onciul [Fri, 19 Mar 2010 21:52:09 +0000 (22:52 +0100)]
tls: doc: update default value for compression

10 years agotls: disable compression by default
Andrei Pelinescu-Onciul [Fri, 19 Mar 2010 21:41:43 +0000 (22:41 +0100)]
tls: disable compression by default

Jan proposed to disable compression by default, since his tests showed
that with compression enabled openssl uses ~10x more memory.
For less then 100 connections it doesn't matter so much, but for
larger numbers (e.g. >1000) it really makes a huge difference.
To enable it, use modparam("tls", "tls_disable_compression", 0).

Reported-and-tested-by: Jan Janak <jan@iptel.org>
10 years agomodules_s/domain: fixed a few documentation typos
Juha Heinanen [Fri, 19 Mar 2010 14:32:10 +0000 (16:32 +0200)]
modules_s/domain:  fixed a few documentation typos

10 years agotls: remove warning about compression for openssl > 0.9.8e-beta1
Andrei Pelinescu-Onciul [Fri, 19 Mar 2010 14:28:37 +0000 (15:28 +0100)]
tls: remove warning about compression for openssl >  0.9.8e-beta1

Remove compile-time warning about compression workarounds for
openssl versions newer then  0.9.8e-beta1.

10 years agotls: doc update w/ the new options
Andrei Pelinescu-Onciul [Fri, 19 Mar 2010 14:26:45 +0000 (15:26 +0100)]
tls: doc update w/ the new options

- docs updated with the new parameters description
 (ssl_release_buffers, ssl_read_ahead, ssl_freelist_max_len,
 ssl_max_send_fragment).
- README regenerated
- NEWS updated

10 years agotls: new parameters for advanced openssl options
Andrei Pelinescu-Onciul [Fri, 19 Mar 2010 14:11:49 +0000 (15:11 +0100)]
tls: new parameters for advanced openssl options

- ssl_release_buffers: release internal openssl read or write
  buffers when they are no longer used (complete read or write that
  does not have to buffer anything).
  Should be used together with tls_free_list_max_len. Might have
  some performance impact (and extra *malloc pressure), but has
  also the potential of saving a lot of memory (at least 32k/idle
  connection in the default config, or ~16k+tls_max_send_fragment)).
  Works only with openssl >= 1.0.0.

- ssl_freelist_max_len: maximum length of free/unused memory
  buffers/chunks per connection. Setting it to 0 would cause any
  unused buffers to be immediately freed and hence a lower memory
  footprint (at the cost of a possible performance hit and more
  *malloc pressure). Too large value would result in extra memory
  consumption. The default is 32 in openssl.
  For lowest memory usage set it to 0 and tls_mode_release_buffers
  to 1.
  Works / makes sense only for openssl >= 1.0.0.

- ssl_max_send_fragment: maximum number of bytes (clear text) sent
  into one record. The default and maximum value are ~16k. Lower
  values would lead to a lower memory footprint. Values lower then
  the typical  app. write size might decrease performance, so
   it should be kept ~2k+ for normal SIP traffic.
  Too low values (e.g. <1024) might cause the initial handshake
  to fail, so use with care.
  Works only for openssl >= 0.9.9.

- ssl_read_ahead: enable read ahead. Should increase performance
  (1 less syscall when enabled, else openssl makes 1 read() for
  each record header and another or the content), but might
  interact with SSL_pending() (not used right now).
  Default: 1 (enabled).

10 years agocore: cfg parser: allow negative numbers in modparams
Andrei Pelinescu-Onciul [Fri, 19 Mar 2010 13:47:46 +0000 (14:47 +0100)]
core: cfg parser: allow negative numbers in modparams

10 years agotls: minor DBG() fix for the servername extension
Andrei Pelinescu-Onciul [Fri, 19 Mar 2010 12:21:32 +0000 (13:21 +0100)]
tls: minor DBG() fix for the servername extension

10 years agopua_mi: id parameter introduced in mi pua_publish
Daniel-Constantin Mierla [Wed, 17 Mar 2010 19:32:40 +0000 (20:32 +0100)]
pua_mi: id parameter introduced in mi pua_publish

- the parameter is before etag
- required to refer to same call for dialog-info
- patch by Alex Hermann (SF#2826542)

10 years agonathelper(k): safety check for content length
Daniel-Constantin Mierla [Wed, 17 Mar 2010 19:00:59 +0000 (20:00 +0100)]
nathelper(k): safety check for content length

- patch by Marcus Hunger, SF#2961414

10 years agomakefile: fix install-cfg & install-utils on solaris
Andrei Pelinescu-Onciul [Tue, 16 Mar 2010 17:15:56 +0000 (18:15 +0100)]
makefile: fix install-cfg & install-utils on solaris

Reported-by: Nathaniel L Keeling keeling akan-tech com
10 years agotls: documented is_peer_verified()
Andrei Pelinescu-Onciul [Tue, 16 Mar 2010 10:34:45 +0000 (11:34 +0100)]
tls: documented is_peer_verified()

- documented is_peer_verified()
- fixed the xmls, so that xmllint / make check does not return any
  errors
- regenerated the README

10 years agotls: doc: fix low_mem_treshold* name in examples
Andrei Pelinescu-Onciul [Tue, 16 Mar 2010 10:13:19 +0000 (11:13 +0100)]
tls: doc: fix low_mem_treshold* name in examples

The tls examples used low_memory_threshold[12] instead of
low_mem_treshold[12].

Reported-by: Jan Janak <jan@iptel.org>
10 years agodispatcher(k): use load_tm_api
Daniel-Constantin Mierla [Mon, 15 Mar 2010 22:50:13 +0000 (23:50 +0100)]
dispatcher(k): use load_tm_api

- import tm module api directly
- patch by Stephen Young (styoung)

10 years agomtree: fixed attr size in mt_list command
Daniel-Constantin Mierla [Mon, 15 Mar 2010 12:15:09 +0000 (13:15 +0100)]
mtree: fixed attr size in mt_list command

10 years agomtree: mt_reload updated
Daniel-Constantin Mierla [Mon, 15 Mar 2010 11:16:58 +0000 (12:16 +0100)]
mtree: mt_reload updated

- reload function takes in consideration the operation mode

10 years agomtree: documented new parameters
Daniel-Constantin Mierla [Mon, 15 Mar 2010 11:07:01 +0000 (12:07 +0100)]
mtree: documented new parameters

- new parameters: db_table, tname_column and mt_tree_type

10 years agomtree: fixet mt_tree_type param name
Daniel-Constantin Mierla [Mon, 15 Mar 2010 11:04:04 +0000 (12:04 +0100)]
mtree: fixet mt_tree_type param name

10 years agomtree: load many trees from same table
Daniel-Constantin Mierla [Mon, 15 Mar 2010 10:55:44 +0000 (11:55 +0100)]
mtree: load many trees from same table

- support to load data for different trees from same table
- this is a different operating mode, where tree names are dynamic, it
  is no need to define them via parameters
- static tree definition takes priority (if a static tree is defined,
  the table with dynamic trees name is not loaded)

10 years agoapp_python: fix mk_action() call
Andrei Pelinescu-Onciul [Sun, 14 Mar 2010 16:15:32 +0000 (17:15 +0100)]
app_python: fix mk_action() call

The mk_action() call used the old openser format instead of the
sip_router one.

10 years agoperl(k): fix mk_action call
Andrei Pelinescu-Onciul [Sun, 14 Mar 2010 16:13:40 +0000 (17:13 +0100)]
perl(k): fix mk_action call

The mk_action() call used the old openser format, instead of the
sip_router one.

10 years agomalloc_test: realloc testing support
Andrei Pelinescu-Onciul [Fri, 12 Mar 2010 18:38:42 +0000 (19:38 +0100)]
malloc_test: realloc testing support

Support for stress testing realloc:
 - new config variable realloc_p for enabling realloc() usage
   instead of malloc() for mem tests and mem_rnd_alloc. Its value
   is the percent of realloc()s from the total calls to alloc
   functions (0-90%).
 - new RPC: mt.mem_realloc size [unit]  for manually triggering
   a  realloc.

10 years agomem: fix real_used stats for realloc
Andrei Pelinescu-Onciul [Fri, 12 Mar 2010 11:16:16 +0000 (12:16 +0100)]
mem: fix real_used stats for realloc

A realloc that shrank an allocation accounted twice for the
fragment overhead. Basically each shrinking realloc would
introduce an error in the real_used mem stats, between 8 bytes
(f_malloc, no debugging, 32 bits) and up to 96 bytes (q_malloc
with debugging, 64 bits).
This bug concerns only the accounting part. It does not cause any
memory leak or any real runtime problem. It was introduced
in commit fb9d6e50 (2005).

10 years agotest/unit Added support for running the tests if kamailio was built instead of ser
Marius Zbihlei [Fri, 12 Mar 2010 09:54:25 +0000 (11:54 +0200)]
test/unit Added support for running the tests if kamailio was built instead of ser

Support was added by checking what executable exists in the $SR_DIR path

10 years agoregistrar Removed unnecessary child_fixup for min_expires parameter
Marius Zbihlei [Fri, 12 Mar 2010 09:36:10 +0000 (11:36 +0200)]
registrar Removed unnecessary child_fixup for min_expires parameter

The param was not exported to the stats framework.

10 years agoregistrar Fixed typo in original commit that caused an invalid reference when linking
Marius Zbihlei [Fri, 12 Mar 2010 09:29:47 +0000 (11:29 +0200)]
registrar Fixed typo in original commit that caused an invalid reference when linking

10 years agomem: fix f_malloc big fragments bug
Andrei Pelinescu-Onciul [Thu, 11 Mar 2010 20:08:20 +0000 (21:08 +0100)]
mem: fix f_malloc big fragments bug

In some situation, when dealing with several big free fragments
(>16k) f_malloc would wrongly choose a fragment with a smaller
size then requested. This would create the impression that someone
arbitrarily overwrites the memory.

First symptoms were some tls crashes reported by
Klaus Darilion  klaus.darilion@nic.at.
Reproduced using the malloc_test module.

10 years agomalloc_test: doc updates & generated README
Andrei Pelinescu-Onciul [Thu, 11 Mar 2010 20:06:17 +0000 (21:06 +0100)]
malloc_test: doc updates & generated README

10 years agomalloc_test: new module for testing/debugging memory problems
Andrei Pelinescu-Onciul [Thu, 11 Mar 2010 18:38:04 +0000 (19:38 +0100)]
malloc_test: new module for testing/debugging memory problems

malloc_test is a new module for stressing the memory allocators
and easily simulating out-of-memory conditions or memory leaks.

Implemented RPCs:
mt.mem_alloc size - allocates size bytes
mt.mem_free [size]  - frees at least size bytes. If size is missing
  frees everything allocated by any malloc_test test function.
mt.mem_used  - amount of currently allocated mem. by malloc_test.
mt.mem_rnd_alloc min max total [unit] - allocates total
  <unit> bytes in chunks with the size randomly chosen between min
  and max.  <unit> is optional and can be one of b-bytes, k - kb,
  m - mb, g -gb.
mt.mem_test_start min max total min_int max_int total_time [unit]
  starts a malloc test that will take total_time to execute.
  Memory allocations will be performed at intervals randomly
  chosen between min_int and max_int (in ms). Each allocation will
  have a randomly chosen size between min and max <unit> bytes.
  After total <unit> bytes are allocated, everything is
  released/freed again and the allocations are restarted. The
  total_time is expressed in milliseconds.
  Several tests can be run in the same time.
mt.mem_test_stop id - stops the test identified by id.
mt.mem_test_destroy id - destroys the test identified by id
   (besides stopping it, it also frees all the data, including the
   statistics).
mt.mem_test_destroy_all - destroys all the running or stopped
   tests.
mt.mem_test_list [id] - Prints data about test id (running time,
  total allocations, errors a.s.o.). If id is missing, it will lists
  all the tests.

Script functions:
mt_mem_alloc(size) - equivalent to the mt.mem_alloc RPC.
mt_mem_free(size) - equivalent to the mt.mem_free RPC.

10 years agomodules/mediaproxy: Added support for ICE negotiation.
Juha Heinanen [Thu, 11 Mar 2010 02:03:41 +0000 (04:03 +0200)]
modules/mediaproxy: Added support for ICE negotiation.

Patch provided by Sal Ibarra Corretg.

10 years agomake: fix CPU reset in some conditions
Andrei Pelinescu-Onciul [Wed, 10 Mar 2010 16:30:39 +0000 (17:30 +0100)]
make: fix CPU reset in some conditions

In some cases like trying to build a package with debug config
(e.g. make cfg mode=debug; .... ; make deb), the CPU make variable
was reset resulting in a build failure. This happens because in
the debug config CPU is not set and hence is  saved as empty.
Trying to build a package will start a sub-make which will try to
re-do the config without debugging (make cfg), but the CPU
variable with and empty value will be inherited from the
environment and thus the CPU?=something lines won't have any
effect.
The fix replaces CPU?=something with
$(call set_if_empty,CPU,something)
This works around having an empty CPU in the environment.

Reported-by: Jan Janak <jan@iptel.org>
10 years agodocbook: fix rm'ed files mentioned in .d build error
Andrei Pelinescu-Onciul [Wed, 10 Mar 2010 09:42:15 +0000 (10:42 +0100)]
docbook: fix rm'ed files mentioned in .d build error

When some .xml include file is deleted or removed, but the .d
already exists, the build will fail trying to build the apparently
missing file, requiring a make proper.
This fix enclosed the prerequisites in $(wildcard ...), when
generating the .d file.

10 years agocfg. parser: fix warnings
Andrei Pelinescu-Onciul [Wed, 10 Mar 2010 08:45:28 +0000 (09:45 +0100)]
cfg. parser: fix warnings

- removed flex input warnings
- workaround for bison conflicts warnings (%expect ...)

10 years agomake: on-the-fly dependency generation
Andrei Pelinescu-Onciul [Wed, 10 Mar 2010 08:25:13 +0000 (09:25 +0100)]
make: on-the-fly dependency generation

- support on-the-fly dependency file generation with gcc >=3.0
 (the dependency files are generated while compiling the object
 file, eliminating another gcc+sed invocation)

- support for using makedepend -f-  for generating dependencies
 E.g.: make cfg MKDEP="makedepend -f-". In general gcc should be
 preferred if available (use this if you don't have gcc and your
 compiler doesn't generate good deps).

10 years agomake: depends move/rm file fix & optimization
Andrei Pelinescu-Onciul [Tue, 9 Mar 2010 20:57:25 +0000 (21:57 +0100)]
make: depends move/rm file fix & optimization

- fix for make failing if the depends were made and a *.h is moved
  or deleted
- avoid restarting make when depends change (make the depends at
  the same moment when the .o are generated)

10 years agomodules/carrierroute Ser cfg framework for some carrierroute parameters (fetch_rows...
Marius Zbihlei [Tue, 9 Mar 2010 12:54:49 +0000 (14:54 +0200)]
modules/carrierroute Ser cfg framework for some carrierroute parameters (fetch_rows, use_domain and fallback_default)

Added support for cfg framework for some parameters
Updated documentation to reflect the changes

10 years agomodules_k/registrar Updated documentation to reflect ser cfg framework integration
Marius Zbihlei [Mon, 8 Mar 2010 14:11:05 +0000 (16:11 +0200)]
modules_k/registrar Updated documentation to reflect ser cfg framework integration

10 years agodoc: select_list regenerated
Andrei Pelinescu-Onciul [Sun, 7 Mar 2010 11:58:06 +0000 (12:58 +0100)]
doc: select_list regenerated

10 years agodoc: cfg_list regenerated
Andrei Pelinescu-Onciul [Sun, 7 Mar 2010 11:57:08 +0000 (12:57 +0100)]
doc: cfg_list regenerated

10 years agodoc: rpc_lists regenerated
Andrei Pelinescu-Onciul [Sun, 7 Mar 2010 11:56:02 +0000 (12:56 +0100)]
doc: rpc_lists regenerated

10 years agotm: rpc doc strings moved to tm.c
Andrei Pelinescu-Onciul [Sun, 7 Mar 2010 11:52:27 +0000 (12:52 +0100)]
tm: rpc doc strings moved to tm.c

Moved all the rpc doc strings into tm.c, close to the rpc exports
declaration. This will also allow automatic documentation
generation for the rpcs (the script that generates the rpc docs,
parses C code and cannot "resolve" symbols defined in other
files).

10 years agodoc rpc: fix xmllint errors
Andrei Pelinescu-Onciul [Sun, 7 Mar 2010 11:31:59 +0000 (12:31 +0100)]
doc rpc: fix xmllint errors

Fix unsupported xmlns:xi attrib., missing example titles and
text or examples outside sections.

10 years agodoc: dump_selects.pl: fix bare <listitem> in generated xmls
Andrei Pelinescu-Onciul [Sun, 7 Mar 2010 11:28:04 +0000 (12:28 +0100)]
doc: dump_selects.pl: fix bare <listitem> in generated xmls

- <listitem></listitem> cannot contain bare text => switched to
  using <simpara></simpara> inside

10 years agodoc: *_list: fix xmllint errors and TOC
Andrei Pelinescu-Onciul [Sun, 7 Mar 2010 11:24:02 +0000 (12:24 +0100)]
doc: *_list: fix xmllint errors and TOC

- fix xmllint erros
- use a 0-level TOC (such that the main TOC will list only the
  chapters and not also the sections)

10 years agodoc: *_list makefiles and files lists updates
Andrei Pelinescu-Onciul [Sat, 6 Mar 2010 12:57:46 +0000 (13:57 +0100)]
doc: *_list makefiles and files lists updates

- added new makefile targets: gen-files-list (generate the file
  lists in a makefile-ready-to-paste format), diff-list
   (searches for files and prints the one which are not listed
   in the makefile).
- updated make autogen to obey the excluded file and group lists
- updated the files lists for cfg_list, rpc_list and select_list.
  Now they are in alphabetical order, with core groups first, as
  generated by make gen-files-list.
- fixed title for the config var list

10 years agodoc: cfg_list regenerated
Andrei Pelinescu-Onciul [Fri, 5 Mar 2010 18:17:06 +0000 (19:17 +0100)]
doc: cfg_list regenerated

10 years agodoc: cfg_list: updated module list
Andrei Pelinescu-Onciul [Fri, 5 Mar 2010 18:14:27 +0000 (19:14 +0100)]
doc: cfg_list: updated module list

Added siputils, registrar(k) and ratelimit.

10 years agodoc: rpc_list regenerated
Andrei Pelinescu-Onciul [Fri, 5 Mar 2010 18:10:22 +0000 (19:10 +0100)]
doc: rpc_list regenerated

10 years agodoc: rpc_list: updated the module list
Andrei Pelinescu-Onciul [Fri, 5 Mar 2010 18:04:25 +0000 (19:04 +0100)]
doc: rpc_list: updated the module list

Removed rls(s), pike(s) and pa(s) (obsolete) and add
debugger htable, usrloc(k) and uac(k).
Changed the name for usrloc(s) and usrloc(k) so that there won't
be name conflicts.

10 years agodoc: select_list regenerated
Andrei Pelinescu-Onciul [Fri, 5 Mar 2010 17:43:44 +0000 (18:43 +0100)]
doc: select_list regenerated

10 years agoMerge remote branch 'origin/andrei/cdefs2doc'
Andrei Pelinescu-Onciul [Fri, 5 Mar 2010 17:33:44 +0000 (18:33 +0100)]
Merge remote branch 'origin/andrei/cdefs2doc'

* origin/andrei/cdefs2doc: (23 commits)
  doc: select_list: added intro & notations sections
  doc: select_list: generated docbook and txt lists
  doc: select_list: added makefiles for auto-gen.
  doc: {rpc,cfg}_list: fix makefile exclude list
  doc: dump_selects.pl: fix for incomplete initializers
  doc: dump_selects.pl: support for docbook output
  doc: cfg_list: generated docbook cfg vars lists
  doc: cfg_list: docbook output directory
  doc: cfg_list: support for generating docbook output
  doc: dump_cfg_defs.pl: support for docbook output
  doc: rpc_list: generated docbook rpc lists
  doc: rpc_list: docbook output directory
  doc: rpc_list: support for generating docbook output
  doc: dump_rpcs.pl: support for docbook output
  doc: select doc generator: more fixes & core selects support
  doc: select doc generator fix flags processing
  doc: generated rpc lists
  doc: generated cfg vars lists
  doc: added makefiles for auto-gen. rpc and cfg vars lists
  doc: script to generate select lists from C code
  ...

10 years agomodules_k/permisssions Fixed a bug that caused a segmentation fault if the mi_fifo...
Marius Zbihlei [Fri, 5 Mar 2010 14:54:58 +0000 (16:54 +0200)]
modules_k/permisssions Fixed a bug that caused a segmentation fault if the mi_fifo subnet_dump was issued
but the permissions module was not fully configured (no db url given)

10 years agomodules_k/userblacklist : check_blacklist function uses globalblacklist_table as...
Marius Zbihlei [Fri, 5 Mar 2010 14:32:49 +0000 (16:32 +0200)]
modules_k/userblacklist : check_blacklist function uses globalblacklist_table as data source if no parameter is given.

Globalblacklist_table parameter was not used at all in the userblacklist module, the check_blacklist funtion always needing
one parameters and the db table. This is not mandatory anymore, as the check_blacklist function with no parameters will use
the globalblacklist_table

10 years agomodules/lcr: improved documentation related to defunct_gw function
Juha Heinanen [Fri, 5 Mar 2010 04:44:03 +0000 (06:44 +0200)]
modules/lcr: improved documentation related to defunct_gw function
(cherry picked from commit 98607744d233e03ba6e71f076ee4dd5e68d4407b)

10 years agodoc: select_list: added intro & notations sections
Andrei Pelinescu-Onciul [Thu, 4 Mar 2010 18:27:33 +0000 (19:27 +0100)]
doc: select_list: added intro & notations sections

10 years agopipelimit: module for pipe traffic limit
Daniel-Constantin Mierla [Sun, 24 Jan 2010 21:25:03 +0000 (22:25 +0100)]
pipelimit: module for pipe traffic limit

- based on ratelimit
- has only pipe functionality so far
- pipe definitions loaded from database
- pipe id is name
- dynamic management of piples
(cherry picked from commit 163cd084ab97d8938dd014867f70811f0cffa54f)

10 years agomakefile: fix modules config overwrite
Andrei Pelinescu-Onciul [Thu, 4 Mar 2010 12:16:06 +0000 (13:16 +0100)]
makefile: fix modules config overwrite

A config file provided by a module was installed even if a
previous version was already installed, overwriting the old
version. Now if a file with the same name already exists, the
module config file will be installed with a .sample extension
added (so only .sample will be overwritten, never an active .cfg).

Reported-by: Klaus Darilion klaus.mailinglists pernau at
Closes FlySpray#38 .

10 years agodoc: fix links & path for ctl & xmlrpc
Andrei Pelinescu-Onciul [Thu, 4 Mar 2010 09:52:50 +0000 (10:52 +0100)]
doc: fix links & path for ctl & xmlrpc

ctl & xmlrpc were moved from modules_s/ to modules/, but the
links to them in the docs were not updated.

10 years agoremoved duplicate modules_s/tls
Andrei Pelinescu-Onciul [Thu, 4 Mar 2010 09:07:48 +0000 (10:07 +0100)]
removed duplicate modules_s/tls

The up-to-date tls module is modules/tls.

10 years ago* modules_k/permissions: subnet matching fix (credits to anonymous)
Juha Heinanen [Thu, 4 Mar 2010 07:09:22 +0000 (09:09 +0200)]
* modules_k/permissions: subnet matching fix (credits to anonymous)

10 years agotest: added parse to body test program
Andrei Pelinescu-Onciul [Wed, 3 Mar 2010 18:30:04 +0000 (19:30 +0100)]
test: added parse to body test program

- added parse to body test program that uses the same code as
  sip-router. E.g. test/parse_to_body "Foo <foo@bar>CR".
- update p_uri (parse uri test) to compile with sip-router.

10 years agocore: define shm_str_dup() only ifdef SHM_MEM
Andrei Pelinescu-Onciul [Wed, 3 Mar 2010 18:29:04 +0000 (19:29 +0100)]
core: define shm_str_dup() only ifdef SHM_MEM

10 years agocore: parse_to display name multi-token no-quotes fix
Andrei Pelinescu-Onciul [Wed, 3 Mar 2010 18:24:08 +0000 (19:24 +0100)]
core: parse_to display name multi-token no-quotes fix

Fix for properly returning a non-quoted display name that is
composed of several tokens (contains spaces). The previous version
would set the display name to the first token, in this case
(e.g. Foo Bar <sip:foo@bar> resulted in display_name="Foo" instead
 of "Foo Bar").

Reported-by: Ronald Voermans ronald voermans nu
Closes FlySpray#39 .

10 years agoparse_param: Let the body point behind '=' when body is missing.
Jan Janak [Tue, 2 Mar 2010 21:03:42 +0000 (16:03 -0500)]
parse_param: Let the body point behind '=' when body is missing.

This fixes potential issues with functions that copy parameters
structures from private to shared memory because such functions
usually translate string pointers using a base pointing at the
first character of the parameter list.

Reported by Daniel.

10 years agoparam_parser: Accept parameters with missing bodies.
Jan Janak [Tue, 23 Feb 2010 19:38:31 +0000 (14:38 -0500)]
param_parser: Accept parameters with missing bodies.

This change makes the parameter parser more forgiving. It accepts
parameters with missing bodies (foo=), such parameters will have
the body set to an empty string. Observed on iptel.org

10 years agocore: added missing parsed flags & minor get_hdr optimization
Andrei Pelinescu-Onciul [Tue, 2 Mar 2010 16:41:37 +0000 (17:41 +0100)]
core: added missing parsed flags & minor get_hdr optimization

- parsed flags were not set for some headers (ACCEPTCONTACT,
ALLOWEVENTS, CONTENTENCODING, REFERREDBY, REJECTCONTACT,
REQUESTDISPOSITION, WWW_AUTHENTICATE, PROXY_AUTHENTICATE,
RETRY_AFTER).

- get_hdr() now checks first if the required header type was
  parsed using the parsed flags. If it was not, it exists
  immediately (it does not try to search through all the headers
  anymore).