Merge pull request #142 from smititelu/master
authorDaniel-Constantin Mierla <miconda@gmail.com>
Tue, 5 May 2015 19:23:07 +0000 (21:23 +0200)
committerDaniel-Constantin Mierla <miconda@gmail.com>
Tue, 5 May 2015 19:23:07 +0000 (21:23 +0200)
Added implementation for force_send_interface to also support IPv6.

28 files changed:
Makefile.defs
docbook/entities.xml
etc/kamailio-basic.cfg
etc/kamailio-oob.cfg
etc/kamailio.cfg
modules/app_lua/app_lua_exp.c
modules/ctl/README
modules/ctl/doc/ctl.xml
modules/ctl/doc/ctl_params.xml
modules/dispatcher/README
modules/dispatcher/doc/dispatcher_admin.xml
modules/erlang/cnode.c
modules/erlang/cnode.h
modules/erlang/worker.c
modules/jsonrpc-s/README
modules/jsonrpc-s/doc/jsonrpc-s_admin.xml
modules/jsonrpc-s/jsonrpc-s_mod.c
modules/mi_fifo/README
modules/mi_fifo/doc/mi_fifo_admin.xml
modules/mi_fifo/mi_fifo.c
modules/msilo/msilo.c
modules/pua_mi/mi_func.c
pkg/kamailio/deb/debian/changelog
pkg/kamailio/deb/jessie/changelog
pkg/kamailio/deb/precise/changelog
pkg/kamailio/deb/squeeze/changelog
pkg/kamailio/deb/trusty/changelog
pkg/kamailio/deb/wheezy/changelog

index 313b10e..3890668 100644 (file)
@@ -97,7 +97,7 @@ INSTALL_FLAVOUR=$(FLAVOUR)
 VERSION = 4
 PATCHLEVEL = 3
 SUBLEVEL =  0
-EXTRAVERSION = -pre0
+EXTRAVERSION = -pre1
 
 # memory manager switcher
 # 0 - f_malloc (fast malloc)
index 2498298..4081ec1 100644 (file)
@@ -47,7 +47,7 @@
 <!ENTITY ser "SER">
 <!ENTITY sername "SIP Express Router">
 <!ENTITY sercmd "kamcmd">
-<!ENTITY ctlsocket "ser_ctl">
+<!ENTITY ctlsocket "kamailio_ctl">
 
 <!ENTITY serhome "http://iptel.org/ser">
 <!ENTITY serbugs "http://sip-router.org/tracker">
index 55685d5..b20de64 100644 (file)
@@ -191,10 +191,10 @@ loadmodule "debugger.so"
 
 
 # ----- mi_fifo params -----
-modparam("mi_fifo", "fifo_name", "/var/run/kamailio/kamailio_fifo")
+#modparam("mi_fifo", "fifo_name", "/var/run/kamailio/kamailio_fifo")
 
 # ----- ctl params -----
-modparam("ctl", "binrpc", "unix:/var/run/kamailio/kamailio_ctl")
+#modparam("ctl", "binrpc", "unix:/var/run/kamailio/kamailio_ctl")
 
 # ----- tm params -----
 # auto-discard branches from previous serial forking leg
index db786d0..2de8a2b 100644 (file)
@@ -315,10 +315,10 @@ loadmodule "xhttp_pi.so"
 
 
 # ----- mi_fifo params -----
-modparam("mi_fifo", "fifo_name", "/var/run/kamailio/kamailio_fifo")
+#modparam("mi_fifo", "fifo_name", "/var/run/kamailio/kamailio_fifo")
 
 # ----- ctl params -----
-modparam("ctl", "binrpc", "unix:/var/run/kamailio/kamailio_ctl")
+#modparam("ctl", "binrpc", "unix:/var/run/kamailio/kamailio_ctl")
 
 # ----- tm params -----
 # auto-discard branches from previous serial forking leg
index 78f6ee1..1190e80 100644 (file)
@@ -288,10 +288,10 @@ loadmodule "debugger.so"
 
 
 # ----- mi_fifo params -----
-modparam("mi_fifo", "fifo_name", "/var/run/kamailio/kamailio_fifo")
+#modparam("mi_fifo", "fifo_name", "/var/run/kamailio/kamailio_fifo")
 
 # ----- ctl params -----
-modparam("ctl", "binrpc", "unix:/var/run/kamailio/kamailio_ctl")
+#modparam("ctl", "binrpc", "unix:/var/run/kamailio/kamailio_ctl")
 
 # ----- tm params -----
 # auto-discard branches from previous serial forking leg
