Resources.DocsCoreMi15 History

Hide minor edits - Show changes to markup

April 24, 2013, at 10:16 PM by 92.80.24.181 -
Changed lines 1-232 from:

Resources -> Documentation -> CookBooks -> Core MI Functions v1.5


(:toc-float Table of Content:) MI (management interface) functions which are exported by OpenSIPS core.

This document is for OpenSIPS 1.5.x

arg

Returns the full list of arguments used when OpenSIPS was started. As in UNIX, the first argument is the name of executable binary.
Arguments: none
Output: multiple MI nodes where each node contains an argument. The MI nodes have no name, but only value.

Example of usage:

    # opensipsctl fifo arg
    ./opensips
    -f
    /etc/openser/test.cfg

debug [level]

Gets or sets the value of the debug core variable. You may use it to dynamically (at runtime) change or inspect the debug level of your OpenSIPS. If no argument is passed, the function will fetch the value of the debug level.
Arguments: debug level (-3...4)
Output: debug level (only when no argument is passed). The value will be returned as a single MI node with name "DEBUG"

Examples of usage:

    # opensipsctl fifo debug
    DEBUG:: 4
    # opensipsctl fifo debug 1

kill

The command will terminate OpenSIPS (and internal shutdown).
Arguments: none
Output: none

Examples of usage:

    # opensipsctl fifo kill

list_blacklists

The command lists all the defined (static or learned) blacklists from OpenSIPS.
Arguments: none
Output: an MI tree - first level (nodes named "List") will describe the list (name, owner, flags); Second level (nodes named "Rules) will describe the rules (blacklists) for each list (IP/mask, protocol, port, matching regexp, flags)

Examples of usage:

    # opensipsctl fifo list_blacklists

ps

The command will list all all OpenSIPS processes, along with type and description.
Arguments: none
Output: multiple MI nodes (named "Process") - each node contains process ID (internal), PID (OS), Type and description

Examples of usage:

    # opensipsctl fifo ps
    Process::  ID=0 PID=16224 Type=attendant
    Process::  ID=1 PID=16225 Type=SIP receiver udp:192.168.1.2:5060 
    Process::  ID=2 PID=16226 Type=timer
    Process::  ID=3 PID=16227 Type=MI FIFO
    Process::  ID=4 PID=16228 Type=TCP receiver
    Process::  ID=5 PID=16230 Type=TCP main

pwd

Prints the working directory of OpenSIPS instance.
Arguments: none
Output: a single MI node with name "WD" containing the working directory full path.

Examples of usage:

    # opensipsctl fifo pwd
    WD:: /

uptime

Prints various time information about OpenSIPS - when it started to run, for how long it runs.
Arguments: none
Output: three MI nodes: "Now" - current time; "Up since" - start time ; "Up time" - number of seconds since started.

Examples of usage:

    # opensipsctl fifo uptime
    Now:: Mon Jul 21 17:41:03 2008
    Up since:: Mon Jul 21 17:36:33 2008
    Up time:: 270 [sec]

version

Prints the version string of a runningOpenSIPS.
Arguments: none
Output: one MI node (named "Server") containing the version string.

Examples of usage:

    # opensipsctl fifo version
    Server:: OpenSIPS (1.4.0dev14-notls (i386/linux))

which

Prints all available MI commands from the queried OpenSIPSinstance.
Arguments: none
Output: multiple MI nodes (no name), each node containing (as value) the name of an available MI command. NOTE that the list of available MI commands may differ depending of what modules your OpenSIPS is using.

Examples of usage:

    # opensipsctl fifo which
    get_statistics
    reset_statistics
    uptime
    version
    pwd
    arg
    which
    ps
    kill
    debug
    list_blacklists
    ul_rm
    ul_rm_contact
    ul_dump
    ul_flush
    ul_add
    ul_show_contact
    nh_enable_ping
    nh_enable_rtpp

get_statistics

Prints the statistics (all, group or one) realtime values.
Arguments: input may be "all" - print all available statistics; "group:" - print only statistics from a certain group; "name" - print only this statistic. The OpenSIPS core defines the following groups: core, shmem; Modules export groups typically named like the module itself.
Output: list of MI nodes (no name) - each MI mode contains the name and value of a single statistic variable.

Examples of usage:

    # opensipsctl fifo get_statistics rcv_requests
    core:rcv_requests = 35243
    # opensipsctl fifo get_statistics shmem:      
    shmem:total_size = 33554432
    shmem:used_size = 1686952
    shmem:real_used_size = 1704592
    shmem:max_used_size = 1704592
    shmem:free_size = 31849840
    shmem:fragments = 1
    # opensipsctl fifo get_statistics all
    ....

reset_statistics

Reset (to zero) the value of a statistic variable. Note that not all variables allow reset (depending of the nature of the information they carry - example "shmem:used_size").
Arguments: name of the variable to be reset.
Output: none.

Examples of usage:

    # opensipsctl fifo get_statistics received_replies
    core:received_replies = 14543
    # opensipsctl fifo reset_statistics received_replies
    # opensipsctl fifo get_statistics received_replies
    core:received_replies = 0

cache_store

This command stores in a cache system a string value.
Arguments:
- cache system to use - for the cache system implemented by OpenSIPS module 'localcache' the value of this parameter should be 'local'
- the label to be associated with this value
- the string to be stored
Output: none.
Examples of usage:

    # opensipsctl fifo cache_store local password_user1 password

cache_fetch

This command queries for a stored value.
Arguments:
- cache system to use - for the cache system implemented by OpenSIPS module 'localcache' the value of this parameter should be 'local'
- the label associated with the value
Output: MI tree containing the value if a record is found or 'Value not found' string otherwise.
Examples of usage:

    # opensipsctl fifo cache_fetch local password_user1

cache_remove

This command removes a record from the cache system.
Arguments:
- cache system to use
- the label associated with the stored value
Output: None.
Examples of usage:

    # opensipsctl fifo cache_remove local password_user1

Comments

(:nl:)>>messagehead<<

Andreas Sikkema?29 September 2009, 13:39

The examples for cache-* are not complete and will not wok as is. The need a parameter to tell the fucntion which cache store should be used.

  1. opensipsctl fifo cache_remove password_user1

should be (for example)

  1. opensipsctl fifo cache_remove local password_user1

[By Bogdan] Thank you Andreas, I made the fix in the docs

(:commentboxchrono:)

to:

(:redirect Documentation/Interface-CoreMI-1-5 quiet=1:)

March 02, 2013, at 01:19 PM by bogdan -
Deleted lines 230-235:

(:nl:)>>messagehead<<

Sahil?01 March 2013, 12:16

OW!!! That's a very serious pboelrm ( 2 per second is so slow I really hoped to use lessfs for a general purpose backup filesystem and I do have directories with thousands of files. I wouldn't want to wait for a complete reimplementation such as btrfs 2.x, it's so sad.Wouldn't it be possible to cache some metadata content received from fuse, e.g. dedicate 50MB of RAM to cache last fuse received data, that so to avoid the round trip to fuse API each time? First lookup the cache, then if not there ask fuse, then periodically erase entries from the cache which are too old.

March 01, 2013, at 01:16 PM by Sahil - Comment added
Added lines 231-236:

(:nl:)>>messagehead<<

Sahil?01 March 2013, 12:16

OW!!! That's a very serious pboelrm ( 2 per second is so slow I really hoped to use lessfs for a general purpose backup filesystem and I do have directories with thousands of files. I wouldn't want to wait for a complete reimplementation such as btrfs 2.x, it's so sad.Wouldn't it be possible to cache some metadata content received from fuse, e.g. dedicate 50MB of RAM to cache last fuse received data, that so to avoid the round trip to fuse API each time? First lookup the cache, then if not there ask fuse, then periodically erase entries from the cache which are too old.

May 12, 2011, at 12:30 PM by bogdan - Comments Cleanup
Deleted lines 230-242:

(:nl:)>>messagehead<<

Jennis?10 May 2011, 06:17

Now I feel stupid. That's cleared it up for me

(:nl:)>>messagehead<<

Boss?11 May 2011, 17:51

In awe of that asnewr! Really cool!

May 11, 2011, at 06:51 PM by Boss - Comment added
Added lines 238-243:

(:nl:)>>messagehead<<

Boss?11 May 2011, 17:51

In awe of that asnewr! Really cool!

May 11, 2011, at 10:12 AM by bogdan - Cleanup
Changed line 235 from:

Now I feel stupid. That's cleaerd it up for me

to:

Now I feel stupid. That's cleared it up for me

Deleted lines 237-241:

(:nl:)>>messagehead<<

Greta?11 May 2011, 06:50

I'm not eisaly impressed. . . but that's impressing me! :)

May 11, 2011, at 07:50 AM by Greta - Comment added
Added lines 236-241:

(:nl:)>>messagehead<<

Greta?11 May 2011, 06:50

I'm not eisaly impressed. . . but that's impressing me! :)

May 10, 2011, at 07:17 AM by Jennis - Comment added
Added lines 231-236:

(:nl:)>>messagehead<<

Jennis?10 May 2011, 06:17

Now I feel stupid. That's cleaerd it up for me

November 10, 2010, at 09:52 AM by bogdan -
Added line 214:

Comments

February 18, 2010, at 12:26 PM by bogdan - not related to the topic
Deleted lines 229-234:

(:nl:)>>messagehead<<

Lvwenwen?21 October 2009, 02:46

Does opensips support eXosips or osips? If I want to use SIP UA designed by myself with eXosip and osip, is it possible to be available when UA register to opensips which is a SIP proxy? Could anybody give me some advice?

February 18, 2010, at 11:53 AM by bogdan -
February 18, 2010, at 11:53 AM by bogdan -
Changed line 186 from:
    # opensipsctl fifo cache_store password_user1 password
to:
    # opensipsctl fifo cache_store local password_user1 password
Changed line 198 from:
    # opensipsctl fifo cache_fetch password_user1
to:
    # opensipsctl fifo cache_fetch local password_user1
Changed line 209 from:
    # opensipsctl fifo cache_remove password_user1
to:
    # opensipsctl fifo cache_remove local password_user1
Added line 227:

[By Bogdan] Thank you Andreas, I made the fix in the docs

October 21, 2009, at 03:46 AM by Lvwenwen - Comment added
Added lines 227-233:

(:nl:)>>messagehead<<

Lvwenwen?21 October 2009, 02:46

