new module for matching time recurrences in config file. Definitions of recurrences are based on Internet Calendaring and Scheduling Core Object Specification (Calendar COS - RFC 2445).
new parameters cdr_start_id, cdr_end_id and cdr_duration_id to set the names of DLG variables for start time, end time and duration for calls
app_lua
more SIP server internal functions exported as native Lua functions, among them, functions from modules such as:
cfgutils (lock, unlock)
sqlops (sql_xquery)
msilo
siputils
textops
pua_usrloc
rls
alias_db
uac
mqueue
tmx
speed up by using a cache to lookup PVs
auth
new function auth_challenge()
combines www_challenge() and proxy_challenge() by calling the first for REGISTER and the second for the rest of request types
new funtion to return WWW-Authenticate hdr in a PV
auth_db
new function auth_check()
offers www/proxy_authenticate() behavior by using first for REGISTER and the second for the other requests
it can do extra security checks based on parameters (e.g., check auth user against from/to user)
ctl
compile time option to use system memory allocator
flag in module Makefile: -DCTL_SYSTEM_MALLOC
db_postgres
affected_rows() DB API now supported
dialog
new event routes
event_route[dialog:start] - executed when dialog starts (200 ok for initial INVITE)
event_route[dialog:end] - executed when dialog is ended (BYE or dialog timeout)
event_route[dialog:failed] - executed when initial INVITE fails (>300 reply)
new parameters
send_bye - set sending BYE flag for all dialogs automatically
wait_ack - wait for ACK to be sent after a negative reply for initial INVITE
dialog profiles and internal flags are stored to db and loaded upon restart
support for handling early dialogs (for not ACK'ed dialogs)
timeout route executed only for confirmed dialogs
lookup dialog by (entry, label) if available for $dlg(…) - useful for timeout route where there is no SIP message passing through for the dialog
new function to set dialog timeout by internal id - dlg_set_timeout(timeout , h_entry, h_id)
possibility to send keep alives for dialogs
keepalives are OPTIONS requests
if keepalive request get 408 ot 481, dialog is timed out after 10 secs
dialplan
new matching operator - fnmatch (match_op=2)
match using shell-like patterns
dispatcher
refactored dispatcher destination states
states: active, trying, inactive, disabled
probing is a mode that can be set for active and inactive states
added outbound_proxy modparam for use with dispatcher pings
MI/RPC ds_reload command can be executed even when using call load distribution
diversion
added optional uri parameter to add_diversion()
dmq
added config function send_dmq message which exposes the same functionality as the API function
domain
added new function 'lookup_domain()' that in addition to checking if domain is local, adds attributes of local domain into AVPs
domain attributes are stored in new table 'domain_attrs'
removed support for db only mode and, as consequence, removed 'db_mode' module variable
htable
added 'updateexpire' parameter to the definition of an htable
it permits one to change whether updating a value stored in the htable resets its time until expiration
its default value is 1, to preserve existing behaviour
however, if set to 0, updating a value will have no effect on how soon it will expire
implemented “delete” mi/rpc function - delete specific keys from an htable via the MI or RPC interface
lcr
gateways with special LCR instance id 0 belong to all normal LCR instances
added 'lcr.defunct_gw' rpc command
IPv6 addresses are supported
support for R-URI matching
an additional request_uri column has been introduced
if other than NULL, it also needs to match beside prefix and from_uri in order for the rule to be selected
kex
new pv $sruid to return unique strings based on sruid internal library
mediaproxy
handle DLGCB_CONFIRMED event to catch ACKs with SDP
mi_rpc
added MI command to run RPC commands
all RPC commands can be executed via MI
mqueue
queue names can now be in pseudo variables
mq_add()/mq_fetch() can use pseudo variables (as well as strings) for queue names.
$mqk()/$mqv() can use pseudo variables (as well as strings) for queue names
msilo
extra headers in MESSAGE requests now stored in the silo
added storage of extra SIP headers from AVP when m_store() is called
mtree
added 'mt_allow_duplicates' module variable
ndb_redis
reconnect if query to redis server fails
support for redis array reply
pdt
new functions:
pd_translate(sdomain, rmode)
new rpc commands:
pdt.reload - reload database records in cache
permissions
transport protocol argument of allow_trusted() function call can now have value “any” meaning that any transport protocol is acceptable
IPv6 addresses are supported
allow_trusted() can deal with HTTP requests
presence
support for polite-block in pres_auth_status() exported function
added db only mode support for presentity table
option to load database records in chunks
RFC 4827 (presence hard-state) support
handle_subscribe() has a new optional parameter that can be used to specify watcher URI
dedicated notifier processes
new “notifier_processes” modparam - if set to 0, dedicated processes feature is disabled
pua
added DB only mode to PUA. Useful for scaling presence/RLS across multiple servers
database records are loaded in chunks to cope better with large number of records
added MI command to “clean” the pua table
pua_usrloc
added branch_flag parameter
mark the contact for sending PUBLISH via setbflag(branch_flag)
pv
new transformation class line
{line.count}
{line.at,pos}
{line.sw,match}
new string tranformations
{s.trim}
{s.ltrim}
{s.rtrim}
{s.rm,match}
support of URN parsing (e.g.: urn:service:sos.fire)
$ru= “urn:service:sos.fire”
$rz= “urn” (scheme)
$rU= “service”
$rd= “sos.fire”
new pseudo variables
$dic = Diversion header “counter” parameter value
$sid = server_id value - server_id can be set via global parameter with same name
registrar
new parameter xavp_cfg - defines the name of an XAVP container to hold per-REGISTER parameters
new parameter xavp_rcd - store details of UL record
if set, the internal ruid field will be returned as inner xavp to it
option to set max contact per REGISTER (via xavp)
handle GRUU extension (RFC5627)
added new parameter gruu_enabled - makes possible to turn off GRUU handling for REGISTER
optional uri parameter
removed aor_avp as it conflicted with unregister uri param
save(), lookup() and register() can take an extra optional parameter to specify the URI for which to do the operation. It provides the same functionality as it was with aor_avp
rls
added DB only mode to RLS. Useful for scaling RLS across multiple servers
new modparam to not perform back-end subscriptions to non-local presentities
rls_presentity table can be stored in a different DB to other RLS tables
new modparam to limit the number of back-end subscribes for each RLS subscribe dialog
option to load database records in chunks
new modparam to disable remote (to a domain that is not local) back-end SUBSCRIBEs
table rls_presentity can be in a different DB than rls_watchers
support for dedicated notifier processes
made the number of notifier processes in RLS configurable
rls_handle_subscribe() has a new optional parameter that can be used to specify watcher URI
added MI command to “clean” the rlsubs and rlpres entries
rr
added new record_route_advertised_address() exported function
detect GRUU addresses and don't match 'myself' for them
rtimer
execute route blocks on micro-second timer base
rtpproxy
send Via branch to rtpproxy
introduce force/unforce options “1” and “2” to optionally send first or second Via branch to rtpproxy.
this can be used to stop only a specific branch in the rtp proxy, which is needed for complex serial looping scenarios where in a race condition a new branch is processed before a previous branch is cancelled, where the cancel would whipe the whole call from the rtp proxy instead of just the old branch, causing the subsequent rtp proxy lookup to fail.
handle UPDATE requests in rtpproxy_manage()
sanity
SIP grammar checks can be done for SIP replies
new checks for duplicates of tag params in To/From
sipcapture
added HEPv2 support
siptrace
store method for SIP replies, using CSeq header
added HEPv2 support
new parameter to allow the option of doing delayed insert to db (trace_delayed)
siputils
allow use of is_uri_user_e164() from any route
new function is_gruu(uri) - wrapper function to test quickly if a SIP URI indicates a GRUU
address or not
sdpops
new functions
sdp_with_codecs_by_id(“codecs”)
sdp_with_codecs_by_name(“codecs”)
sdp_remove_media(“type”)
old functions
functions for keeping only a set of codecs can take a second parameter to filter the matching on certain media type
support for codecs with same name and many different ids
added new exported function get_sdp(…) to return the raw SDP to an AVP
sl
new event_route[sl:local-response] that allows inspection of locally generated (configuration file or code) stateless responses. This includes HTTP responses (enable new core option http_reply_hack if you are using this event_route and HTTP)
statistics
update_stat() can now be called from ANY_ROUTE
textops
new function: in_list(subject, list, separator)
two functions to search and subst inside header fields
search_hf(hf, re, flags) - search inside header field body
subst_hf(hf, subst, flags) - perl-like substitution inside header field body
textopsx
new function: keep_hf(expr)
remove all the non-mandatory headers that don't match expr
new function: fnmatch(value, match, flags)
match using shell-like patters based on C fnmatch(…)
TLS pre-init operations done at the time of loading module to allow other modules using SSL lib in parallel
rpc tls.info prints the limit and opened tls connections
tm
$snd() structure filled in for event_route[tm:local-request]
new event_route[tm:local-response] that allows inspection of locally generated (configuration file or code) transaction stateful responses
uac
added reg_timer_interval modparam to set the frequency with which registrations are renewed and otherwise managed
support for 407 challenge to registrations
function to replace To header
usrloc
save unique string ID for each contact (ruid column)
handle +sip.instance parameter from GRUU extension (rfc 5627)
handle reg-id Contact parameter defined by RFC5626
option to start own timer processes
new parameter timer_procs
default is 0, meaning the core timer process is used (like so far)
if >0, a number of basic sync timers are started
each own timer will take care of synchronizing the usrloc records, selecting specific slots in the internal hash table (load balancing mechanism) - this mode is useful for handling lot of usrloc records
option to check if contact DB UPDATE was successful
use DB API affected_rows() when available to detect if the DB UPDATE operation for a contact was successful, if not, do an INSERT instead
behaviour controlled by parameter db_check_update, default is 0 (no check for affected rows and no insert – backward compatible)
xcap_server
added $xcapuri(u⇒uri_adoc) pvar
this gives access to the adoc field in the internal xuri data-structure (the xuri without xpath)
xlog
xlog(facility,log-level,message) allows to log messages with dedicated syslog facility
xmlrpc
added support for nested structs in RPC reply via XMLRPC
xmpp
new parameter gwmap for sip-xmpp domain translation
gwmap can get a valus as a list of 'sipdomain1=xmppdomain1;…;sipdomainN=xmppdomainN'
whenever a sip-to-xmpp message is sent, any matching sipdomain in src or dst address is translated to appropiate xmppdomain
the other way around, when a xmpp-to-sip message is sent, then any matching xmpp domain in src or dst address is translated to appropriate sip domain
this allow getting rid of the URI encoding with delimiter
if a domain is not found, the src/dst domains are preserved as they are in SIP to XMPP and vice verse
if the xmppdomain is not provided explicitly, sipdomain is considered to be also the xmpp domain
New in Core
Components
core code
added support for basic mili-second timers
support for receiving MSRP messages over TCP/TLS
setting max_while_loops to zero now allows infinite loops
option to use name IDs for TOS setting
option to set advertised address and port per socket
listen parameter can be like: 'listen=proto:ip:port advertise ip1:port1'
ip1 and port1 will be used to build Via and Route headers for messages using the socket
allow send() without parameters - will use r-uri/dst-uri to send the msg buffer
added timeval field inside sip message structure
added pid field inside sip message structure
added support for basic timer + interval sync
new functions to start basic timers that will sync the interval after executing the task. Useful if the task is taking long, the process will skip the delay in the sleep value
lib/srutils
new internal library to collect useful code to be shared by modules
includes:
JSON parser
UUID generator
time recurrence matching functions
parser/uri
support for URN
uri parser has support for URNs (e.g. urn:service:sos.fire)
ability to specify DB connections as non-pooled in DB URLs
updated DB API prototype for replace
replace method takes two more parameters to allow implementation of replace functionality inside the db connector module, via update, affected rows and insert
DB transaction support - added db_begin()/db_commit()/db_rollback() wrapper functions
Global Parameters
fork_delay
number of usecs to wait before forking a process
http_reply_hack
does what the old HTTP_REPLY_HACK compile-time option did
defaults to no (disabled)
enable this if you use the new event_route[sl:local-response] and the embedded HTTP server module
latency_limit_action
time in micro seconds - if the execution of a config action takes longer than it, a log message is printed
latency_limit_db
time in micro seconds - if the execution of a database query takes longer than it, a log message is printed
latency_log
log level to print latency log messages
max_while_loops
setting to 0 means infinite loops are allowed in configuration file (you still get a warning on start-up)
mem_join
if set to 1, q_malloc and f_malloc do join of free memory fragments. Default is 0. In use if MEM_JOIN_FREE is defined
mem_safety
if set to 1, memory free operation does not call abort() for double freeing a pointer or freeing an invalid address
default is 0, can be set via config framework
msg_time
set the sip message timeval filed value at receive time (1 (on) by default, set to 0 to disable)
the value is set automatically at received time based if msg_time=1 or first time when it is accessed
socket workers
set the number of worker processes to handle traffic on specific listen sockets
tcp_clone_rcvbuf
enable or disable cloning of received data on TCP connections to allow safe updates directly inside the incoming buffer
tls_max_connections
limit the number of active tls connections
New RPC Commands
core.tcp_list
list active TCP connections
core.aliases_list
list local name aliases (matching myself)
core.sockets_list
list local listen sockets
Command Line Parameters
-I - print details about default internal attributes
Makefile System
printmiface - new target to print module interface define
option to print C compile flags
Tools
protoshoot
tool for sending file content over network
useful to re/send SIP messages stored in files
features/new-in-3.3.x.txt · Last modified: 2012/06/18 16:23 by miconda