= Config migration guide from ser or kamailio to sip-router =

ser 2.1 config migration

1. Avps, selects and strings in if or other expressions

The most important change is the different way in which avp and select are
evaluated in boolean expressions (if ()).
In ser "if ($v){}" or "if (@select){}" were true if the avp or select were
"defined" and if their value was non-empty (!= "").
In sip-router this changed: the ifs will be true if the avp or select are
non-empty and they evaluate to a non-zero number. The catch is that a
non-numeric string evaluates to 0 (e.g. "abc" evaluates to 0, "123" evaluates
to 123, "" to 0, "0" to 0).
Something like "if($v)" should be used only if $v is supposed to have a numeric
value. "if (@select)" should not be used in general (it's probably not what you

The equivalent sip-router checks are:

instead of if ($v) use if ($v != "")
instead of if (!$v) use if ($v == "") or if (strempty($v)).
instead of if (@select) use if (@select != "")
instead of if (!@select) use if (@select == "") or if (strempty(@select)).

If the test is for value existence, then if ($v) can be replaced with
 if (defined $v).

	if (! $f.did)
	if (strempty($f.did))

	if (method=="INVITE" && !@to.tag)
	if (method=="INVITE" && strempty(@to.tag))

	if ($f.did && ! $t.did)
	if ($f.did != ""  && $t.did == "")

	if (@to.tag)
	if (@to.tag != "")

2. Module path

While in ser there was only a single directory holding the modules, now there
are 3: modules (for common modules), modules_s (for ser modules) and modules_k
(for kamailio modules).
The easiest way to migrate a ser config is to add:

	loadpath "/usr/lib/ser/modules:/usr/lib/ser/modules_s"

at the beginning (before any loadmodule command).
This will set the module search path to first look into the common modules and
if not found in the ser modules.

Make sure that all the loadmodule commands do not include the path to the
module or the .so extension (or else they won't make use of the loadpath).
	loadmodule "/usr/lib/ser/modules/tm.so"
	loadmodule "tm"

3. Module names

Some of the modules changed their name (usually after being merged with the
kamailio ones).
The most common changes are mysql -> db_mysql and postgres -> db_postgres.

	loadmodule "mysql"
	loadmodule "db_mysql"

4. msg:len and max_len

max_len was removed. All the comparisons of msg:len with max_len must be
changed to use a number (e.g. 4096 or 16384) instead of max_len.
Comparing with max_len didn't make sense anyway since max_len was the size of
the internal receive buffer on UDP. You could never exceed it, unless you were
using TCP configured in a non-standard way.

	if (msg:len >= max_len)
	if (msg:len >= 4096)

kamailio config migration

[TODO: probably most of the things from the ser section apply too]