Does opensips support eXosips or osips? If I want to use SIP UA designed by myself with eXosip and osip, is it possible to be available when UA register to opensips which is a SIP proxy? Could anybody give me some advice?

September 29, 2009, at 02:39 PM by Andreas Sikkema - Comment added
Added lines 215-227:

(:nl:)>>messagehead<<

Andreas Sikkema?29 September 2009, 13:39

The examples for cache-* are not complete and will not wok as is. The need a parameter to tell the fucntion which cache store should be used.

  1. opensipsctl fifo cache_remove password_user1

should be (for example)

  1. opensipsctl fifo cache_remove local password_user1
April 23, 2009, at 11:27 AM by bogdan -
Changed lines 1-3 from:

Resources -> Documentation -> CookBooks -> Core functions and parameters v1.5

to:

Resources -> Documentation -> CookBooks -> Core MI Functions v1.5


Changed lines 5-36 from:

This section lists the all the parameters and functions exported by OpenSIPS core for script usage (to be used in opensips.cfg)

This document is for OpenSIPS 1.5.x.

  1. Core keywords
  2. Core values
  3. Core parameters
  4. Core functions

Core Keywords

Keywords specific to SIP messages which can be used mainly in 'if' expressions.

af

The address family of the received SIP message. It is INET if the message was received over IPv4 or INET6 if the message was received over IPv6.

Exampe of usage:

    if(af==INET6) {
        log("Message received over IPv6 link\n");
    };

dst_ip

The IP of the local interface where the SIP message was received. When the proxy listens on many network interfaces, makes possible to detect which was the one that received the packet.

to:

MI (management interface) functions which are exported by OpenSIPS core.

This document is for OpenSIPS 1.5.x

arg

Returns the full list of arguments used when OpenSIPS was started. As in UNIX, the first argument is the name of executable binary.
Arguments: none
Output: multiple MI nodes where each node contains an argument. The MI nodes have no name, but only value.

Deleted lines 14-287:
   if(dst_ip==127.0.0.1) {
      log("message received on loopback interface\n");
   };

dst_port

The local port where the SIP packet was received. When OpenSIPS is listening on many ports, it is useful to learn which was the one that received the SIP packet.

Example of usage:

   if(dst_port==5061)
   {
       log("message was received on port 5061\n");
   };

from_uri

This script variable is a reference to the URI of 'From' header. It can be used to test 'From'- header URI value.

Example of usage:

    if(is_method("INVITE") && from_uri=~".*@opensips.org")
    {
        log("the caller is from opensips.org\n");
    };

method

The variable is a reference to the SIP method of the message.

Example of usage:

    if(method=="REGISTER")
    {
       log("this SIP request is a REGISTER message\n");
    };

msg:len

The variable is a reference to the size of the message. It can be used in 'if' constructs to test message's size.

Example of usage:

    if(msg:len>2048)
    {
        sl_send_reply("413", "message too large");
        exit;
    };

$retcode

It represents the value returned by last function executed (similar to $? from bash -- if you wish, you can use also $? in OpenSIPS config, both names '$retcode' and '$?' are supported). If tested after a call of a route, it is the value retuned by that route.

Example of usage:

   route {
       route(1);
       if($retcode==1)
       {
           log("The request is an INVITE\n");
       };
   }


   route[1] {
       if(is_method("INVITE"))
           return(1);
       return(2);
   }

proto

This variable can be used to test the transport protocol of the SIP message.

Example of usage:

    if(proto==UDP)
    {
        log("SIP message received over UDP\n");
    };

status

If used in onreply_route, this variable is a reference to the status code of the reply. If it used in a standard route block, the variable is a reference to the status of the last reply sent out for the current request.

Example of usage:

    if(status=="200")
    {
        log("this is a 200 OK reply\n");
    };

src_ip

Reference to source IP address of the SIP message.

Example of usage:

    if(src_ip==127.0.0.1)
    {
        log("the message was sent from localhost!\n");
    };

src_port

Reference to source port of the SIP message (from which port the message was sent by previous hop).

Example of usage:

    if(src_port==5061)
    {
        log("message sent from port 5061\n");
    }

to_uri

This variable can be used to test the value of URI from To header.

Example of usage:

  if(to_uri=~"sip:.+@opensips.org")
  {
      log("this is a request for opensips.org users\n");
  };

uri

This variable can be used to test the value of the request URI.

Example of usage:

    if(uri=~"sip:.+@opensips.org")
    {
        log("this is a request for opensips.org users\n");
    };

(:toc-back:)

Core Values

Values that can be used in 'if' expressions to check against Core Keywords

INET

This keyword can be used to test whether the SIP packet was received over an IPv4 connection.

Example of usage:

    if(af==INET)
    {
        log("the SIP message was received over IPv4\n");
    };

INET6

This keyword can be used to test whether the SIP packet was received over an IPv6 connection.

Example of usage:

  if(af==INET6)
  {
      log("the SIP message was received over IPv6\n");
  };

TCP

This keyword can be used to test the value of 'proto' and check whether the SIP packet was received over TCP or not.

Example of usage:

  if(proto==TCP)
  {
      log("the SIP message was received over TCP\n");
  };

UDP

This keyword can be used to test the value of 'proto' and check whether the SIP packet was received over UDP or not.

Example of usage:

  if(proto==UDP)
  {
      log("the SIP message was received over UDP\n");
  };

max_len

This keyword is set to the maximum size of an UDP packet. It can be used to test message's size.

Example of usage:

    if(msg:len>max_len)
    {
        sl_send_reply("413", "message too large to be forwarded over UDP without fragmentation");
        exit;
    }

myself

It is a reference to the list of local IP addresses, hostnames and aliases that has been set in OpenSIPS configuration file. This lists contain the domains served by OpenSIPS.

The variable can be used to test if the host part of an URI is in the list. The usefulness of this test is to select the messages that has to be processed locally or has to be forwarded to another server.

See "alias" to add hostnames,IP addresses and aliases to the list.

Example of usage:

    if(uri==myself) {
        log("the request is for local processing\n");
    };

null

Can be used in assignment to reset the value of a per-script variable or to delete an avp.

Example of usage:

    $avp(i:12) = null;
    $var(x) = null;

Core parameters

Global parameters that can be set in configuration file. Accepted values are, depending on the actual parameters strings, numbers and yes/ no. If you need to specify either "yes" or "no" as part of a string, wrap this in double quotes.

advertised_address