index 2e2c226..e168ae9 100644 (file)
@@ -2664,7 +2664,7 @@ static const luaL_Reg _sr_mqueue_Map [] = {
 static int lua_sr_ndb_mongodb_cmd_x(lua_State *L, int ctype)
 {
        int ret = 0;
-       str param[6] = {0};
+       str param[6];
 
        if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_NDB_MONGODB))
        {
@@ -2738,7 +2738,7 @@ static int lua_sr_ndb_mongodb_find_one(lua_State *L)
 static int lua_sr_ndb_mongodb_next_reply(lua_State *L)
 {
        int ret = 0;
-       str param[1] = {0};
+       str param[1];
 
        if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_NDB_MONGODB))
        {
@@ -2765,7 +2765,7 @@ static int lua_sr_ndb_mongodb_next_reply(lua_State *L)
 static int lua_sr_ndb_mongodb_free_reply(lua_State *L)
 {
        int ret = 0;
-       str param[1] = {0};
+       str param[1];
 
        if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_NDB_MONGODB))
        {
index ae19ce4..09f35d4 100644 (file)
@@ -1,4 +1,3 @@
-
 The Ctl Module
 
 Andrei Pelinescu-Onciul
@@ -6,7 +5,7 @@ Andrei Pelinescu-Onciul
    iptelorg GmbH
 
    Copyright © 2009 iptelorg GmbH
-     _________________________________________________________________
+     __________________________________________________________________
 
    Table of Contents
 
@@ -39,9 +38,9 @@ Andrei Pelinescu-Onciul
    1.4. Set user parameter
    1.5. Set group parameter
    1.6. Set fifo parameter
-   1.7. Set the autoconversion parameter 
-   1.8. Set the binrpc_max_body_size parameter 
-   1.9. Set the binrpc_struct_max_body_size parameter 
+   1.7. Set the autoconversion parameter
+   1.8. Set the binrpc_max_body_size parameter
+   1.9. Set the binrpc_struct_max_body_size parameter
    1.10. print usage
    1.11. ctl.connections usage
    1.12. ctl.who usage
@@ -71,20 +70,20 @@ Chapter 1. Admin Guide
 
 1. Overview
 
-   This  module  implements  the  binrpc transport interface for Kamailio
+   This module implements the binrpc transport interface for Kamailio
    RPCs. It supports various transports over which it speaks binrpc: Unix
    datagram sockets, Unix stream sockets, UDP and TCP. It also supports a
-   backward  compatible  FIFO  interface  (using  the  old  Kamailio FIFO
+   backward compatible FIFO interface (using the old Kamailio FIFO
    protocol).
 
    By default (if no parameters are changed in the config file) it uses a
-   Unix  stream  socket under /tmp: /tmp/ser_ctl. This socket is also the
-   default for kamcmd.
+   Unix stream socket under /var/run/kamailio:
+   /var/run/kamailio/kamailio_ctl. This socket is also the default for
+   kamcmd.
 
    In general it's used in conjunction with kamcmd. kamcmd is a Unix tool
-   for   invoking  Kamailio  RPC  functions.  It  can  be  used  both  in
-   interactive mode (supports tab-completion and history) or command line
-   mode.
+   for invoking Kamailio RPC functions. It can be used both in interactive
+   mode (supports tab-completion and history) or command line mode.
 
    Example 1.1. kamcmd example usage
 $ kamcmd ps
@@ -104,11 +103,11 @@ $ kamcmd ps
 
 2. BINRPC
 
-   binrpc  is a ser proprietary binary protocol for invoking rpcs. It was
-   designed  such that it would minimize the packet sizes and it would be
+   binrpc is a ser proprietary binary protocol for invoking rpcs. It was
+   designed such that it would minimize the packet sizes and it would be
    very fast to parse (as opposed to XML-rpc).
 
-   The    binrpc    encoding    format   is   fully   documented   inside
+   The binrpc encoding format is fully documented inside
    modules/ctl/binrpc.h.
 
 3. Parameters
@@ -124,19 +123,19 @@ $ kamcmd ps
 
 3.1. binrpc (string)
 
-   Specifies  the  transport  used for the binrpc protocol. The following
-   transport  protocol  are supported: Unix datagram sockets, Unix stream
+   Specifies the transport used for the binrpc protocol. The following
+   transport protocol are supported: Unix datagram sockets, Unix stream
    sockets, UDP and TCP.
 
    The format is: [ protocol:] address_port|path .
 
      * For Unix sockets: [unixd|unixs|unix]:path where "unixd" means Unix
-       datagram  sockets  and  "unix"  "unixs"  mean Unix stream sockets.
-       Examples:    "unixd:/tmp/unix_dgram",    "unixs:/tmp/unix_stream",
+       datagram sockets and "unix" "unixs" mean Unix stream sockets.
+       Examples: "unixd:/tmp/unix_dgram", "unixs:/tmp/unix_stream",
        "unix:/tmp/unix_stream".
-     * For  UDP or TCP sockets: [udp|tcp]:address:port. If the address is
+     * For UDP or TCP sockets: [udp|tcp]:address:port. If the address is
        "*" or missing, it will bind to all the local addresses (0.0.0.0).
-       Examples:  "udp:localhost:2046", "tcp:localhost:2046", "tcp:3012",
+       Examples: "udp:localhost:2046", "tcp:localhost:2046", "tcp:3012",
        "udp:*:3012".
 
    If the protocol part is missing and the address/path part looks like a
@@ -145,18 +144,19 @@ $ kamcmd ps
      * "/tmp/unix_test" - equivalent to "unixs:/tmp/unix_test".
      * "localhost:3000" - equivalent to "udp:localhost:3000".
 
-   Multiple  transports  /  listen  addresses  can  be specified, just by
+   Multiple transports / listen addresses can be specified, just by
    setting the parameter multiple times.
 
-   Default:"unix:/tmp/ser_ctl" (Unix stream socket). The default value is
-   used only if no binrpc parameter is found in the config file.
+   Default: "unix:/var/run/kamailio/kamailio_ctl" (Unix stream socket).
+   The default value is used only if no binrpc parameter is found in the
+   config file.
 
    Example 1.2. Set binrpc parameter
 loadmodule "ctl"
 # optional listen addresses, if no one is specified,
 # ctl will listen on unixs:/tmp/ser_ctl
 
-modparam("ctl", "binrpc", "unix:/tmp/ser_ctl") # default
+modparam("ctl", "binrpc", "unix:/tmp/kamailio_ctl") # default
 modparam("ctl", "binrpc", "udp:localhost:2046")
 modparam("ctl", "binrpc", "tcp:localhost:2046")
 modparam("ctl", "binrpc", "unixd:/tmp/unix_dgram")  # unix datagram
@@ -197,13 +197,12 @@ modparam("ctl", "group", 100)
 3.5. fifo (integer)
 
    fifo used for the obsolete fifo protocol. The fifo protocol can be run
-   over    a    real    fifo,    over    UDP   or   over   TCP.   Format:
-   [protocol:]path|address.  If  no  protocol is specified the default is
-   "fifo".      Examples:     "fifo:/tmp/ser_fifo",     "/tmp/ser_fifo2",
-   "udp:*:2050",  "tcp:localhost:2050".  For  more details on the UDP and
-   TCP  formats see binrpc. Multiple fifos or fifo transports can be used
-   in the same time (just by setting the fifo parameter multiple times in
-   the config).
+   over a real fifo, over UDP or over TCP. Format:
+   [protocol:]path|address. If no protocol is specified the default is
+   "fifo". Examples: "fifo:/tmp/ser_fifo", "/tmp/ser_fifo2", "udp:*:2050",
+   "tcp:localhost:2050". For more details on the UDP and TCP formats see
+   binrpc. Multiple fifos or fifo transports can be used in the same time
+   (just by setting the fifo parameter multiple times in the config).
 
    Default: not set (no fifo will be used).
 
@@ -216,8 +215,8 @@ modparam("ctl", "fifo", "tcp:*:2050")              # fifo over tcp
 
 3.6. autoconversion (integer)
 
-   Enable  or  disable  automatic  type  conversion globally, for all the
-   methods  parameters. If on, a type mismatch in a method parameter will
+   Enable or disable automatic type conversion globally, for all the
+   methods parameters. If on, a type mismatch in a method parameter will
    not cause a fault if it is possible to automatically convert it to the
    expected type.
 
@@ -225,30 +224,30 @@ modparam("ctl", "fifo", "tcp:*:2050")              # fifo over tcp
 
    It is recommended to leave this parameter to its default off value and
    fix instead the client application (which should use the proper types)
-   or  to  modify the target rpc to accept any type (see the rpc scan '.'
+   or to modify the target rpc to accept any type (see the rpc scan '.'
    modifier).
 
-   Example 1.7. Set the autoconversion parameter 
+   Example 1.7. Set the autoconversion parameter
 modparam("ctl", "autoconversion", 1)
 
 3.7. binrpc_max_body_size (integer)
 
-   Set  the  size  of  binrpc  buffer  for  RPC  reply.  Value represents
+   Set the size of binrpc buffer for RPC reply. Value represents
    kilobytes.
 
    Default: 4 (meaning 4KB);
 
-   Example 1.8. Set the binrpc_max_body_size parameter 
+   Example 1.8. Set the binrpc_max_body_size parameter
 modparam("ctl", "binrpc_max_body_size", 10)
 
 3.8. binrpc_struct_max_body_size (integer)
 
-   Set  the  size  of  binrpc  structure  buffer  for  RPC  reply.  Value
-   represents kilobytes.
+   Set the size of binrpc structure buffer for RPC reply. Value represents
+   kilobytes.
 
    Default: 1 (meaning 1KB);
 
-   Example 1.9. Set the binrpc_struct_max_body_size parameter 
+   Example 1.9. Set the binrpc_struct_max_body_size parameter
 modparam("ctl", "binrpc_struct_max_body_size", 3)
 
 4. SIP-router RPC Functions
@@ -263,7 +262,7 @@ modparam("ctl", "binrpc_struct_max_body_size", 3)
 
    Example 1.10. print usage
  $ kamcmd -f"[%v] %v:%v %v\n" ctl.listen
-[binrpc] unix_stream:/tmp/ser_ctl
+[binrpc] unix_stream:/tmp/kamailio_ctl
 
 # note: the above command is equivalent with kamcmd listen
 
@@ -281,6 +280,6 @@ modparam("ctl", "binrpc_struct_max_body_size", 3)
 
    Example 1.12. ctl.who usage
  $ kamcmd -f"[%v] %v: %v %v -> %v %v\n" ctl.who
-[binrpc] unix_stream: <anonymous unix socket>  -> /tmp/ser_ctl
+[binrpc] unix_stream: <anonymous unix socket>  -> /tmp/kamailio_ctl
 
 # note the above command is equivalent to kamcmd who
index 5ac9950..f2e0219 100644 (file)
@@ -40,7 +40,8 @@
        </para>
        <para>
                By default (if no parameters are changed in the config file) it uses
-               a Unix stream socket under /tmp: /tmp/&ctlsocket;. This socket is also the
+               a Unix stream socket under /var/run/&kamailiobinary;:
+               /var/run/&kamailiobinary;/&ctlsocket;. This socket is also the
                default for &sercmd;.
        </para>
        <para>
index 3017e8f..3bd2553 100644 (file)
@@ -63,7 +63,8 @@
                setting the parameter multiple times.
        </para>
        <para>
-               <emphasis>Default:</emphasis>"unix:/tmp/&ctlsocket;" (Unix stream socket).
+               <emphasis>Default:</emphasis>
+               "unix:/var/run/&kamailiobinary;/&kamailiobinary;_ctl" (Unix stream socket).
                The default value is used <emphasis>only</emphasis> if no
                <varname>binrpc</varname> parameter is found in the config file.
        </para>
index 0ebcd6d..76dabec 100644 (file)
@@ -162,7 +162,7 @@ Alessandro Arrichiello
    1.34. ds_select_dst usage
    1.35. ds_mark_dst usage
    1.36. ds_list_exist usage
-   1.37. ds_mark_dst usage
+   1.37. ds_is_from_list usage
    1.38. ds_load_unset usage
    1.39. dispatcher list file
    1.40. Kamailio config script - sample dispatcher usage
@@ -784,7 +784,7 @@ Note
    4.8. ds_load_update()
    4.9. ds_load_unset()
 
-4.1. ds_select_dst(set, alg[, limit])
+4.1.  ds_select_dst(set, alg[, limit])
 
    The method selects a destination from addresses set. It returns true if
    a new destination is set. The selected address is set to dst_uri field
@@ -856,7 +856,7 @@ ds_select_dst("1", "$var(a)");
 ds_select_dst("1", "4", "3");
 ...
 
-4.2. ds_select_domain(set, alg[, limit])
+4.2.  ds_select_domain(set, alg[, limit])
 
    The method selects a destination from addresses set and rewrites the
    host and port from R-URI. The parameters have same meaning as for
@@ -869,21 +869,21 @@ ds_select_dst("1", "4", "3");
 
    This function can be used from REQUEST_ROUTE, FAILURE_ROUTE.
 
-4.3. ds_next_dst()
+4.3.  ds_next_dst()
 
    Takes the next destination address from the AVPs with id 'dst_avp_id'
    and sets the dst_uri (outbound proxy address).
 
    This function can be used from REQUEST_ROUTE, FAILURE_ROUTE.
 
-4.4. ds_next_domain()
+4.4.  ds_next_domain()
 
    Takes the next destination address from the AVPs with id 'dst_avp_id'
    and sets the domain part of the request URI.
 
    This function can be used from REQUEST_ROUTE, FAILURE_ROUTE.
 
-4.5. ds_mark_dst([state])
+4.5.  ds_mark_dst([state])
 
    Mark the last used address from destination set as inactive ("i"/"I"),
    active ("a"/"A"), disabled ("d"/"D") or trying ("t"/"T"). Apart of
@@ -920,7 +920,7 @@ failure_route[tryagain] {
 }
 ...
 
-4.6. ds_list_exist(groupid)
+4.6.  ds_list_exist(groupid)
 
    Check if a specific group is defined in dispatcher list or database.
      * groupid - A group ID to check.
@@ -934,7 +934,7 @@ if(ds_list_exist("10")) {
 }
 ...
 
-4.7. ds_is_from_list([groupid [, mode [, uri] ] ])
+4.7.  ds_is_from_list([groupid [, mode [, uri] ] ])
 
    This function returns true, if there is a match of source address or
    uri with an address in the given group of the dispatcher-list;
@@ -970,7 +970,7 @@ if(ds_list_exist("10")) {
 
    This function can be used from ANY_ROUTE.
 
-   Example 1.37. ds_mark_dst usage
+   Example 1.37. ds_is_from_list usage
 ...
 if(ds_is_from_list()) {
     ...
@@ -978,12 +978,15 @@ if(ds_is_from_list()) {
 if(ds_is_from_list("10")) {
     ...
 }
-if(ds_is_from_list("10", "sip:127.0.0.1:5080", "3")) {
+if(ds_is_from_list("10", "3")) {
+    ...
+}
+if(ds_is_from_list("10", "3", "sip:127.0.0.1:5080")) {
     ...
 }
 ...
 
-4.8. ds_load_update()
+4.8.  ds_load_update()
 
    Updates the load state:
      * if it is a BYE or CANCEL - remove the load from destination address
@@ -994,7 +997,7 @@ if(ds_is_from_list("10", "sip:127.0.0.1:5080", "3")) {
    This function can be used from REQUEST_ROUTE, FAILURE_ROUTE,
    BRANCH_ROUTE and ONREPLY_ROUTE.
 
-4.9. ds_load_unset()
+4.9.  ds_load_unset()
 
    Remove the call load for the destination that routed the call.
 
@@ -1031,7 +1034,7 @@ onreply_route {
    5.2. ds_list
    5.3. ds_reload
 
-5.1. ds_set_state
+5.1.  ds_set_state
 
    Sets the status for a destination address (can be use to mark the
    destination as active or inactive).
@@ -1056,7 +1059,7 @@ onreply_route {
                 _address_
                 _empty_line_
 
-5.2. ds_list
+5.2.  ds_list
 
    It lists the groups and included destinations.
 
@@ -1068,7 +1071,7 @@ onreply_route {
                 :ds_list:_reply_fifo_file_
                 _empty_line_
 
-5.3. ds_reload
+5.3.  ds_reload
 
    It reloads the groups and included destinations. For algorithm 10 (call
    load distribution), old internal list of active calls is destroyed
@@ -1088,7 +1091,7 @@ onreply_route {
    6.2. dispatcher.list
    6.3. dispatcher.reload
 
-6.1. dispatcher.set_state
+6.1.  dispatcher.set_state
 
    Sets the state for a destination address (can be use to mark the
    destination as active or inactive).
@@ -1112,7 +1115,7 @@ onreply_route {
 kamcmd dispatcher.set_state ip 2 sip:127.0.0.1:5080
 ...
 
-6.2. dispatcher.list
+6.2.  dispatcher.list
 
    Lists the groups and included destinations.
 
@@ -1123,7 +1126,7 @@ kamcmd dispatcher.set_state ip 2 sip:127.0.0.1:5080
    Example:
                 kamcmd dispatcher.list
 
-6.3. dispatcher.reload
+6.3.  dispatcher.reload
 
    Reloads the groups and included destinations. The command is disabled
    for call load based dispatching (algorithm 10) since removal of
@@ -1510,7 +1513,7 @@ failure_route[RTF_DISPATCH] {
    8.1. dispatcher:dst-down
    8.2. dispatcher:dst-up
 
-8.1. dispatcher:dst-down
+8.1.  dispatcher:dst-down
 
    When defined, the module calls event_route[dispatcher:ds-down] when a
    destination goes down (becomes probing). A typical use case is to
@@ -1521,7 +1524,7 @@ event_route[dispatcher:dst-down] {
 }
 ...
 
-8.2. dispatcher:dst-up
+8.2.  dispatcher:dst-up
 
    When defined, the module calls event_route[dispatcher:ds-up] when a
    destination that was previously down (probing) comes up. A typical use
@@ -1542,51 +1545,51 @@ Chapter 2. Frequently Asked Questions
 
    2.1.
 
-   Does dispatcher provide a fair distribution?
+       Does dispatcher provide a fair distribution?
 
-   The algoritms doing hashing over parts of SIP message don't guarantee a
-   fair distribution. You should do some measurements to decide what
-   hashing algorithm fits better in your environment.
+       The algoritms doing hashing over parts of SIP message don't guarantee a
+       fair distribution. You should do some measurements to decide what
+       hashing algorithm fits better in your environment.
 
-   Other distribution algorithms such as round robin or call load
-   dispatching do a fair distribution in terms of delivered calls to
-   gateways.
+       Other distribution algorithms such as round robin or call load
+       dispatching do a fair distribution in terms of delivered calls to
+       gateways.
 
    2.2.
 
-   Is dispatcher dialog stateful?
+       Is dispatcher dialog stateful?
 
-   No. Dispatcher is stateless, although some distribution algorithms are
-   designed to select same destination for subsequent requests of the same
-   dialog (e.g., hashing the call-id).
+       No. Dispatcher is stateless, although some distribution algorithms are
+       designed to select same destination for subsequent requests of the same
+       dialog (e.g., hashing the call-id).
 
    2.3.
 
-   Where can I find more about Kamailio?
+       Where can I find more about Kamailio?
 
-   Take a look at http://www.kamailio.org/.
+       Take a look at http://www.kamailio.org/.
 
    2.4.
 
-   Where can I post a question about this module?
+       Where can I post a question about this module?
 
-   First at all check if your question was already answered on one of our
-   mailing lists:
-     * User Mailing List -
-       http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
-     * Developer Mailing List -
-       http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev
+       First at all check if your question was already answered on one of our
+       mailing lists:
+         * User Mailing List -
+           http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
+         * Developer Mailing List -
+           http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev
 
-   E-mails regarding any stable version should be sent to
-   <sr-users@lists.sip-router.org> and e-mail regarding development
-   versions or GIT snapshots should be send to
-   <sr-dev@lists.sip-router.org>.
+       E-mails regarding any stable version should be sent to
+       <sr-users@lists.sip-router.org> and e-mail regarding development
+       versions or GIT snapshots should be send to
+       <sr-dev@lists.sip-router.org>.
 
-   If you want to keep the mail private, send it to
-   <sr-users@lists.sip-router.org>.
+       If you want to keep the mail private, send it to
+       <sr-users@lists.sip-router.org>.
 
    2.5.
 
-   How can I report a bug?
+       How can I report a bug?
 
-   Please follow the guidelines provided at: http://sip-router.org/tracker
+       Please follow the guidelines provided at: http://sip-router.org/tracker
index 8b730ca..8edb8c6 100644 (file)
@@ -1141,7 +1141,7 @@ if(ds_list_exist("10")) {
                        This function can be used from ANY_ROUTE.
                </para>
                <example>
-               <title><function>ds_mark_dst</function> usage</title>
+               <title><function>ds_is_from_list</function> usage</title>
                <programlisting format="linespecific">
 ...
 if(ds_is_from_list()) {
@@ -1150,7 +1150,10 @@ if(ds_is_from_list()) {
 if(ds_is_from_list("10")) {
     ...
 }
-if(ds_is_from_list("10", "sip:127.0.0.1:5080", "3")) {
+if(ds_is_from_list("10", "3")) {
+    ...
+}
+if(ds_is_from_list("10", "3", "sip:127.0.0.1:5080")) {
     ...
 }
 ...
index b4f5f64..6cc2786 100644 (file)
@@ -45,6 +45,7 @@
 static io_wait_h io_h;
 
 cnode_handler_t *enode = NULL;
+csockfd_handler_t *csocket_handler = NULL;
 
 /**
  * @brief Initialize Kamailo as C node by active connect as client.
@@ -239,6 +240,8 @@ int init_cnode_sockets(int cnode_id)
 void cnode_main_loop(int cnode_id)
 {
        char _cnode_name[MAXNODELEN];
+       str *enode_name;
+       int r;
 
        if (snprintf(_cnode_name, MAXNODELEN, "%.*s%d@%.*s", STR_FMT(&cnode_alivename), cnode_id+1,STR_FMT(&cnode_host)) >= MAXNODELEN)
        {
@@ -255,50 +258,73 @@ void cnode_main_loop(int cnode_id)
                return;
        }
 
+       enode_name = erlang_nodename.s?&erlang_nodename:&erlang_node_sname;
+
        /* main loop */
        switch(io_h.poll_method){
                case POLL_POLL:
                        while(1){
-                               io_wait_loop_poll(&io_h, IO_LISTEN_TIMEOUT, 0);
+                               r = io_wait_loop_poll(&io_h, IO_LISTEN_TIMEOUT, 0);
+                               if(!r && enode_connect()) {
+                                       LM_ERR("failed reconnect to %.*s\n",STR_FMT(enode_name));
+                               }
                        }
                        break;
 #ifdef HAVE_SELECT
                case POLL_SELECT:
                        while(1){
-                               io_wait_loop_select(&io_h, IO_LISTEN_TIMEOUT, 0);
+                               r = io_wait_loop_select(&io_h, IO_LISTEN_TIMEOUT, 0);
+                               if(!r && enode_connect()) {
+                                       LM_ERR("failed reconnect to %.*s\n",STR_FMT(enode_name));
+                               }
                        }
                        break;
 #endif
 #ifdef HAVE_SIGIO_RT
                case POLL_SIGIO_RT:
                        while(1){
-                               io_wait_loop_sigio_rt(&io_h, IO_LISTEN_TIMEOUT);
+                               r = io_wait_loop_sigio_rt(&io_h, IO_LISTEN_TIMEOUT);
+                               if(!r && enode_connect()) {
+                                       LM_ERR("failed reconnect to %.*s\n",STR_FMT(enode_name));
+                               }
                        }
                        break;
 #endif
 #ifdef HAVE_EPOLL
                        case POLL_EPOLL_LT:
                                while(1){
-                                       io_wait_loop_epoll(&io_h, IO_LISTEN_TIMEOUT, 0);
+                                       r = io_wait_loop_epoll(&io_h, IO_LISTEN_TIMEOUT, 0);
+                                       if(!r && enode_connect()) {
+                                               LM_ERR("failed reconnect to %.*s\n",STR_FMT(enode_name));
+                                       }
                                }
                                break;
                        case POLL_EPOLL_ET:
                                while(1){
-                                       io_wait_loop_epoll(&io_h, IO_LISTEN_TIMEOUT, 1);
+                                       r = io_wait_loop_epoll(&io_h, IO_LISTEN_TIMEOUT, 1);
+                                       if(!r && enode_connect()) {
+                                               LM_ERR("failed reconnect to %.*s\n",STR_FMT(enode_name));
+                                       }
                                }
                                break;
 #endif
 #ifdef HAVE_KQUEUE
                        case POLL_KQUEUE:
                                while(1){
-                                       io_wait_loop_kqueue(&io_h, IO_LISTEN_TIMEOUT, 0);
+                                       r = io_wait_loop_kqueue(&io_h, IO_LISTEN_TIMEOUT, 0);
+                                       if(!r && enode_connect()) {
+                                               LM_ERR("failed reconnect to %.*s\n",STR_FMT(enode_name));
+                                       }
                                }
                                break;
 #endif
 #ifdef HAVE_DEVPOLL
                 case POLL_DEVPOLL:
                        while(1){
-                               io_wait_loop_devpoll(&io_h, IO_LISTEN_TIMEOUT, 0);
+                                               r = io_wait_loop_devpoll(&io_h, IO_LISTEN_TIMEOUT, 0);
+                                               if(!r && enode_connect()) {
+                                                       LM_ERR("failed reconnect to %.*s\n",STR_FMT(enode_name));
+                                               }
                        }
                        break;
 #endif
@@ -486,6 +512,8 @@ int csockfd_init(csockfd_handler_t *phandler, const ei_cnode *ec)
 
        erl_set_nonblock(csockfd);
 
+       csocket_handler = phandler;
+
        return 0;
 }
 
@@ -512,3 +540,44 @@ int handle_csockfd(handler_common_t *phandler_t)
 
        return worker_init((worker_handler_t*)phandler->new,fd,&phandler_t->ec);
 }
+
+/*
+ * \brief Connect to Erlang node if not connected
+ */
+int enode_connect() {
+
+       handler_common_t *phandler;
+
+       if (!csocket_handler) {
+               return -1;
+       }
+
+       if (enode) {
+               return 0;
+       }
+
+       LM_DBG("not connected, trying to connect...\n");
+
+       phandler = (handler_common_t*)pkg_malloc(sizeof(cnode_handler_t));
+
+       if (!phandler) {
+               LM_CRIT("not enough memory\n");
+               return -1;
+       }
+
+       io_handler_ins(phandler);
+
+       /* connect to remote Erlang node */
+       if (cnode_connect_to((cnode_handler_t*)phandler,&csocket_handler->ec, erlang_nodename.s?&erlang_nodename:&erlang_node_sname)) {
+               /* continue even failed to connect, connection can be established
+                * from Erlang side too */
+               io_handler_del(phandler);
+       } else if (io_watch_add(&io_h,phandler->sockfd,POLLIN,ERL_CNODE_H,phandler)){
+               LM_CRIT("io_watch_add failed\n");
+               erl_close_socket(phandler->sockfd);
+               io_handler_del(phandler);
+               return -1;
+       }
+
+       return 0;
+}
index 5e9b459..300f5eb 100644 (file)
@@ -84,6 +84,8 @@ typedef struct csockfd_handler_s
        ei_cnode ec; /* erlang C node (actually it's kamailio node) */
 } csockfd_handler_t;
 
+extern csockfd_handler_t *csocket_handler;
+
 int init_cnode_sockets(int idx);
 void cnode_main_loop(int idx);
 
@@ -95,6 +97,7 @@ int wait_cnode_tmo(handler_common_t *phandler_t);
 int destroy_cnode(handler_common_t *phandler_t);
 
 int cnode_connect_to(cnode_handler_t *phandler, ei_cnode *ec, const str *nodename );
+int enode_connect();
 
 enum erl_handle_type {
        ERL_EPMD_H = 1,
index 56b28fd..772dfda 100644 (file)
@@ -56,6 +56,9 @@ int handle_worker(handler_common_t *phandler)
        eapi_t api;
        int rc;
 
+       /* ensure be connected */
+       enode_connect();
+
        memset((void*)&msg,0,sizeof(msg));
 
        /* Kamailio worker PID */
index 02c3a52..5d1e328 100644 (file)
@@ -171,7 +171,8 @@ modparam("jsonrpc-s", "transport", 1)
 3.3. fifo_name (str)
 
    The name of the FIFO file to be created for listening and reading
-   external commands.
+   external commands. If the given path is not absolute, the fifo file is
+   created relative to run_dir (global parameter).
 
    Default value is NONE.
 
index 3465301..6c9ef1c 100644 (file)
@@ -138,7 +138,8 @@ modparam("jsonrpc-s", "transport", 1)
                <title><varname>fifo_name</varname> (str)</title>
                <para>
                The name of the FIFO file to be created for listening and 
-               reading external commands.
+               reading external commands. If the given path is not absolute,
+               the fifo file is created relative to run_dir (global parameter).
                </para>
                <para>
                <emphasis>
index eb84b62..a5c877b 100644 (file)
@@ -893,6 +893,10 @@ static void jsonrpc_clean_context(jsonrpc_ctx_t* ctx)
 
 static int mod_init(void)
 {
+       int sep;
+       int len;
+       char *p;
+
        /* bind the XHTTP API */
        if(jsonrpc_transport==0 || jsonrpc_transport==1) {
                if (xhttp_load_api(&xhttp_api) < 0) {
@@ -905,6 +909,28 @@ static int mod_init(void)
                }
        }
        if(jsonrpc_transport==0 || jsonrpc_transport==2) {
+               if(jsonrpc_fifo != NULL && *jsonrpc_fifo!=0) {
+                       if(*jsonrpc_fifo != '/') {
+                               if(runtime_dir!=NULL && *runtime_dir!=0) {
+                                       len = strlen(runtime_dir);
+                                       sep = 0;
+                                       if(runtime_dir[len-1]!='/') {
+                                               sep = 1;
+                                       }
+                                       len += sep + strlen(jsonrpc_fifo);
+                                       p = pkg_malloc(len + 1);
+                                       if(p==NULL) {
+                                               LM_ERR("no more pkg\n");
+                                               return -1;
+                                       }
+                                       strcpy(p, runtime_dir);
+                                       if(sep) strcat(p, "/");
+                                       strcat(p, jsonrpc_fifo);
+                                       jsonrpc_fifo = p;
+                                       LM_DBG("fifo path is [%s]\n", jsonrpc_fifo);
+                               }
+                       }
+               }
                if(jsonrpc_init_fifo_file()<0) {
                        if(jsonrpc_transport==2) {
                                LM_ERR("cannot initialize fifo transport\n");
index ed42377..a9a8303 100644 (file)
@@ -111,9 +111,15 @@ Chapter 1. Admin Guide
 4.1. fifo_name (string)
 
    The name of the FIFO file to be created for listening and reading
-   external commands.
+   external commands. If the value is a file name or does not start with
+   '/', the FIFO file is created in the 'run_dir'. The 'run_dir' is a core
+   parameter that can specify where to create runtime files, its default
+   value is '/var/run/kamailio/'.
 
-   Default value is NONE.
+   Default value is 'Kamailio_fifo'.
+
+   The full path used by default for FIFO file is
+   '/var/run/kamailio/Kamailio_fifo'
 
    Example 1.1. Set fifo_name parameter
 ...
index 714772d..4b25035 100644 (file)
                <title><varname>fifo_name</varname> (string)</title>
                <para>
                The name of the FIFO file to be created for listening and 
-               reading external commands.
+               reading external commands. If the value is a file name or does
+               not start with '/', the FIFO file is created in the 'run_dir'. The
+               'run_dir' is a core parameter that can specify where to create
+               runtime files, its default value is '/var/run/kamailio/'.
                </para>
                <para>
                <emphasis>
-                       Default value is NONE.
+                       Default value is '&kamailio;_fifo'.
                </emphasis>
                </para>
+               <para>
+                       The full path used by default for FIFO file is
+                       '/var/run/kamailio/&kamailio;_fifo'
+               </para>
                <example>
                <title>Set <varname>fifo_name</varname> parameter</title>
                <programlisting format="linespecific">
index 710eec1..b0046ef 100644 (file)
@@ -60,7 +60,7 @@ static void fifo_process(int rank);
 static int mi_destroy(void);
 
 /* FIFO server vars */
-static char *mi_fifo = 0;                              /*!< FIFO name */
+static char *mi_fifo = NAME "_fifo";           /*!< FIFO name */
 static char *mi_fifo_reply_dir = DEFAULT_MI_REPLY_DIR;         /*!< dir where reply fifos are allowed */
 static char *mi_reply_indent = DEFAULT_MI_REPLY_IDENT;
 static int  mi_fifo_uid = -1;                          /*!< Fifo default UID */
@@ -114,12 +114,35 @@ static int mi_mod_init(void)
 {
        int n;
        struct stat filestat;
+       int len;
+       int sep;
+       char *p;
 
        /* checking the mi_fifo module param */
        if (mi_fifo==NULL || *mi_fifo == 0) {
                LM_ERR("No MI fifo configured\n");
                return -1;
        }
+       if(*mi_fifo != '/') {
+               if(runtime_dir!=NULL && *runtime_dir!=0) {
+                       len = strlen(runtime_dir);
+                       sep = 0;
+                       if(runtime_dir[len-1]!='/') {
+                               sep = 1;
+                       }
+                       len += sep + strlen(mi_fifo);
+                       p = pkg_malloc(len + 1);
+                       if(p==NULL) {
+                               LM_ERR("no more pkg\n");
+                               return -1;
+                       }
+                       strcpy(p, runtime_dir);
+                       if(sep) strcat(p, "/");
+                       strcat(p, mi_fifo);
+                       mi_fifo = p;
+                       LM_DBG("fifo path is [%s]\n", mi_fifo);
+               }
+       }
 
        LM_DBG("testing mi_fifo existance ...\n");
        n=stat(mi_fifo, &filestat);
index db47bcd..c93a35d 100644 (file)
@@ -91,7 +91,7 @@ static str sc_stored_hdrs = str_init("extra_hdrs"); /* 10 */
 
 MODULE_VERSION
 
-#define S_TABLE_VERSION 7
+#define S_TABLE_VERSION 8
 
 /** database connection */
 static db1_con_t *db_con = NULL;
index a107c4d..f92c9ff 100644 (file)
@@ -41,7 +41,9 @@
  *             <expires>
  *             <event package>
  *             <content_type>     - body type if body of a type different from default
- *                            event content-type or . 
+ *                                  event content-type or .
+ *             <id>               - id for a series of related PUBLISHes to the same
+ *                                  presentity-uri or .
  *             <ETag>             - ETag that publish should match or . if no ETag
  *             <outbound_proxy>   - outbound proxy or .
  *             <extra_headers>    - extra headers to be added to the request or .
index 3b0778f..c876f88 100644 (file)
@@ -1,3 +1,9 @@
+kamailio (4.3.0-pre1) unstable; urgency=medium
+
+  * update version to 4.3.0-pre1
+
+ -- Victor Seva <linuxmaniac@torreviejawireless.org>  Tue, 05 May 2015 10:52:12 +0200
+
 kamailio (4.3.0-pre0) unstable; urgency=medium
 
   * update version to 4.3.0-pre0
index 3b0778f..c876f88 100644 (file)
@@ -1,3 +1,9 @@
+kamailio (4.3.0-pre1) unstable; urgency=medium
+
+  * update version to 4.3.0-pre1
+
+ -- Victor Seva <linuxmaniac@torreviejawireless.org>  Tue, 05 May 2015 10:52:12 +0200
+
 kamailio (4.3.0-pre0) unstable; urgency=medium
 
   * update version to 4.3.0-pre0
index 3b0778f..c876f88 100644 (file)
@@ -1,3 +1,9 @@
+kamailio (4.3.0-pre1) unstable; urgency=medium
+
+  * update version to 4.3.0-pre1
+
+ -- Victor Seva <linuxmaniac@torreviejawireless.org>  Tue, 05 May 2015 10:52:12 +0200
+
 kamailio (4.3.0-pre0) unstable; urgency=medium
 
   * update version to 4.3.0-pre0
index 3b0778f..c876f88 100644 (file)
@@ -1,3 +1,9 @@
+kamailio (4.3.0-pre1) unstable; urgency=medium
+
+  * update version to 4.3.0-pre1
+
+ -- Victor Seva <linuxmaniac@torreviejawireless.org>  Tue, 05 May 2015 10:52:12 +0200
+
 kamailio (4.3.0-pre0) unstable; urgency=medium
 
   * update version to 4.3.0-pre0
index 3b0778f..c876f88 100644 (file)
@@ -1,3 +1,9 @@
+kamailio (4.3.0-pre1) unstable; urgency=medium
+
+  * update version to 4.3.0-pre1
+
+ -- Victor Seva <linuxmaniac@torreviejawireless.org>  Tue, 05 May 2015 10:52:12 +0200
+
 kamailio (4.3.0-pre0) unstable; urgency=medium
 
   * update version to 4.3.0-pre0
index 3b0778f..c876f88 100644 (file)
@@ -1,3 +1,9 @@
+kamailio (4.3.0-pre1) unstable; urgency=medium
+
+  * update version to 4.3.0-pre1
+
+ -- Victor Seva <linuxmaniac@torreviejawireless.org>  Tue, 05 May 2015 10:52:12 +0200
+
 kamailio (4.3.0-pre0) unstable; urgency=medium
 
   * update version to 4.3.0-pre0