It can be an IP address or string and represents the address advertised in Via header and other destination lumps (e.g RR header). If empty or not set (default value) the socket address from where the request will be sent is used.

  WARNING: 
  - don't set it unless you know what you are doing (e.g. nat traversal)
  - you can set anything here, no check is made (e.g. foo.bar will be
  accepted even if foo.bar doesn't exist)

Example of usage:

    advertised_address="opensips.org"

advertised_port

The port advertised in Via header and other destination lumps (e.g. RR). If empty or not set (default value) the port from where the message will be sent is used. Same warnings as for 'advertised_address'.

Example of usage:

    advertised_port=5080

alias

Parameter to set alias hostnames for the server. It can be set many times, each value being added in a list to match the hostname when 'myself' is checked.

It is necessary to include the port (the port value used in the "port=" or "listen=" definitions) in the alias definition otherwise the loose_route() function will not work as expected for local forwards

Example of usage:

Changed lines 16-17 from:
    alias=other.domain.com:5060
    alias=another.domain.com:5060
to:
    # opensipsctl fifo arg
    ./opensips
    -f
    /etc/openser/test.cfg
Changed lines 23-28 from:

avp_aliases

Contains a multiple definition of aliases for AVP names.

Example of usage:

to:

debug [level]

Gets or sets the value of the debug core variable. You may use it to dynamically (at runtime) change or inspect the debug level of your OpenSIPS. If no argument is passed, the function will fetch the value of the debug level.
Arguments: debug level (-3...4)
Output: debug level (only when no argument is passed). The value will be returned as a single MI node with name "DEBUG"

Examples of usage:

Changed lines 32-34 from:
    avp_aliases="uuid=I:660;email=s:email_addr;fwd=i:753"
to:
    # opensipsctl fifo debug
    DEBUG:: 4
    # opensipsctl fifo debug 1
Changed lines 37-77 from:

auto_aliases

This parameter controls if aliases should be automatically discovered and added during fixing listening sockets. The auto discovered aliases are result of the DNS lookup (if listen is a name and not IP) or of a reverse DNS lookup on the listen IP.

Far backward compatibility reasons, the default value is "on".

Example of usage:

    auto_aliases=no
    auto_aliases=0

check_via

Check if the address in top most via of replies is local. Default value is 0 (check disabled).

Example of usage:

    check_via=1 

children

Number of children to fork for the UDP interfaces (one set for each interface - ip:port). Default value is 8.

Example of usage:

    children=16

chroot

The value must be a valid path in the system. If set, OpenSIPS will chroot (change root directory) to its value.

Example of usage:

    chroot=/other/fakeroot

debug

Set the debug level. Higher values make OpenSIPS to print more debug messages.

to:

kill

The command will terminate OpenSIPS (and internal shutdown).
Arguments: none
Output: none

Deleted line 43:
Changed lines 45-48 from:
    debug=3 -- print only important messages (like errors or more critical situations) 
    - recommended for running proxy as daemon

    debug=9 -- print a lot of debug messages - use it only when doing debugging sessions
to:
    # opensipsctl fifo kill
Changed lines 48-168 from:

The 'debug' parameter is usually used in concordance with 'log_stderror' parameter.

Value of 'debug' parameter can also be get and set dynamically using 'debug' Core MI function.

For more see: http://www.voice-system.ro/docs/ser-syslog/

disable_core_dump

Can be 'yes' or 'no'. By default core dump limits are set to unlimited or a high enough value. Set this config variable to 'yes' to disable core dump-ing (will set core limits to 0).

Default value is 'no'.

Example of usage:

    disable_core_dump=yes

disable_dns_blacklist

The DNS resolver, when configured with failover, can automatically store in a temporary blacklist the failed destinations. This will prevent (for a limited period of time) OpenSIPS to send requests to destination known as failed. So, the blacklist can be used as a memory for the DNS resolver.

The temporary blacklist created by DNS resolver is named "dns" and it is by default selected for usage (no need use the use_blacklist()) function. The rules from this list have a life time of 4 minutes - you can change it at compile time, from blacklists.h .

Can be 'yes' or 'no'. By default the blacklist is disabled (Default value is 'yes').

Example of usage:

    disable_dns_blacklist=no

disable_dns_failover

Can be 'yes' or 'no'. By default DNS-based failover is enabled. Set this config variable to 'yes' to disable the DNS-based failover. This is a global option, affecting the core and the modules also.

Default value is 'no'.

Example of usage:

    disable_dns_failover=yes

disable_tcp

Global parameter to disable TCP support in the SIP server. Default value is 'no'.

Example of usage:

    disable_tcp=yes

disable_tls

Global parameter to disable TLS support in the SIP server. Default value is 'yes'.

Example of usage:

    disable_tcp=no

dns

This parameter controls if the SIP server should attempt to lookup its own domain name in DNS. If this parameter is set to yes and the domain name is not in DNS a warning is printed on syslog and a "received=" field is added to the via header.

Default is no.

dns_retr_time

Time in seconds before retrying a dns request. Default value is system specific, depends also on the '/etc/resolv.conf' content (usually 5s).

Example of usage:

    dns_retr_time=3

dns_retr_no

Number of dns retransmissions before giving up. Default value is system specific, depends also on the '/etc/resolv.conf' content (usually 4).

Example of usage:

    dns_retr_no=3

dns_servers_no

How many dns servers from the ones defined in '/etc/resolv.conf' will be used. Default value is to use all of them.

Example of usage:

    dns_servers_no=2

dns_try_ipv6

Can be 'yes' or 'no'. If it is set to 'yes' and a DNS lookup fails, it will retry it for ipv6 (AAAA record). Default value is 'no'.

Example of usage:

    dns_try_ipv6=yes

dns_use_search_list

Can be 'yes' or 'no'. If set to 'no', the search list in '/etc/resolv.conf' will be ignored (=> fewer lookups => gives up faster). Default value is 'yes'.

HINT: even if you don't have a search list defined, setting this option to 'no' will still be "faster", because an empty search list is in fact search "" (so even if the search list is empty/missing there will still be 2 dns queries, eg. foo+'.' and foo+""+'.')

Example of usage:

    dns_use_search_list=no

dst_blacklist

Definition of a static (read-only) IP/destination blacklist. These lists can be selected from script (at runtime) to filter the outgoing requests, based on IP, protocol, port, etc.

Its primary purposes will be to prevent sending requests to critical IPs (like GWs) due DNS or to avoid sending to destinations that are known to be unavailable (temporary or permanent).

Example of usage:

to:

list_blacklists

The command lists all the defined (static or learned) blacklists from OpenSIPS.
Arguments: none
Output: an MI tree - first level (nodes named "List") will describe the list (name, owner, flags); Second level (nodes named "Rules) will describe the rules (blacklists) for each list (IP/mask, protocol, port, matching regexp, flags)

Examples of usage:

Changed lines 55-62 from:
   # filter out requests going to ips of my gws
   dst_blacklist = gw:{( tcp , 192.168.2.100 , 5060 , "" ),( any , 192.168.2.101 , 0 , "" )}
   # block requests going to "evil" networks
   dst_blacklist = net_filter:{ ( any , 192.168.1.100/255.255.255.0 , 0 , "" )}
   # block message requests with nasty words
   dst_blacklist = msg_filter:{ ( any , 192.168.20.0/255.255.255.0 , 0 , "MESSAGE*ugly_word" )}
   # block requests not going to a specific subnet
   dst_blacklist = net_filter2:{ !( any , 192.168.30.0/255.255.255.0 , 0 , "" )}
to:
    # opensipsctl fifo list_blacklists
Changed lines 58-91 from:

Each rule is defined by:

  • protocol : TCP, UDP, TLS or "any" for anything
  • port : number or 0 for any
  • ip/mask
  • test patter - is a filename like matching (see "man 3 fnmatch") applied on the outgoing request buffer (first_line+hdrs+body)

fork

If set to 'yes' the proxy will fork and run in daemon mode - one process will be created for each network interface the proxy listens to and for each protocol (TCP/UDP), multiplied with the value of 'children' parameter.

When set to 'no', the proxy will stay bound to the terminal and runs as single process. First interface is used for listening to.

Default value is 'yes'.

Example of usage:

    fork=no

group gid

The group id to run OpenSIPS.

Example of usage:

  group="opensips"

listen

Set the network addresses the SIP server should listen to. It can be an IP address, hostname or network interface id or combination of protocol:address:port (e.g., udp:10.10.10.10:5060). This parameter can be set multiple times in same configuration file, the server listening on all addresses specified.

Example of usage:

to:

ps

The command will list all all OpenSIPS processes, along with type and description.
Arguments: none
Output: multiple MI nodes (named "Process") - each node contains process ID (internal), PID (OS), Type and description

Examples of usage:

Changed lines 65-67 from:
    listen=10.10.10.10
    listen=eth1:5062
    listen=udp:10.10.10.10:5064
to:
    # opensipsctl fifo ps
    Process::  ID=0 PID=16224 Type=attendant
    Process::  ID=1 PID=16225 Type=SIP receiver udp:192.168.1.2:5060 
    Process::  ID=2 PID=16226 Type=timer
    Process::  ID=3 PID=16227 Type=MI FIFO
    Process::  ID=4 PID=16228 Type=TCP receiver
    Process::  ID=5 PID=16230 Type=TCP main
Changed lines 74-173 from:

If you omit this directive then the SIP server will listen on all interfaces. On start the SIP server reports all the interfaces that it is listening on. Even if you specify only UDP interfaces here, the server will start the TCP engine too. If you don't want this, you need to disable the TCP support completely with the core parameter disable_tcp.

log_facility

If OpenSIPS logs to syslog, you can control the facility for logging. Very useful when you want to divert all OpenSIPS logs to a different log file. See the man page syslog(3) for more details.

For more see: http://www.voice-system.ro/docs/ser-syslog/

Default value is LOG_DAEMON.

Example of usage:

    log_facility=LOG_LOCAL0

log_name

Set the id to be printed in syslog. The value must be a string and has effect only when OpenSIPS runs in daemon mode (fork=yes), after daemonize. Default value is argv[0].

Example of usage:

    log_name="osips-5070"

log_stderror

With this parameter you can make OpenSIPS to write log and debug messages to standard error. Possible values are:

- "yes" - write the messages to standard error

- "no" - write the messages to syslog

Default value is "no".

For more see: http://www.voice-system.ro/docs/ser-syslog/

Example of usage:

    log_stderror=yes

max_while_loops

The parameters set the value of maximum loops that can be done within a "while". Comes as a protection to avoid infinite loops in config file execution. Default is 100.

Example of usage:

    max_while_loops=200

maxbuffer

The size in bytes not to be exceeded during the auto-probing procedure of discovering the maximum buffer size for receiving UDP messages. Default value is 262144.

Example of usage:

    maxbuffer=65536

memlog

Log level to print memory debug info. It has be less than the value of 'debug' parameter if you want memory info to be logged. Default: memlog=L_DBG (4)

Example of usage:

    memlog=2

mcast_loopback

It can be 'yes' or 'no'. If set to 'yes', multicast datagram are sent over loopback. Default value is 'no'.

Example of usage:

    mcast_loopback=yes

mcast_ttl

Set the value for multicast ttl. Default value is OS specific (usually 1).

Example of usage:

    mcast_ttl=32

mhomed

Set the server to try to locate outbound interface on multihomed host. By default is not (0) - it is rather time consuming.

Example of usage:

    mhomed=1

mpath

Set the module search path. This can be used to simplify the loadmodule parameter

Example of usage:

to:

pwd

Prints the working directory of OpenSIPS instance.
Arguments: none
Output: a single MI node with name "WD" containing the working directory full path.

Examples of usage:

Changed lines 82-88 from:
    mpath="/usr/local/lib/opensips/modules"
    loadmodule "mysql.so"
    loadmodule "uri.so"
    loadmodule "uri_db.so"
    loadmodule "sl.so"
    loadmodule "tm.so"
    ...
to:
    # opensipsctl fifo pwd
    WD:: /
Changed lines 86-127 from:

open_files_limit

If set and bigger than the current open file limit, OpenSIPS will try to increase its open file limit to this number. Note: OpenSIPS must be started as root to be able to increase a limit past the hard limit (which, for open files, is 1024 on most systems).

Example of usage:

    open_files_limit=2048

port

The port the SIP server listens to. The default value for it is 5060.

Example of usage:

    port=5080

reply_to_via

If it is set to 1, any local reply is sent to the address advertised in top most Via of the request. Default value is 0 (off).

Example of usage:

    reply_to_via=0

rev_dns

This parameter controls if the SIP server should attempt to lookup its own IP address in DNS. If this parameter is set to yes and the IP address is not in DNS a warning is printed on syslog and a "received=" field is added to the via header.

Default is no.

server_header

The body of Server header field generated by OpenSIPS when it sends a request as UAS. It defaults to "OpenSIPS (<version> (<arch>/<os>))".

Example of usage:

to:

uptime

Prints various time information about OpenSIPS - when it started to run, for how long it runs.
Arguments: none
Output: three MI nodes: "Now" - current time; "Up since" - start time ; "Up time" - number of seconds since started.

Examples of usage:

Changed lines 94-97 from:

server_header="Server: My Company SIP Proxy"

to:
    # opensipsctl fifo uptime
    Now:: Mon Jul 21 17:41:03 2008
    Up since:: Mon Jul 21 17:36:33 2008
    Up time:: 270 [sec]
Changed lines 100-101 from:

Please note that you have to add the header name "Server:", otherwise OpenSIPS will just write a header like:

to:

version

Prints the version string of a runningOpenSIPS.
Arguments: none
Output: one MI node (named "Server") containing the version string.

Examples of usage:

Changed lines 107-108 from:

My Company SIP Proxy

to:
    # opensipsctl fifo version
    Server:: OpenSIPS (1.4.0dev14-notls (i386/linux))
Changed lines 112-227 from:

server_signature

This parameter controls the "Server" header in any locally generated message.

Example of usage:

     server_signature=no

If it is enabled (default=yes) a header is generated as in the following example:

     Server: OpenSIPS (0.9.5 (i386/linux))

sip_warning

Can be 0 or 1. If set to 1 (default value) a 'Warning' header is added to each rely generated by OpenSIPS. The header contains several details that help troubleshooting using the network traffic dumps.

Example of usage:

    sip_warning=0

tcp_children

Number of children processes to be created for reading from TCP connections. If no value is explicitly set, the same number of TCP children as UDP children (see "children" parameter) will be used.

Example of usage:

    tcp_children=4

tcp_accept_aliases

tcp_send_timeout

Time in seconds after a TCP connection will be closed if it is not available for writing in this interval (and OpenSIPS wants to send something on it).

Example of usage:

    tcp_send_timeout=3

tcp_connect_timeout

Time in seconds before an ongoing attempt to connect will be aborted.

Example of usage:

    tcp_connect_timeout=5

tcp_connection_lifetime!!!!

Lifetime in seconds for TCP sessions. TCP sessions which are inactive for >tcp_connection_lifetime will be closed by OpenSIPS. Default value is defined in tcp_conn.h: #define DEFAULT_TCP_CONNECTION_LIFETIME 120. Setting this value to 0 will close the TCP connection pretty quick ;-). You can also set the TCP lifetime to the expire value of the REGISTER by using the tcp_persistent_flag parameter of the registrar module.

Example of usage:

    tcp_connection_lifetime=3600

tcp_max_connections

maximum number of tcp connections (if the number is exceeded no new tcp connections will be accepted). Default is defined in tcp_conn.h: #define DEFAULT_TCP_MAX_CONNECTIONS 2048

Example of usage:

    tcp_max_connections=4096

tcp_poll_method

poll method used (by default the best one for the current OS is selected). For available types see io_wait.c and poll_types.h: none, poll, epoll_lt, epoll_et, sigio_rt, select, kqueue, /dev/poll

Example of usage:

    tcp_poll_method=select

tls_ca_list

tls_certificate

tls_ciphers_list

tls_domain

tls_handshake_timeout

tls_log

tls_method

tls_port_no

tls_private_key

tls_require_certificate

tls_send_timeout

tls_verify

tos

The TOS (Type Of Service) to be used for the sent IP packages (both TCP and UDP).

Example of usage:

to:

which

Prints all available MI commands from the queried OpenSIPSinstance.
Arguments: none
Output: multiple MI nodes (no name), each node containing (as value) the name of an available MI command. NOTE that the list of available MI commands may differ depending of what modules your OpenSIPS is using.

Examples of usage:

Changed lines 119-121 from:
    tos=IPTOS_LOWDELAY
    tos=0x10
    tos=IPTOS_RELIABILITY
to:
    # opensipsctl fifo which
    get_statistics
    reset_statistics
    uptime
    version
    pwd
    arg
    which
    ps
    kill
    debug
    list_blacklists
    ul_rm
    ul_rm_contact
    ul_dump
    ul_flush
    ul_add
    ul_show_contact
    nh_enable_ping
    nh_enable_rtpp
Changed lines 141-157 from:

user uid

The user id to run OpenSIPS (OpenSIPS will suid to it).

Example of usage:

    user="opensips"

user_agent_header

The body of User-Agent header field generated by OpenSIPS when it sends a request as UAC. It defaults to "OpenSIPS (<version> (<arch>/<os>))".

Example of usage:

to:

get_statistics

Prints the statistics (all, group or one) realtime values.
Arguments: input may be "all" - print all available statistics; "group:" - print only statistics from a certain group; "name" - print only this statistic. The OpenSIPS core defines the following groups: core, shmem; Modules export groups typically named like the module itself.
Output: list of MI nodes (no name) - each MI mode contains the name and value of a single statistic variable.

Examples of usage:

Changed lines 148-158 from:

user_agent_header="User-Agent: My Company SIP Proxy"

to:
    # opensipsctl fifo get_statistics rcv_requests
    core:rcv_requests = 35243
    # opensipsctl fifo get_statistics shmem:      
    shmem:total_size = 33554432
    shmem:used_size = 1686952
    shmem:real_used_size = 1704592
    shmem:max_used_size = 1704592
    shmem:free_size = 31849840
    shmem:fragments = 1
    # opensipsctl fifo get_statistics all
    ....
Changed lines 161-166 from:

Please note that you have to include the header name "User-Agent:" as OpenSIPS does not add it and you will get an erroneous header like:

to:

reset_statistics

Reset (to zero) the value of a statistic variable. Note that not all variables allow reset (depending of the nature of the information they carry - example "shmem:used_size").
Arguments: name of the variable to be reset.
Output: none.

Examples of usage:

Changed lines 168-172 from:

My Company SIP Proxy

to:
    # opensipsctl fifo get_statistics received_replies
    core:received_replies = 14543
    # opensipsctl fifo reset_statistics received_replies
    # opensipsctl fifo get_statistics received_replies
    core:received_replies = 0
Changed lines 176-180 from:

wdir

The working directory used by OpenSIPS at runtime. You might find it usefull when come to generating core files :)

Example of usage:

to:

cache_store

This command stores in a cache system a string value.
Arguments:
- cache system to use - for the cache system implemented by OpenSIPS module 'localcache' the value of this parameter should be 'local'
- the label to be associated with this value
- the string to be stored
Output: none.
Examples of usage:

Changed lines 186-188 from:
     wdir="/usr/local/opensips"
     or
     wdir=/usr/opensips_wd
to:
    # opensipsctl fifo cache_store password_user1 password
Changed lines 189-213 from:

Core Functions

Functions exported by core that can be used in route blocks.

add_local_rport()

Add 'rport' parameter to the Via header generated by server (see RFC3581 for its meaning). It affects only the current processed request.

Example of usage:

    add_local_rport()

append_branch()

Similarly to t_fork_to, it extends destination set by a new entry. The difference is that current URI is taken as new entry.

Without parameter, the function copies the current URI into a new branch. Thus, leaving the main branch (the URI) for further manipulation.

With a parameter, the function copies the URI in the parameter into a new branch. Thus, the current URI is not manipulated.

Note that it's not possible to append a new branch in "on_failure_route" block if a 6XX response has been previously received (it would be against RFC 3261).

Example of usage:

to:

cache_fetch

This command queries for a stored value.
Arguments:
- cache system to use - for the cache system implemented by OpenSIPS module 'localcache' the value of this parameter should be 'local'
- the label associated with the value
Output: MI tree containing the value if a record is found or 'Value not found' string otherwise.
Examples of usage:

Changed lines 198-243 from:
    # if someone calls B, the call should be forwarded to C too.
    #
    if (method=="INVITE" && uri=~"sip:B@xx.xxx.xx ")
    {
        # copy the current branch (branches[0]) into
        # a new branch (branches[1])
        append_branch();
        # all URI manipulation functions work on branches[0]
        # thus, URI manipulation does not touch the 
        # appended branch (branches[1])
        seturi("sip:C@domain");

        # now: branch 0 = C@domain
        #      branch 1 = B@xx.xx.xx.xx

        # and if you need a third destination ...

        # copy the current branch (branches[0]) into
        # a new branch (branches[2])
        append_branch();

        # all URI manipulation functions work on branches[0]
        # thus, URI manipulation does not touch the 
        # appended branch (branches[1-2])
        seturi("sip:D@domain");

        # now: branch 0 = D@domain
        #      branch 1 = B@xx.xx.xx.xx
        #      branch 2 = C@domain

        t_relay();
        exit;
    };

    # You could also use append_branch("sip:C@domain") which adds a branch with the new URI:


    if(method=="INVITE" && uri=~"sip:B@xx.xxx.xx ") {
        # append a new branch with the second destionation
        append_branch("sip:user@domain");
        # now: branch 0 = B@xx.xx.xx.xx
        # now: branch 1 = C@domain

        t_relay();
        exit;

}

to:
    # opensipsctl fifo cache_fetch password_user1
Changed lines 201-391 from:

break()

Since v0.10.0-dev3, 'break' can no longer be used to stop the execution of a route. The only place to use is to end a 'case' block in a 'switch' statement. 'return' must be now used instead of old 'break'.

'return' and 'break' have now a similar meaning as in c/shell.

drop()

Stop the execution of the configuration script and alter the implicit action which is done afterwards.

If the function is called in a 'branch_route' then the branch is discarded (implicit action for 'branch_route' is to forward the request).

If the function is called in a 'onreply_route' then any provisional reply is discarded (implicit action for 'onreply_route' is to send the reply upstream according to Via header).

Example of usage:

    onreply_route {
        if(status=="183") {
            drop();
        }
    }

exit()

Stop the execution of the configuration script -- it has the same behaviour as return(0). It does not affect the implicit action to be taken after script execution.

  route {
    if (route(2)) {
      xlog("L_NOTICE","method $rm is INVITE\n");
    } else {
      xlog("L_NOTICE","method is $rm\n");
    };
  }

  route[2] {
    if (is_method("INVITE")) {
      return(1);
    } else if (is_method("REGISTER")) {
      return(-1);
    } else if (is_method("MESSAGE")) {
      sl_send_reply("403","IM not allowed");
      exit;
    };
  }

force_rport()

Force_rport() adds the rport parameter to the first Via header. Thus, OpenSIPS will add the received IP port to the top most via header in the SIP message, even if the client does not indicate support for rport. This enables subsequent SIP messages to return to the proper port later on in a SIP transaction.

The rport parameter is defined in RFC 3581.

Example of usage:

    force_rport();

force_send_socket([proto:]address[:port])

Force OpenSIPS to send the message from the specified socket (it _must_ be one of the sockets OpenSIPS listens on). If the protocol doesn't match (e.g. UDP message "forced" to a TCP socket) the closest socket of the same protocol is used.

Example of usage:

    force_send_socket(10.10.10.10:5060);

force_tcp_alias()

force_tcp_alias(port)

adds a tcp port alias for the current connection (if tcp). Usefull if you want to send all the trafic to port_alias through the same connection this request came from [it could help for firewall or nat traversal]. With no parameters adds the port from the message via as the alias. When the "aliased" connection is closed (e.g. it's idle for too much time), all the port aliases are removed.

forward(destination)

Forward the SIP request to the given destination in stateless mode. This has the format of [proto:]host[:port]. Host can be an IP or hostname; supported protocols are UDP, TCP and TLS. (For TLS, you need to compile the TLS support into core). If proto or port are not specified, NAPTR and SRV lookups will be used to determine them (if possible).

If destination parameter is missing, the forward will be done based on RURI.

Example of usage:

    forward("10.0.0.10:5060");
    #or
    forward();

isdsturiset()

Test if the dst_uri field (next hop address) is set.

Example of usage:

    if(isdsturiset()) {
        log("dst_uri is set\n");
    };

isflagset(int)

Test if a flag is set for current processed message (if the flag value is 1). The value of the parameter can be in range of 0..31.

For more see http://www.voice-system.ro/docs/ser-flags/ or Flags Documentation.

Example of usage:

    if(isflagset(3)) {
        log("flag 3 is set\n");
    };

isbflagset([branch_idx,] flag_idx)

Test if a flag is set for a specific branch (if the flag value is 1). The value of the "flag_idx" parameter can be in range of 0..31. "branch_idx" identify the branch for which the flags are tested - it must be a positiv number. Branch index 0 refers to the RURI branch. If this parameter is missing, 0 branch index is used as default.

For more about script flags, see Flags Documentation.

Example of usage:

    if(isbflagset(1,3)) {
        log("flag 3 is set in branch 1\n");
    };

issflagset(flag_idx)

Test if a script flag is set (if the flag value is 1). The value of the "flag_idx" parameter can be in range of 0..31.

For more about script flags, see Flags Documentation.

Example of usage:

    if(issflagset(2)) {
        log("script flag 2 is set\n");
    };

log([level,] string)

Write text message to standard error terminal or syslog. You can specify the log level as first parameter.

For more see: http://www.voice-system.ro/docs/ser-syslog/

Example of usage:

    log("just some text message\n");

next_branches()

Adds to the request a new destination set that includes all highest priority class contacts ('q' value based) from the serialized branches (see serialize_branches()). If called from a route block, it rewrites the request uri with first contact and adds the remaining contacts as parallel branches. If called from failure route block, adds all contacts as parallel branches. All used contacts are removes the serialized branches.

Returns true if at least one contact was added for the request's destination set. False is return is nothing was done (no more serialized branches).

Example of usage:

    next_branches();

prefix(string)

Add the string parameter in front of username in R-URI.

Example of usage:

    prefix("00");

pv_printf(pv, string)

Prints the formatted 'string' in the AVP 'pv'. The 'string' parameter can include any pseudo-variable defined in OpenSIPS. The 'pv' can be any writable pseudo-variable -- e.g.,: AVPs, VARs, $ru, $rU, $rd, $du, $br, $fs.

It was extended from the avp_printf(...) function exported in previous versions by the avpops module. Starting with 1.3.0, avp_printf(...) is just an alias to pv_printf(...).

Example of usage:

    pv_printf("$var(x)", "r-uri: $ru");
    pv_printf("$avp(i:3)", "from uri: $fu");

return(int)

The return() function allows you to return any integer value from a called route() block. You can test the value returned by a route using "$retcode" variable.

return(0) is same as "exit()";

In bool expressions:

  * Negative and ZERO is FALSE
  * Positive is TRUE

Example usage:

to:

cache_remove

This command removes a record from the cache system.
Arguments:
- cache system to use
- the label associated with the stored value
Output: None.
Examples of usage:

Changed lines 209-215 from:

route {

  if (route(2)) {
    xlog("L_NOTICE","method $rm is INVITE\n");
  } else {
    xlog("L_NOTICE","method $rm is REGISTER\n");
  };

}

to:
    # opensipsctl fifo cache_remove password_user1
Changed lines 211-441 from:
route[2] {
  if (is_method("INVITE")) {
    return(1);
  } else if (is_method("REGISTER")) {
    return(-1);
  } else {
    return(0);
  };
}

resetdsturi()

Set the value of dst_uri filed to NULL. dst_uri field is usually set after loose_route() or lookup("location") if the contact address is behind a NAT.

Example of usage:

    resetdsturi();

resetflag(int)

Reset a flag for current processed message (set the value to 0). The value of the parameter can be in range of 0..31.

For more see http://www.voice-system.ro/docs/ser-flags/ or Flags Documentation.

Example of usage:

    resetflag(3);

resetbflag([branch_idx,] flag_idx)

Reset a flag for a specific branch (set flag to value 0). The value of the "flag_idx" parameter can be in range of 0..31. "branch_idx" identify the branch for which the flag is reset - it must be a positiv number. Branch index 0 refers to the RURI branch. If this parameter is missing, 0 branch index is used as default.

For more about script flags, see Flags Documentation.

Example of usage:

    resetbflag(1,3);
    # or
    resetbflag(3); # same with resetbflag(0,3)

resetsflag(flag_idx)

Reset a script flag (set flag to value 0). The value of the "flag_idx" parameter can be in range of 0..31.

For more about script flags, see Flags Documentation.

Example of usage:

    resetsflag(2);

revert_uri()

Set the R-URI to the value of the R-URI as it was when the request was received by server (undo all changes of R-URI).

Example of usage:

    revert_uri();

rewritehost() / sethost()

Rewrite the domain part of the R-URI with the value of function's parameter. Other parts of the R-URI like username, port and URI parameters remain unchanged.

Example of usage:

    rewritehost("1.2.3.4");

rewritehostport() / sethostport()

Rewrite the domain part and port of the R-URI with the value of function's parameter. Other parts of the R-URI like username and URI parameters remain unchanged.

Example of usage:

    rewritehostport("1.2.3.4:5080");

rewriteuser(string) / setuser(string)

Rewrite the user part of the R-URI with the value of function's parameter.

Example of usage:

    rewriteuser("newuser");

rewriteuserpass() / setuserpass()

Rewrite the password part of the R-URI with the value of function's parameter.

Example of usage:

    rewriteuserpass("my_secret_passwd");

rewriteport() / setport()

Rewrites/sets the port part of the R-URI with the value of function's parameter.

Example of usage:

    rewriteport("5070");

rewriteuri(str) / seturi(str)

Rewrite the request URI.

Example of usage:

    rewriteuri("sip:test@opensips.org");

send(destination)

Send the original SIP message to a specific destination in stateless mode. This is definied as [proto:]host[:port]. No changes are applied to received message, no Via header is added. Host can be an IP or hostname; supported protocols are UDP, TCP and TLS. (For TLS, you need to compile the TLS support into core). If proto or port are not specified, NAPTR and SRV lookups will be used to determine them (if possible).

Parameter is mandatory and has string format.

Example of usage:

   send("udp:10.10.10.10:5070");

serialize_branches(clear)

Takes all the branches added for parallel forking (with append_branch() and including the current RURI) and prepare them for serial forking. The ordering is done in increasing "q" order. The serialized branches are internally stored in AVPs - you will be able to fetch and use via the "next_branches()" function.
NOTE that (according to RFC3261), the branches with the same "q" value will still be parallel forked during a certain step in the serial forking (it will result a combination of serial with parallel forking).
NOTE that this function is not changing RURI in the messages - it is just converting from parallel to serial branches (preparing branches).

If "clear" is set to non-zero, all previous results of another "serialize_branches" (serialized branches which were not yet used) will be deleted before setting the new serialized branches.

Example of usage:

   serialize_branches(1);

set_advertised_address(ip|string)

Same as 'advertised_address' but it affects only the current message. It has priority if 'advertised_address' is also set.

Example of usage:

    set_advertised_address("opensips.org");

set_advertised_port(int)

Same as 'advertised_port' but it affects only the current message. It has priority over 'advertised_port'.

Example of usage:

    set_advertised_port(5080);

setdebug([level])

Changes the debug level of the current process from script. If called without the parameter then the debug level of the current process will be reset to the global level. If the debug level of the current process is changed then changing the global debug level (using MI function) does not affect it, so be careful and make sure to reset the process debug level when you are done. This function is very helpful if you are tracing and debugging only a specific piece of code.

Example of usage:

    debug= -1 # errors only
    .....
    {
      ......
      setdebug(4); # set the debug level of the current process to DBG
      uac_replace_from(....);
      setdebug(); # reset the debug level of the current process to the global level
      .......
    }

setdsturi(string)

Explicitely set the dst_uri field to the value of the paramater. The parameter has to be a valid SIP URI.

Example of usage:

    setdsturi("sip:10.10.10.10:5090");

setflag(int)

Set a flag for current processed message. The value of the parameter can be in range of 0..31. The flags are used to mark the message for special processing (e.g., accounting) or to keep some state (e.g., message authenticated).

For more see http://www.voice-system.ro/docs/ser-flags/ .

Example of usage:

    setflag(3);

setbflag([branch_idx,] flag_idx)

Set a flag for a specific branch (set flag to value 1). The value of the "flag_idx" parameter can be in range of 0..31. "branch_idx" identify the branch for which the flag is set - it must be a positiv number. Branch index 0 refers to the RURI branch. If this parameter is missing, 0 branch index is used as default.

For more about script flags, see Flags Documentation.

Example of usage:

    setbflag(1,3);
    # or
    setbflag(3); # same with setbflag(0,3)

setsflag(flag_idx)

Set a script flag (set flag to value 0). The value of the "flag_idx" parameter can be in range of 0..31.

For more about script flags, see Flags Documentation.

Example of usage:

    setsflag(2);

strip(int)

Strip the first N-th characters from username of R-URI (N is the value of the parameter).

Example of usage:

    strip(3);

strip_tail(int)

Strip the last N-th characters from username of R-URI (N is the value of the parameter).

Example of usage:

  strip_tail(3);
to:

(:commentboxchrono:)

April 23, 2009, at 11:18 AM by bogdan -
Added lines 1-1376:

Resources -> Documentation -> CookBooks -> Core functions and parameters v1.5

(:toc-float Table of Content:) This section lists the all the parameters and functions exported by OpenSIPS core for script usage (to be used in opensips.cfg)

This document is for OpenSIPS 1.5.x.

  1. Core keywords
  2. Core values
  3. Core parameters
  4. Core functions

Core Keywords

Keywords specific to SIP messages which can be used mainly in 'if' expressions.

af

The address family of the received SIP message. It is INET if the message was received over IPv4 or INET6 if the message was received over IPv6.

Exampe of usage:

    if(af==INET6) {
        log("Message received over IPv6 link\n");
    };

dst_ip

The IP of the local interface where the SIP message was received. When the proxy listens on many network interfaces, makes possible to detect which was the one that received the packet.

Example of usage:

   if(dst_ip==127.0.0.1) {
      log("message received on loopback interface\n");
   };

dst_port

The local port where the SIP packet was received. When OpenSIPS is listening on many ports, it is useful to learn which was the one that received the SIP packet.

Example of usage:

   if(dst_port==5061)
   {
       log("message was received on port 5061\n");
   };

from_uri

This script variable is a reference to the URI of 'From' header. It can be used to test 'From'- header URI value.

Example of usage:

    if(is_method("INVITE") && from_uri=~".*@opensips.org")
    {
        log("the caller is from opensips.org\n");
    };

method

The variable is a reference to the SIP method of the message.

Example of usage:

    if(method=="REGISTER")
    {
       log("this SIP request is a REGISTER message\n");
    };

msg:len

The variable is a reference to the size of the message. It can be used in 'if' constructs to test message's size.

Example of usage:

    if(msg:len>2048)
    {
        sl_send_reply("413", "message too large");
        exit;
    };

$retcode

It represents the value returned by last function executed (similar to $? from bash -- if you wish, you can use also $? in OpenSIPS config, both names '$retcode' and '$?' are supported). If tested after a call of a route, it is the value retuned by that route.

Example of usage:

   route {
       route(1);
       if($retcode==1)
       {
           log("The request is an INVITE\n");
       };
   }


   route[1] {
       if(is_method("INVITE"))
           return(1);
       return(2);
   }

proto

This variable can be used to test the transport protocol of the SIP message.

Example of usage:

    if(proto==UDP)
    {
        log("SIP message received over UDP\n");
    };

status

If used in onreply_route, this variable is a reference to the status code of the reply. If it used in a standard route block, the variable is a reference to the status of the last reply sent out for the current request.

Example of usage:

    if(status=="200")
    {
        log("this is a 200 OK reply\n");
    };

src_ip

Reference to source IP address of the SIP message.

Example of usage:

    if(src_ip==127.0.0.1)
    {
        log("the message was sent from localhost!\n");
    };

src_port

Reference to source port of the SIP message (from which port the message was sent by previous hop).

Example of usage:

    if(src_port==5061)
    {
        log("message sent from port 5061\n");
    }

to_uri

This variable can be used to test the value of URI from To header.

Example of usage:

  if(to_uri=~"sip:.+@opensips.org")
  {
      log("this is a request for opensips.org users\n");
  };

uri

This variable can be used to test the value of the request URI.

Example of usage:

    if(uri=~"sip:.+@opensips.org")
    {
        log("this is a request for opensips.org users\n");
    };

(:toc-back:)

Core Values

Values that can be used in 'if' expressions to check against Core Keywords

INET

This keyword can be used to test whether the SIP packet was received over an IPv4 connection.

Example of usage:

    if(af==INET)
    {
        log("the SIP message was received over IPv4\n");
    };

INET6

This keyword can be used to test whether the SIP packet was received over an IPv6 connection.

Example of usage:

  if(af==INET6)
  {
      log("the SIP message was received over IPv6\n");
  };

TCP

This keyword can be used to test the value of 'proto' and check whether the SIP packet was received over TCP or not.

Example of usage:

  if(proto==TCP)
  {
      log("the SIP message was received over TCP\n");
  };

UDP

This keyword can be used to test the value of 'proto' and check whether the SIP packet was received over UDP or not.

Example of usage:

  if(proto==UDP)
  {
      log("the SIP message was received over UDP\n");
  };

max_len

This keyword is set to the maximum size of an UDP packet. It can be used to test message's size.

Example of usage:

    if(msg:len>max_len)
    {
        sl_send_reply("413", "message too large to be forwarded over UDP without fragmentation");
        exit;
    }

myself

It is a reference to the list of local IP addresses, hostnames and aliases that has been set in OpenSIPS configuration file. This lists contain the domains served by OpenSIPS.

The variable can be used to test if the host part of an URI is in the list. The usefulness of this test is to select the messages that has to be processed locally or has to be forwarded to another server.

See "alias" to add hostnames,IP addresses and aliases to the list.

Example of usage:

    if(uri==myself) {
        log("the request is for local processing\n");
    };

null

Can be used in assignment to reset the value of a per-script variable or to delete an avp.

Example of usage:

    $avp(i:12) = null;
    $var(x) = null;

Core parameters

Global parameters that can be set in configuration file. Accepted values are, depending on the actual parameters strings, numbers and yes/ no. If you need to specify either "yes" or "no" as part of a string, wrap this in double quotes.

advertised_address

It can be an IP address or string and represents the address advertised in Via header and other destination lumps (e.g RR header). If empty or not set (default value) the socket address from where the request will be sent is used.

  WARNING: 
  - don't set it unless you know what you are doing (e.g. nat traversal)
  - you can set anything here, no check is made (e.g. foo.bar will be
  accepted even if foo.bar doesn't exist)

Example of usage:

    advertised_address="opensips.org"

advertised_port

The port advertised in Via header and other destination lumps (e.g. RR). If empty or not set (default value) the port from where the message will be sent is used. Same warnings as for 'advertised_address'.

Example of usage:

    advertised_port=5080

alias

Parameter to set alias hostnames for the server. It can be set many times, each value being added in a list to match the hostname when 'myself' is checked.

It is necessary to include the port (the port value used in the "port=" or "listen=" definitions) in the alias definition otherwise the loose_route() function will not work as expected for local forwards

Example of usage:

    alias=other.domain.com:5060
    alias=another.domain.com:5060

avp_aliases

Contains a multiple definition of aliases for AVP names.

Example of usage:

    avp_aliases="uuid=I:660;email=s:email_addr;fwd=i:753"

auto_aliases

This parameter controls if aliases should be automatically discovered and added during fixing listening sockets. The auto discovered aliases are result of the DNS lookup (if listen is a name and not IP) or of a reverse DNS lookup on the listen IP.

Far backward compatibility reasons, the default value is "on".

Example of usage:

    auto_aliases=no
    auto_aliases=0

check_via

Check if the address in top most via of replies is local. Default value is 0 (check disabled).

Example of usage:

    check_via=1 

children

Number of children to fork for the UDP interfaces (one set for each interface - ip:port). Default value is 8.

Example of usage:

    children=16

chroot

The value must be a valid path in the system. If set, OpenSIPS will chroot (change root directory) to its value.

Example of usage:

    chroot=/other/fakeroot

debug

Set the debug level. Higher values make OpenSIPS to print more debug messages.

Examples of usage:

    debug=3 -- print only important messages (like errors or more critical situations) 
    - recommended for running proxy as daemon

    debug=9 -- print a lot of debug messages - use it only when doing debugging sessions

The 'debug' parameter is usually used in concordance with 'log_stderror' parameter.

Value of 'debug' parameter can also be get and set dynamically using 'debug' Core MI function.

For more see: http://www.voice-system.ro/docs/ser-syslog/

disable_core_dump

Can be 'yes' or 'no'. By default core dump limits are set to unlimited or a high enough value. Set this config variable to 'yes' to disable core dump-ing (will set core limits to 0).

Default value is 'no'.

Example of usage:

    disable_core_dump=yes

disable_dns_blacklist

The DNS resolver, when configured with failover, can automatically store in a temporary blacklist the failed destinations. This will prevent (for a limited period of time) OpenSIPS to send requests to destination known as failed. So, the blacklist can be used as a memory for the DNS resolver.

The temporary blacklist created by DNS resolver is named "dns" and it is by default selected for usage (no need use the use_blacklist()) function. The rules from this list have a life time of 4 minutes - you can change it at compile time, from blacklists.h .

Can be 'yes' or 'no'. By default the blacklist is disabled (Default value is 'yes').

Example of usage:

    disable_dns_blacklist=no

disable_dns_failover

Can be 'yes' or 'no'. By default DNS-based failover is enabled. Set this config variable to 'yes' to disable the DNS-based failover. This is a global option, affecting the core and the modules also.

Default value is 'no'.

Example of usage:

    disable_dns_failover=yes

disable_tcp

Global parameter to disable TCP support in the SIP server. Default value is 'no'.

Example of usage:

    disable_tcp=yes

disable_tls

Global parameter to disable TLS support in the SIP server. Default value is 'yes'.

Example of usage:

    disable_tcp=no

dns

This parameter controls if the SIP server should attempt to lookup its own domain name in DNS. If this parameter is set to yes and the domain name is not in DNS a warning is printed on syslog and a "received=" field is added to the via header.

Default is no.

dns_retr_time

Time in seconds before retrying a dns request. Default value is system specific, depends also on the '/etc/resolv.conf' content (usually 5s).

Example of usage:

    dns_retr_time=3

dns_retr_no

Number of dns retransmissions before giving up. Default value is system specific, depends also on the '/etc/resolv.conf' content (usually 4).

Example of usage:

    dns_retr_no=3

dns_servers_no

How many dns servers from the ones defined in '/etc/resolv.conf' will be used. Default value is to use all of them.

Example of usage:

    dns_servers_no=2

dns_try_ipv6

Can be 'yes' or 'no'. If it is set to 'yes' and a DNS lookup fails, it will retry it for ipv6 (AAAA record). Default value is 'no'.

Example of usage:

    dns_try_ipv6=yes

dns_use_search_list

Can be 'yes' or 'no'. If set to 'no', the search list in '/etc/resolv.conf' will be ignored (=> fewer lookups => gives up faster). Default value is 'yes'.

HINT: even if you don't have a search list defined, setting this option to 'no' will still be "faster", because an empty search list is in fact search "" (so even if the search list is empty/missing there will still be 2 dns queries, eg. foo+'.' and foo+""+'.')

Example of usage:

    dns_use_search_list=no

dst_blacklist

Definition of a static (read-only) IP/destination blacklist. These lists can be selected from script (at runtime) to filter the outgoing requests, based on IP, protocol, port, etc.

Its primary purposes will be to prevent sending requests to critical IPs (like GWs) due DNS or to avoid sending to destinations that are known to be unavailable (temporary or permanent).

Example of usage:

   # filter out requests going to ips of my gws
   dst_blacklist = gw:{( tcp , 192.168.2.100 , 5060 , "" ),( any , 192.168.2.101 , 0 , "" )}
   # block requests going to "evil" networks
   dst_blacklist = net_filter:{ ( any , 192.168.1.100/255.255.255.0 , 0 , "" )}
   # block message requests with nasty words
   dst_blacklist = msg_filter:{ ( any , 192.168.20.0/255.255.255.0 , 0 , "MESSAGE*ugly_word" )}
   # block requests not going to a specific subnet
   dst_blacklist = net_filter2:{ !( any , 192.168.30.0/255.255.255.0 , 0 , "" )}

Each rule is defined by:

  • protocol : TCP, UDP, TLS or "any" for anything
  • port : number or 0 for any
  • ip/mask
  • test patter - is a filename like matching (see "man 3 fnmatch") applied on the outgoing request buffer (first_line+hdrs+body)

fork

If set to 'yes' the proxy will fork and run in daemon mode - one process will be created for each network interface the proxy listens to and for each protocol (TCP/UDP), multiplied with the value of 'children' parameter.

When set to 'no', the proxy will stay bound to the terminal and runs as single process. First interface is used for listening to.

Default value is 'yes'.

Example of usage:

    fork=no

group gid

The group id to run OpenSIPS.

Example of usage:

  group="opensips"

listen

Set the network addresses the SIP server should listen to. It can be an IP address, hostname or network interface id or combination of protocol:address:port (e.g., udp:10.10.10.10:5060). This parameter can be set multiple times in same configuration file, the server listening on all addresses specified.

Example of usage:

    listen=10.10.10.10
    listen=eth1:5062
    listen=udp:10.10.10.10:5064

If you omit this directive then the SIP server will listen on all interfaces. On start the SIP server reports all the interfaces that it is listening on. Even if you specify only UDP interfaces here, the server will start the TCP engine too. If you don't want this, you need to disable the TCP support completely with the core parameter disable_tcp.

log_facility

If OpenSIPS logs to syslog, you can control the facility for logging. Very useful when you want to divert all OpenSIPS logs to a different log file. See the man page syslog(3) for more details.

For more see: http://www.voice-system.ro/docs/ser-syslog/

Default value is LOG_DAEMON.

Example of usage:

    log_facility=LOG_LOCAL0

log_name

Set the id to be printed in syslog. The value must be a string and has effect only when OpenSIPS runs in daemon mode (fork=yes), after daemonize. Default value is argv[0].

Example of usage:

    log_name="osips-5070"

log_stderror

With this parameter you can make OpenSIPS to write log and debug messages to standard error. Possible values are:

- "yes" - write the messages to standard error

- "no" - write the messages to syslog

Default value is "no".

For more see: http://www.voice-system.ro/docs/ser-syslog/

Example of usage:

    log_stderror=yes

max_while_loops

The parameters set the value of maximum loops that can be done within a "while". Comes as a protection to avoid infinite loops in config file execution. Default is 100.

Example of usage:

    max_while_loops=200

maxbuffer

The size in bytes not to be exceeded during the auto-probing procedure of discovering the maximum buffer size for receiving UDP messages. Default value is 262144.

Example of usage:

    maxbuffer=65536

memlog

Log level to print memory debug info. It has be less than the value of 'debug' parameter if you want memory info to be logged. Default: memlog=L_DBG (4)

Example of usage:

    memlog=2

mcast_loopback

It can be 'yes' or 'no'. If set to 'yes', multicast datagram are sent over loopback. Default value is 'no'.

Example of usage:

    mcast_loopback=yes

mcast_ttl

Set the value for multicast ttl. Default value is OS specific (usually 1).

Example of usage:

    mcast_ttl=32

mhomed

Set the server to try to locate outbound interface on multihomed host. By default is not (0) - it is rather time consuming.

Example of usage:

    mhomed=1

mpath

Set the module search path. This can be used to simplify the loadmodule parameter

Example of usage:

    mpath="/usr/local/lib/opensips/modules"
    loadmodule "mysql.so"
    loadmodule "uri.so"
    loadmodule "uri_db.so"
    loadmodule "sl.so"
    loadmodule "tm.so"
    ...

open_files_limit

If set and bigger than the current open file limit, OpenSIPS will try to increase its open file limit to this number. Note: OpenSIPS must be started as root to be able to increase a limit past the hard limit (which, for open files, is 1024 on most systems).

Example of usage:

    open_files_limit=2048

port

The port the SIP server listens to. The default value for it is 5060.

Example of usage:

    port=5080

reply_to_via

If it is set to 1, any local reply is sent to the address advertised in top most Via of the request. Default value is 0 (off).

Example of usage:

    reply_to_via=0

rev_dns

This parameter controls if the SIP server should attempt to lookup its own IP address in DNS. If this parameter is set to yes and the IP address is not in DNS a warning is printed on syslog and a "received=" field is added to the via header.

Default is no.

server_header

The body of Server header field generated by OpenSIPS when it sends a request as UAS. It defaults to "OpenSIPS (<version> (<arch>/<os>))".

Example of usage:

server_header="Server: My Company SIP Proxy"

Please note that you have to add the header name "Server:", otherwise OpenSIPS will just write a header like:

My Company SIP Proxy

server_signature

This parameter controls the "Server" header in any locally generated message.

Example of usage:

     server_signature=no

If it is enabled (default=yes) a header is generated as in the following example:

     Server: OpenSIPS (0.9.5 (i386/linux))

sip_warning

Can be 0 or 1. If set to 1 (default value) a 'Warning' header is added to each rely generated by OpenSIPS. The header contains several details that help troubleshooting using the network traffic dumps.

Example of usage:

    sip_warning=0

tcp_children

Number of children processes to be created for reading from TCP connections. If no value is explicitly set, the same number of TCP children as UDP children (see "children" parameter) will be used.

Example of usage:

    tcp_children=4

tcp_accept_aliases

tcp_send_timeout

Time in seconds after a TCP connection will be closed if it is not available for writing in this interval (and OpenSIPS wants to send something on it).

Example of usage:

    tcp_send_timeout=3

tcp_connect_timeout

Time in seconds before an ongoing attempt to connect will be aborted.

Example of usage:

    tcp_connect_timeout=5

tcp_connection_lifetime!!!!

Lifetime in seconds for TCP sessions. TCP sessions which are inactive for >tcp_connection_lifetime will be closed by OpenSIPS. Default value is defined in tcp_conn.h: #define DEFAULT_TCP_CONNECTION_LIFETIME 120. Setting this value to 0 will close the TCP connection pretty quick ;-). You can also set the TCP lifetime to the expire value of the REGISTER by using the tcp_persistent_flag parameter of the registrar module.

Example of usage:

    tcp_connection_lifetime=3600

tcp_max_connections

maximum number of tcp connections (if the number is exceeded no new tcp connections will be accepted). Default is defined in tcp_conn.h: #define DEFAULT_TCP_MAX_CONNECTIONS 2048

Example of usage:

    tcp_max_connections=4096

tcp_poll_method

poll method used (by default the best one for the current OS is selected). For available types see io_wait.c and poll_types.h: none, poll, epoll_lt, epoll_et, sigio_rt, select, kqueue, /dev/poll

Example of usage:

    tcp_poll_method=select

tls_ca_list

tls_certificate

tls_ciphers_list

tls_domain

tls_handshake_timeout

tls_log

tls_method

tls_port_no

tls_private_key

tls_require_certificate

tls_send_timeout

tls_verify

tos

The TOS (Type Of Service) to be used for the sent IP packages (both TCP and UDP).

Example of usage:

    tos=IPTOS_LOWDELAY
    tos=0x10
    tos=IPTOS_RELIABILITY

user uid

The user id to run OpenSIPS (OpenSIPS will suid to it).

Example of usage:

    user="opensips"

user_agent_header

The body of User-Agent header field generated by OpenSIPS when it sends a request as UAC. It defaults to "OpenSIPS (<version> (<arch>/<os>))".

Example of usage:

user_agent_header="User-Agent: My Company SIP Proxy"

Please note that you have to include the header name "User-Agent:" as OpenSIPS does not add it and you will get an erroneous header like:

My Company SIP Proxy

wdir

The working directory used by OpenSIPS at runtime. You might find it usefull when come to generating core files :)

Example of usage:

     wdir="/usr/local/opensips"
     or
     wdir=/usr/opensips_wd

Core Functions

Functions exported by core that can be used in route blocks.

add_local_rport()

Add 'rport' parameter to the Via header generated by server (see RFC3581 for its meaning). It affects only the current processed request.

Example of usage:

    add_local_rport()

append_branch()

Similarly to t_fork_to, it extends destination set by a new entry. The difference is that current URI is taken as new entry.

Without parameter, the function copies the current URI into a new branch. Thus, leaving the main branch (the URI) for further manipulation.

With a parameter, the function copies the URI in the parameter into a new branch. Thus, the current URI is not manipulated.

Note that it's not possible to append a new branch in "on_failure_route" block if a 6XX response has been previously received (it would be against RFC 3261).

Example of usage:

    # if someone calls B, the call should be forwarded to C too.
    #
    if (method=="INVITE" && uri=~"sip:B@xx.xxx.xx ")
    {
        # copy the current branch (branches[0]) into
        # a new branch (branches[1])
        append_branch();
        # all URI manipulation functions work on branches[0]
        # thus, URI manipulation does not touch the 
        # appended branch (branches[1])
        seturi("sip:C@domain");

        # now: branch 0 = C@domain
        #      branch 1 = B@xx.xx.xx.xx

        # and if you need a third destination ...

        # copy the current branch (branches[0]) into
        # a new branch (branches[2])
        append_branch();

        # all URI manipulation functions work on branches[0]
        # thus, URI manipulation does not touch the 
        # appended branch (branches[1-2])
        seturi("sip:D@domain");

        # now: branch 0 = D@domain
        #      branch 1 = B@xx.xx.xx.xx
        #      branch 2 = C@domain

        t_relay();
        exit;
    };

    # You could also use append_branch("sip:C@domain") which adds a branch with the new URI:


    if(method=="INVITE" && uri=~"sip:B@xx.xxx.xx ") {
        # append a new branch with the second destionation
        append_branch("sip:user@domain");
        # now: branch 0 = B@xx.xx.xx.xx
        # now: branch 1 = C@domain

        t_relay();
        exit;
}

break()

Since v0.10.0-dev3, 'break' can no longer be used to stop the execution of a route. The only place to use is to end a 'case' block in a 'switch' statement. 'return' must be now used instead of old 'break'.

'return' and 'break' have now a similar meaning as in c/shell.

drop()

Stop the execution of the configuration script and alter the implicit action which is done afterwards.

If the function is called in a 'branch_route' then the branch is discarded (implicit action for 'branch_route' is to forward the request).

If the function is called in a 'onreply_route' then any provisional reply is discarded (implicit action for 'onreply_route' is to send the reply upstream according to Via header).

Example of usage:

    onreply_route {
        if(status=="183") {
            drop();
        }
    }

exit()

Stop the execution of the configuration script -- it has the same behaviour as return(0). It does not affect the implicit action to be taken after script execution.

  route {
    if (route(2)) {
      xlog("L_NOTICE","method $rm is INVITE\n");
    } else {
      xlog("L_NOTICE","method is $rm\n");
    };
  }

  route[2] {
    if (is_method("INVITE")) {
      return(1);
    } else if (is_method("REGISTER")) {
      return(-1);
    } else if (is_method("MESSAGE")) {
      sl_send_reply("403","IM not allowed");
      exit;
    };
  }

force_rport()

Force_rport() adds the rport parameter to the first Via header. Thus, OpenSIPS will add the received IP port to the top most via header in the SIP message, even if the client does not indicate support for rport. This enables subsequent SIP messages to return to the proper port later on in a SIP transaction.

The rport parameter is defined in RFC 3581.

Example of usage:

    force_rport();

force_send_socket([proto:]address[:port])

Force OpenSIPS to send the message from the specified socket (it _must_ be one of the sockets OpenSIPS listens on). If the protocol doesn't match (e.g. UDP message "forced" to a TCP socket) the closest socket of the same protocol is used.

Example of usage:

    force_send_socket(10.10.10.10:5060);

force_tcp_alias()

force_tcp_alias(port)

adds a tcp port alias for the current connection (if tcp). Usefull if you want to send all the trafic to port_alias through the same connection this request came from [it could help for firewall or nat traversal]. With no parameters adds the port from the message via as the alias. When the "aliased" connection is closed (e.g. it's idle for too much time), all the port aliases are removed.

forward(destination)

Forward the SIP request to the given destination in stateless mode. This has the format of [proto:]host[:port]. Host can be an IP or hostname; supported protocols are UDP, TCP and TLS. (For TLS, you need to compile the TLS support into core). If proto or port are not specified, NAPTR and SRV lookups will be used to determine them (if possible).

If destination parameter is missing, the forward will be done based on RURI.

Example of usage:

    forward("10.0.0.10:5060");
    #or
    forward();

isdsturiset()

Test if the dst_uri field (next hop address) is set.

Example of usage:

    if(isdsturiset()) {
        log("dst_uri is set\n");
    };

isflagset(int)

Test if a flag is set for current processed message (if the flag value is 1). The value of the parameter can be in range of 0..31.

For more see http://www.voice-system.ro/docs/ser-flags/ or Flags Documentation.

Example of usage:

    if(isflagset(3)) {
        log("flag 3 is set\n");
    };

isbflagset([branch_idx,] flag_idx)

Test if a flag is set for a specific branch (if the flag value is 1). The value of the "flag_idx" parameter can be in range of 0..31. "branch_idx" identify the branch for which the flags are tested - it must be a positiv number. Branch index 0 refers to the RURI branch. If this parameter is missing, 0 branch index is used as default.

For more about script flags, see Flags Documentation.

Example of usage:

    if(isbflagset(1,3)) {
        log("flag 3 is set in branch 1\n");
    };

issflagset(flag_idx)

Test if a script flag is set (if the flag value is 1). The value of the "flag_idx" parameter can be in range of 0..31.

For more about script flags, see Flags Documentation.

Example of usage:

    if(issflagset(2)) {
        log("script flag 2 is set\n");
    };

log([level,] string)

Write text message to standard error terminal or syslog. You can specify the log level as first parameter.

For more see: http://www.voice-system.ro/docs/ser-syslog/

Example of usage:

    log("just some text message\n");

next_branches()

Adds to the request a new destination set that includes all highest priority class contacts ('q' value based) from the serialized branches (see serialize_branches()). If called from a route block, it rewrites the request uri with first contact and adds the remaining contacts as parallel branches. If called from failure route block, adds all contacts as parallel branches. All used contacts are removes the serialized branches.

Returns true if at least one contact was added for the request's destination set. False is return is nothing was done (no more serialized branches).

Example of usage:

    next_branches();

prefix(string)

Add the string parameter in front of username in R-URI.

Example of usage:

    prefix("00");

pv_printf(pv, string)

Prints the formatted 'string' in the AVP 'pv'. The 'string' parameter can include any pseudo-variable defined in OpenSIPS. The 'pv' can be any writable pseudo-variable -- e.g.,: AVPs, VARs, $ru, $rU, $rd, $du, $br, $fs.

It was extended from the avp_printf(...) function exported in previous versions by the avpops module. Starting with 1.3.0, avp_printf(...) is just an alias to pv_printf(...).

Example of usage:

    pv_printf("$var(x)", "r-uri: $ru");
    pv_printf("$avp(i:3)", "from uri: $fu");

return(int)

The return() function allows you to return any integer value from a called route() block. You can test the value returned by a route using "$retcode" variable.

return(0) is same as "exit()";

In bool expressions:

  * Negative and ZERO is FALSE
  * Positive is TRUE

Example usage:

route {
  if (route(2)) {
    xlog("L_NOTICE","method $rm is INVITE\n");
  } else {
    xlog("L_NOTICE","method $rm is REGISTER\n");
  };
}
route[2] {
  if (is_method("INVITE")) {
    return(1);
  } else if (is_method("REGISTER")) {
    return(-1);
  } else {
    return(0);
  };
}

resetdsturi()

Set the value of dst_uri filed to NULL. dst_uri field is usually set after loose_route() or lookup("location") if the contact address is behind a NAT.

Example of usage:

    resetdsturi();

resetflag(int)

Reset a flag for current processed message (set the value to 0). The value of the parameter can be in range of 0..31.

For more see http://www.voice-system.ro/docs/ser-flags/ or Flags Documentation.

Example of usage:

    resetflag(3);

resetbflag([branch_idx,] flag_idx)

Reset a flag for a specific branch (set flag to value 0). The value of the "flag_idx" parameter can be in range of 0..31. "branch_idx" identify the branch for which the flag is reset - it must be a positiv number. Branch index 0 refers to the RURI branch. If this parameter is missing, 0 branch index is used as default.

For more about script flags, see Flags Documentation.

Example of usage:

    resetbflag(1,3);
    # or
    resetbflag(3); # same with resetbflag(0,3)

resetsflag(flag_idx)

Reset a script flag (set flag to value 0). The value of the "flag_idx" parameter can be in range of 0..31.

For more about script flags, see Flags Documentation.

Example of usage:

    resetsflag(2);

revert_uri()

Set the R-URI to the value of the R-URI as it was when the request was received by server (undo all changes of R-URI).

Example of usage:

    revert_uri();

rewritehost() / sethost()

Rewrite the domain part of the R-URI with the value of function's parameter. Other parts of the R-URI like username, port and URI parameters remain unchanged.

Example of usage:

    rewritehost("1.2.3.4");

rewritehostport() / sethostport()

Rewrite the domain part and port of the R-URI with the value of function's parameter. Other parts of the R-URI like username and URI parameters remain unchanged.

Example of usage:

    rewritehostport("1.2.3.4:5080");

rewriteuser(string) / setuser(string)

Rewrite the user part of the R-URI with the value of function's parameter.

Example of usage:

    rewriteuser("newuser");

rewriteuserpass() / setuserpass()

Rewrite the password part of the R-URI with the value of function's parameter.

Example of usage:

    rewriteuserpass("my_secret_passwd");

rewriteport() / setport()

Rewrites/sets the port part of the R-URI with the value of function's parameter.

Example of usage:

    rewriteport("5070");

rewriteuri(str) / seturi(str)

Rewrite the request URI.

Example of usage:

    rewriteuri("sip:test@opensips.org");

send(destination)

Send the original SIP message to a specific destination in stateless mode. This is definied as [proto:]host[:port]. No changes are applied to received message, no Via header is added. Host can be an IP or hostname; supported protocols are UDP, TCP and TLS. (For TLS, you need to compile the TLS support into core). If proto or port are not specified, NAPTR and SRV lookups will be used to determine them (if possible).

Parameter is mandatory and has string format.

Example of usage:

   send("udp:10.10.10.10:5070");

serialize_branches(clear)

Takes all the branches added for parallel forking (with append_branch() and including the current RURI) and prepare them for serial forking. The ordering is done in increasing "q" order. The serialized branches are internally stored in AVPs - you will be able to fetch and use via the "next_branches()" function.
NOTE that (according to RFC3261), the branches with the same "q" value will still be parallel forked during a certain step in the serial forking (it will result a combination of serial with parallel forking).
NOTE that this function is not changing RURI in the messages - it is just converting from parallel to serial branches (preparing branches).

If "clear" is set to non-zero, all previous results of another "serialize_branches" (serialized branches which were not yet used) will be deleted before setting the new serialized branches.

Example of usage:

   serialize_branches(1);

set_advertised_address(ip|string)

Same as 'advertised_address' but it affects only the current message. It has priority if 'advertised_address' is also set.

Example of usage:

    set_advertised_address("opensips.org");

set_advertised_port(int)

Same as 'advertised_port' but it affects only the current message. It has priority over 'advertised_port'.

Example of usage:

    set_advertised_port(5080);

setdebug([level])

Changes the debug level of the current process from script. If called without the parameter then the debug level of the current process will be reset to the global level. If the debug level of the current process is changed then changing the global debug level (using MI function) does not affect it, so be careful and make sure to reset the process debug level when you are done. This function is very helpful if you are tracing and debugging only a specific piece of code.

Example of usage:

    debug= -1 # errors only
    .....
    {
      ......
      setdebug(4); # set the debug level of the current process to DBG
      uac_replace_from(....);
      setdebug(); # reset the debug level of the current process to the global level
      .......
    }

setdsturi(string)

Explicitely set the dst_uri field to the value of the paramater. The parameter has to be a valid SIP URI.

Example of usage:

    setdsturi("sip:10.10.10.10:5090");

setflag(int)

Set a flag for current processed message. The value of the parameter can be in range of 0..31. The flags are used to mark the message for special processing (e.g., accounting) or to keep some state (e.g., message authenticated).

For more see http://www.voice-system.ro/docs/ser-flags/ .

Example of usage:

    setflag(3);

setbflag([branch_idx,] flag_idx)

Set a flag for a specific branch (set flag to value 1). The value of the "flag_idx" parameter can be in range of 0..31. "branch_idx" identify the branch for which the flag is set - it must be a positiv number. Branch index 0 refers to the RURI branch. If this parameter is missing, 0 branch index is used as default.

For more about script flags, see Flags Documentation.

Example of usage:

    setbflag(1,3);
    # or
    setbflag(3); # same with setbflag(0,3)

setsflag(flag_idx)

Set a script flag (set flag to value 0). The value of the "flag_idx" parameter can be in range of 0..31.

For more about script flags, see Flags Documentation.

Example of usage:

    setsflag(2);

strip(int)

Strip the first N-th characters from username of R-URI (N is the value of the parameter).

Example of usage:

    strip(3);

strip_tail(int)

Strip the last N-th characters from username of R-URI (N is the value of the parameter).

Example of usage:

  strip_tail(3);

Page last modified on April 24, 2013, at 10:16 PM