- use_dns_cache can be enabled/disabled runtime
[sip-router] / NEWS
1 Release notes for SIP Express Router (ser)
2 ***********************************************
3
4 $Id$
5
6
7
8 2.1.0 changes
9
10 modules:
11  - auth      - added extra authentication checks support, to protect
12                against various reply attacks.
13              - params:
14                        - auth_extra_checks - flags specifying which extra
15                           message part/parts will be checked for change before
16                           allowing nonce reuse. See the auth module docs for
17                           for more information (modules/auth/README).
18  - blst      - new module containing script blacklist manipulations functions
19                (the source of a message can be blacklisted, removed from the
20                 blacklist or checked for presence in the blacklist).
21  - tm        - support for adding a 503 reply source to the blacklist for
22                the time specified in the Retry-After header (see the new tm
23                parameters blst_503, blst_503_def_timeout, blst_503_min_timeout
24                and blst_503_max_timeout).
25              - different error replies for too many branches (500 but with
26                different text), resolve error (478) or send error
27                (477).
28              - tm can be configured not to automatically send 100 replies
29                for invites either globally (see the auto_inv_100 parameter)
30                or on a per transaction basis (see t_set_auto_inv_100(...))
31              - t_relay* error reply are delayed till the end of the script
32                to allow the script writer to overwrite them
33              - branches are always canceled hop by hop
34              - cancels for silently canceled branches (no replies ever 
35                received) are automatically generated if later a provisional
36                reply arrives on such a branch
37              - noisy_ctimer is now 1 (on) by default
38              - added maximum transaction lifetime - a transaction is not
39                allowed to be active longer then this interval. See
40                t_set_max_lifetime(), max_inv_lifetime and max_noninv_lifetime.
41              - support for changing the retransmission intervals on the fly,
42                on a per transaction basis (it is enabled if tm is compiled
43                with -DTM_DIFF_RT_TIMEOUT -- default): t_set_retr(t1, t2).
44              - transaction are deleted the moment they are not referenced 
45                anymore (removed the need for the delete timer) -- this 
46                should improve memory usage on very busy proxies.
47              - lots of callbacks added
48              - new onsend callbacks support (require defining TMCB_ONSEND prior
49                to compiling tm)
50              - behaviour when receiving a CANCEL which doesn't match any 
51                transaction can be selected using the unmatched_cancel param.
52              - params: 
53                         - blst_503 - if set and if the blacklist is used
54                           (use_dst_blacklist=1), add the source of a 503 reply
55                           to the blacklist
56                         - blst_503_def_timeout - if the Retry-After header from
57                           a 503 reply is missing, use this value for the 
58                           blacklist timeout (in s). Depends on blst_503.
59                           The default value is 0 ( do not blacklist if no
60                           Retry-After is present).
61                         - blst_503_min_timeot (in s) - if the 503 reply 
62                           Retry-After header value is less, use this value
63                           for the blacklist timeout. Depends on blst_503.
64                           The default value is 0.
65                         - blst_503_max_timeout (in s) - if the 503 reply 
66                           Retry-After header value is greater, use this value
67                           instead. Depends on blst_503.
68                           The default value is 3600 s.
69                         - auto_inv_100 - if set (default) tm will automatically
70                           send an 100 reply to INVITEs (see also 
71                          t_set_auto_inv_100())
72                         - noisy_ctimer is now 1 by default
73                         - max_inv_lifetime & max_noninv_lifetime - default
74                           maximum lifetimes for an invite or non-invite 
75                           transaction. After this interval has passed from 
76                           the transaction creation the transaction will be 
77                           either switched into the wait state or in the
78                           final response retransmission state => a transaction
79                           will be kept in memory for maximum: 
80                            max_*inv_lifetime + fr_timer /*ack w.*/ +wait_timer.
81                         - unmatched_cancel - selects between forwarding cancels
82                            that do not match any transaction statefully (0, 
83                            default value), statelessly (1) or dropping them
84                            (2). Note that the statefull forwarding has an 
85                            additional hidden advantage: tm will be able to
86                            recognize INVITEs that arrive after their CANCEL.
87                            Note also that this feature could be used to try
88                            a memory exhaustion DOS attack against a proxy that
89                            authenticates all requests, by continuously flooding
90                            the victim with CANCELs to random destinations 
91                            (since the CANCEL cannot be authenticated, each
92                            received bogus CANCEL will create a new transaction 
93                            that will live by default 30s).
94              - functions:
95                         - t_set_auto_inv_100(on/off) - switch automatically
96                           sending 100 replies to INVITEs on/off on a per
97                           transaction basis. It overrides the tm param.
98                           auto_inv_100.
99                         - t_set_max_lifetime(inv, noninv) - changes the 
100                           maximum transaction lifetime on the fly, for the
101                           current or next to be created transaction.
102                         - t_set_retr(t1, t2) - changes the retransmissions
103                            intervals on the fly, on a per transaction basis.
104 core:
105              - tcp improvements (better tcp timers, send fd cache, special
106                 options support)
107              - dns naptr support (see dns_try_naptr and dns_<proto>_pref)
108              - dns srv based load balancing support (see dns_srv_lb)
109              - support for locking ser's pages in memory, pre-mapping
110                all the shared memory on startup (fill it with 0)
111              - real time options
112              - devel: new PROC_INIT rank, init_child(PROC_INIT) called first
113              - futex support on linux (better behaviour when waiting on 
114                long held locks, almost no performance impact otherwise)
115              - when dns search list was used for resolution, store the "link"
116                between the short name and long name in cache as CNAME record
117
118 new config variables:
119   tcp_fd_cache = yes | no (default yes) - if enabled FDs used for sending
120      will be cached inside the process calling tcp_send (performance increase
121      for sending over tcp at the cost of slightly slower connection closing and
122      extra FDs kept open)
123   tcp_buf_write = yes | no (default no) - if enabled all the tcp  writes that 
124      would block / wait for connect to finish, will be queued and attempted
125      latter (see also tcp_conn_wq_max and tcp_wq_max).
126   tcp_conn_wq_max = bytes (default 32 K) - maximum bytes queued for write 
127      allowed per connection. Attempting to queue more bytes would result
128      in an error and in the connection being closed (too slow). If 
129      tcp_write_buf is not enabled, it has no effect.
130   tcp_wq_max = bytes (default 10 Mb) - maximum bytes queued for write allowed
131      globally. It has no effect if tcp_write_buf is not enabled.
132   tcp_defer_accept =  yes | no (default no) on freebsd  / number of seconds
133         before timeout on linux (default disabled) - tcp accepts will be 
134         delayed until some data is received (improves performance on proxies
135         with lots of opened tcp connections). See linux tcp(7) TCP_DEFER_ACCEPT
136         or freebsd ACCF_DATA(0). For now linux and freebsd only.
137         WARNING: the  linux TCP_DEFER_ACCEPT is buggy (<=2.6.23) and doesn't 
138          work exactly as expected (if no data is received it will retransmit 
139          syn acks for ~ 190 s, irrespective of the set timeout and then it will
140          silently drop the connection without sending a RST or FIN). Try to 
141          use it together with tcp_syncnt (this way the number of retrans.
142           SYNACKs can be limited => the timeout can be controlled in some way).
143   tcp_delayed_ack  = yes | no (default yes when supported) - initial ACK for
144         opened connections will be delayed and sent with the first data
145         segment (see linux tcp(7) TCP_QUICKACK). For now linux only.
146   tcp_syncnt = number of syn retr. (default not set) - number of SYN 
147         retransmissions before aborting a connect attempt (see linux tcp(7)
148         TCP_SYNCNT). Linux only.
149   tcp_linger2 = seconds (not set by default) - lifetime of orphaned sockets
150         in FIN_WAIT2 state (overrides tcp_fin_timeout on, see linux tcp(7) 
151         TCP_LINGER2). Linux only.
152   tcp_keepalive = yes | no (default yes) - enables keepalive for tcp.
153   tcp_keepidle  = seconds (not set by default) - time before starting to send
154          keepalives, if the connection is idle. Linux only.
155   tcp_keepintvl = seconds (not set by default) - time interval between 
156          keepalive probes, when the previous probe failed. Linux only.
157   tcp_keepcnt = number (not set by default) - number of keepalives sent before
158          dropping the connection. Linux only.
159   pmtu_discovery = 0 | 1 (default 0) - set DF bit in outbound IP if enabled
160   dns_srv_lb = yes | no (default no) - enable dns srv weight based load 
161     balancing (see doc/dns.txt)
162   dns_try_naptr = yes | no (default no) - enable naptr support 
163     (see doc/dns.txt for more info)
164   dns_{udp,tcp,tls}_pref = number - ser preference for each protocol when
165     doing naptr lookups. By default dns_udp_pref=3, dns_tcp_pref=2 and 
166     dns_tls_pref=1. To use the remote site preferences set all dns_*_pref to 
167     the same positive value (e.g. dns_udp_pref=1, dns_tcp_pref=1, 
168     dns_udp_pref=1). To completely ignore NAPTR records for a specific 
169     protocol, set the corresponding protocol preference to -1 (or any other 
170     negative number).  (see doc/dns.txt for more info)
171   dns_search_full_match = yes | no (default yes) - when name was resolved using
172     dns search list, check the domain added in the answer matches with one from
173     the search list (small performance hit, but more safe)
174   mlock_pages = yes |no (default no) - locks all ser pages into memory making 
175     it unswappable (in general one doesn't want his sip proxy swapped out :-))
176   shm_force_alloc = yes | no (default no) - tries to pre-fault all the 
177     shared memory, before starting. When on start time will increase, but
178     combined with mlock_pages will guarantee ser will get all its memory from
179     the beginning (no more kswapd slow downs)
180   real_time = <int> (flags) (default off). - sets real time priority
181      for all the ser processes, or the timers. 
182      Possible values:   0  - off
183                         1  - the "fast" timer
184                         2  - the "slow" timer
185                         4  - all processes, except the timers
186      Example: real_time= 7 => everything switched to real time priority.
187   rt_prio = <int> (default 0) - real time priority used for everything except
188      the timers, if real_time is enabled
189   rt_policy= <0..3> (default 0)- real time scheduling policy, 0 = SCHED_OTHER,
190      1= SCHED_RR and 2=SCHED_FIFO
191   rt_timer1_prio=<int> (default 0) - like rt_prio but for the "fast" timer
192      process (if real_time & 1)
193   rt_timer1_policy=<0..3> (default 0) - like rt_policy but for the "fast" timer
194   rt_timer2_prio=<int> (default 0) - like rt_prio but for the "slow" timer
195   rt_timer2_policy=<0..3> (default 0) - like rt_policy but for the "slow" timer
196   tcp_source_ipv4 = IPv4 address
197   tcp_source_ipv6 = IPv6 address
198     Set the given source IP for all outbound TCP connections.
199     If setting the IP fails the TCP connection will use the default.
200   dns_cache_init = on | off (default on) - if off, the dns cache is not
201     initialized at startup and cannot be enabled runtime, that saves some
202     memory.
203   dst_blacklist_init = on | off (default on) - if off, the blacklist
204     is not initialized at startup and cannot be enabled runtime,
205     that saves some memory.
206
207
208
209 2.0.0 changes
210
211
212 new archs:
213
214
215 modules:
216  - tls        - new module that enables tls support (set enable_tls=yes
217                 in the config file and load the tls module)
218  - ctl        - new  fifo/unixsocket/xmlrpc like module, using a space 
219                 efficient binary encoding for the requests.
220                 It supports multiple clients on tcp, udp, unix stream or
221                 unix datagram modes. By default (no modparams) it opens
222                 one unix stream control socket in /tmp/ser_ctl.
223                 It also includes extended fifo support: multiple fifos,
224                 fifo over tcp, udp and unix sockets (see ctl/ctl.cfg).
225                 Use utils/sercmd/sercmd to send commands to it.
226  - dispatcher - added hashing after request uri and to uri
227               - added a new flag parameter which can be used (for now) to
228                 select only the username or the username, host and port when
229                 hashing after an uri (to, from or request uri)
230               - improved uri hashing (password is ignored, port is used only
231                 if != 5060 or 5061)
232  - tm        - aggregate challenges (WWW/Proxy-Authenticate) from all the
233                401 & 407 if the final reply is a 401/407. To turn this off
234                and fall back to the old behaviour set tm aggregate_challenges
235                parameter to 0.
236              - if a relayed 503 is the final reply, replace it by a 500
237              - if a 503 reply is received try the dns based failover
238                (forward to another ip if the original destination uri 
239                 resolved to several SRV, A or AAAA records)
240              - on 6xx immediately cancel all the branches for which a 
241                provisional response was received and wait for all the 
242                branches to finish (either timeout, the 487 from the CANCEL
243                or a final response still on the wire in the moment the
244                CANCEL was sent)
245              - better final reply selection: 6xx is preferred over other 
246                negative replies; from several 4xx prefer 401, 407, 415, 420,
247                484 (in this order). For all the other cases, return the lowest
248                code (as before)
249              - special functions for checking for timeout, if a reply was
250                received or if the current transaction was canceled
251              - dns failover and dst blacklist support
252              - migrated to the new timers (tm timers completely rewritten)
253              - improved speed and less memory usage
254              - much more precise retransmissions timing
255              - params: - retr_timer1p1, retr_timer1p2, retr_timer1p3 removed
256                          and replaced by retr_timer1 and retr_timer2
257                        - all timer values are now expressed in milliseconds
258                          (they were in seconds before).
259                          Affected params: fr_timer, fr_inv_timer, wt_timer,
260                          delete_timer, retr_timer1, retr_timer2
261                        - retr_timer1 (first retransmission) changed to 500 ms
262                        - delete_timer changed to 200 ms
263                        - unix_tx_timeout expressed now in milliseconds; default
264                          value changed to 500 ms
265              - functions:
266                        - t_branch_timeout() -- returns true if the failure
267                          route is executed for a branch that did timeout
268                          (failure_route only).
269                        - t_branch_replied() -- returns true if the failure 
270                          route is executed for a branch that did receive at
271                          least one reply in the past (the current reply 
272                           is not taken into account). It can be used
273                          together with t_branch_timeout() to distinguish 
274                          between a remote side that doesn't respond (some 
275                          provisional reply received) and one that is completely
276                           dead. (failure_route only)
277                        - t_any_timeout() -- returns true if any of the current
278                          transaction branches did timeout.
279                        - t_any_replied() -- returns true if at least one branch
280                           of the current transaction received one reply in the
281                           past. If called from a failure_route or an
282                           onreply_route, the "current" reply is not taken into
283                           account.
284                        - t_is_canceled() -- returns true if the current 
285                          transaction  has been canceled.
286                        - new t_set_fr(timeout_fr_inv, timeout_fr) -- allows
287                          changing the transaction timer from script, even if
288                          the transaction was already created (see tm docs for
289                          more).
290             - t_relay will not stop script execution anymore in case of
291               send error
292  - textops  - search() can be used in the onsend_route where it will search
293               on the "new" message (after applying all script changes, adding
294               Vias a.s.o) and not on the original message
295  
296 core:
297  - compiled by default with tls hooks support (so that no recompile is
298    needed before loading the tls module and enabling the tls support)
299  -  enable_tls config option added (the reverse of disable_tls)
300  - added STUN keep-alive functionality in accordance with 
301    draft-ietf-behave-rfc3489bis-04.txt
302  - dns cache and dns failover support added (see doc/dns.txt)
303  - destination blacklist added -- destinations to which forwarding fails
304    (send error, tm timeout a.s.o) are temporarily added to a blacklist which 
305     is consulted before each send => faster send error detection
306     in the near future (see doc/dst_blacklist.txt)
307  - default log level switched to 0 (only messages < L_WARN will be printed
308    by default)
309  - separate memdbg log level which controls the memory/malloc related
310    debug messages (to see them ser must be compiled with malloc debuging:
311      -DDBG_QM_MALLOC or -DDBG_FM_MALLOC and memdbg must be <= debug )
312  - added named routes: names can be used instead of numbers in all the
313    route commads or route declarations. route(number) is equivalent to
314    route("number").
315    Example:
316      route("test");
317       route["test"]{
318            ...
319      }
320  - added named flags, declared at the beginning of the config file with:
321      flags  flag1_name[:position],  flag2_name ...
322    Example:
323        flags test, a:1, b:2 ;
324        route{
325               setflag(test);
326               if (isflagset(a)){ # equiv. to isflagset(1)
327                 ....
328               }
329               resetflag(b);  # equiv. to resetflag(2) 
330  - added return [val] which returns from a route. if no value is specified, or
331    a route reaches its end without executing a return statement, it returns 1.
332    If return is used in the top level route is equivalent with exit [val].
333  - drop /exit [n] now will end the script execution
334    exit n will exit with code n (usefull in onreply/onsend routes where
335    if script code !=0 a reply is generated/the message is sent or to force
336    script errors)
337  - added $? which can be used to check the return code of the last executed
338    route{} (e.g. route(1); if ($?==1){ /* ... */}else if ($?==2) ... )
339  - onsend_route added: special route executed before a request is sent.
340                        Only a limited number of commands are allowed (drop, if
341                        + all the checks, msg flag manipulations, send(), log(),
342                        textops::search()). In this route the final destination
343                        of the message is available an can be checked (with
344                        snd_ip, snd_port, to_ip, to_port, snd_proto, snd_af).
345                        This route is executed only when forwarding requests.
346                        It's not executed for replies, retransmissions, or
347                        locally generated messages (e.g. via fifo uac).
348       short example:
349             onsend_route{  if(to_ip==1.2.3.4 && !isflagset(12)){
350                               log(1, "message blocked\n");
351                               drop;
352                            }
353                          }
354  - onsend_route specific checks:
355      - snd_ip, snd_port - behave like src_ip/src_port, but contain the
356        ip/port ser will use to send the message
357      - to_ip, to_port - like above, but contain the ip/port the message will
358        be sent to (not to be confused with dst_ip/dst-port, which are the
359        destination of the original message: ser's ip and port on which the
360        message was received)
361      - snd_proto, snd_af - behave like proto/af but contain the 
362        protocol/address family that ser will use to send the message
363      - msg:len - when used in an onsend_route, msg:len will contain the length
364        of the message on the wire (after all the changes in the script are
365        applied, Vias are added a.s.o) and not the lentgh of the original 
366        message
367  - timer: - improved performance/precision, new api, see doc/timers.txt 
368  - tcp: - improved  performance (io event handling), using OS specific
369            optimizations
370         - 1024 connections limit removed (see tcp_max_connections)
371 -  resolver: - timeouts, retries a.s.o can now be set from ser.cfg
372              (see below dns_* and man resolv.conf(6)).
373              The maximum time a dns request can take (before failing) is:
374               (dns_retr_time*dns_retr_no)*(search_list_domains)
375              If dns_try_ipv6 is yes, mutliply it again by 2.
376              The fastest possible dns config (max 1s):
377                 dns_try_ipv6=no
378                 dns_retr_time=1
379                 dns_retr_no=1
380                 dns_use_search_list=no
381 - default on reply route added: onreply_route {.. } will add a default 
382     onreply route that will be executed for any reply (usefull to catch
383     replies without using tm)
384 - branch_routes added (tm triggered), only a very limited number of commands
385    are available (see tm docs)
386 - avps directly accessible from script with %avp_name (variable style)
387 new config variables:
388    enable_tls/disable_tls = enable/disable tls support, default disable.
389        Note: a tls "engine" is still needed (e.g. the tls module must
390               be loaded, enable_tls by itself is not enough).
391    exit_timeout = seconds - how much time ser will wait for all the shutdown
392        procedures to complete. If this time is exceeded, all the remaining
393        processes are immediately killed and ser exits immediately (it might
394        also generate a core dump if the cleanup part takes too long).
395        Default: 60 s. Use 0 to disable.
396    stun_refresh_interval = number in millisecond (default 0); value for 
397       attribute REFRESH INTERVAL
398    stun_allow_stun = 0 | 1 (off | on - default 1); use STUN or not if compiled
399    stun_allow_fp = 0 | 1 (off | on - default 1); use FINGERPRINT attribute
400    use_dns_cache = on | off  (default on)  
401    use_dns_failover = on | off (default off)
402    dns_cache_flags = number (default 0)
403    dns_cache_negative_ttl = number in seconds (default 60)
404    dns_cache_min_ttl = time in seconds (default 0)
405    dns_cache_max_ttl = time in seconds (default MAXINT)
406    dns_cache_mem = maximum memory used for the dns cache in Kb (default 500 K)
407    dns_cache_gc_interval = interval in seconds after which the dns cache is
408       garbage collected (default: 120 s)
409    use_dst_blacklist = on | off (default off)
410    dst_blacklist_expire = time in s (default 60)
411    dst_blacklist_mem = maximum memory used for the blacklist in Kb (default 250
412       K)
413    dst_blacklist_gc_interval = interval in seconds after which the destination 
414       blacklist is garbage collected (default 60)
415    tos = number  - ip type of service (TOS) value
416    dns_try_ipv6 = yes/no - if yes and a dns lookup fails, it will retry it
417       for ipv6 (AAAA record). Default: yes
418    dns_retr_time = time - time in s before retrying a dns request.
419       Default: system specific, depends also on the/etc/resolv.conf content
420       (usually 5s).
421    dns_retr_no = no. - number of dns retransmissions before giving up.
422       Default: see above (usually 4)
423    dns_servers_no = no. - how many dns servers from the ones defined in 
424       /etc/resolv.conf will be used. Default: all of them.
425    dns_use_search_list= yes/no - if no, the search list in /etc/resolv.conf
426       will be ignored (=> fewer lookups => gives up faster). Default: yes.
427       HINT: even if you don't have a search list defined, setting this option
428       to "no" will still be "faster", because an empty search list is in 
429       fact search "" (so even if the search list is empty/missing there will
430       still be 2 dns queries, eg. foo+'.' and foo+""+'.')
431    tcp_connection_lifetime = value (s) - how long the lifetime of a
432       tcp connection will be exteneded after an IO event (accept, connect, 
433       read, write). Default: 120 s.
434    tcp_poll_method = poll|select|epoll_et|epoll-lt|kqueue|devpoll - poll
435       method used (by default the best one for the current OS is selected)
436    tcp_max_connections = no. - maximum number of tcp connections (if the number
437       is exceeded no new tcp connections will be accepted). Default: 2048.
438
439 tools:
440   utils/sercmd - command line serctl like tool for interrogating ser ctl
441                  module (uses the binrpc encoding). Supports various
442                  connection methods (udp, tcp, unix stream & datagram sockets),
443                  reply formating (see -f, e.g. sercmd -f "pid:%v %v\n" core.ps)
444                  , interactive mode, command line completion (if compiled with 
445                  libreadline) a.s.o.
446
447 WARNING: - older 0.10.99-dev version (< 0.10.99-dev46) returned a 480 reply
448  on invite transaction timeout, if a provisional reply was received. Newer
449  versions reverted to returning 408 on all timeouts (one can use 
450   t_branch_timeout() and t_branch_replied() to distinguish between the two
451   timeout types)
452
453
454
455 0.9.4 fixes/improvements (0.9.4 is a bug fix release for 0.9.3)
456  
457 general:
458  - gcc 4.0 support
459  - mutlicast options are set for all the sockets
460  - mediaproxy: memory leak, unchecked memory allocations
461  - postgress: some bugs and cleanups (compiles cleanly now)
462  - tm: shm cloned lumps (SER-55) 
463  - tm: t_fifo: 64-bit fix
464  - tm: dst_uri clone fix
465  - tm: t_newtran/t_restransmit* races  (!)
466  - usloc: memory leak
467
468 solaris:
469  - serctl, better ISA detection, signals
470 *bsd:
471  - multicast options are properly set
472 openbsd:
473  - tcp 64 bit fix
474
475
476
477 0.9.3 changes
478
479
480 new archs:
481  - alpha experimental support
482  - mips2/cobalt experimental support
483  - x86_64 support
484  - OS X (darwin) support
485  - sparc32 single cpu highly experimental support
486  - ppc64 support
487
488 modules:
489  - enum - support for more than one NAPTR
490  - msilo - explicit multidomain support -- recipient's user ID is stored in
491    the columns username and domain -- r_uri column kept for compatibility
492    reasons (will be removed in future) but not filled by this version of
493    module
494  - mysql - implements a connection pool, all modules will use same connection
495    to access the database
496  - nathelper received port  test (flag 16 for nat_uac_test): compares the
497    source port of the message with sip port in the first Via and returns
498    true if different.
499  - permsions - support for multiple allow/deny files, allow_register function
500  - TM has a new parameter: restart_fr_on_each_reply. If set (default)
501    fr_inv timer will be restarted for each provisional reply, if not set
502    it will be restarted only for the first reply and for replies >=180
503    (but only if increasing, eg.: 180, 181 ...). Usefull when dealing with bad
504    UAs that re-transmit 180s.
505  - TM saves the avp list into transactions, and make it available into
506    callbacks, failure and reply routes.
507  - TM contains new command - t_write_unix("/tmp/sems.sock", "announcement")
508    sends a message using unix socket interface instead of FIFO interface.
509  - TM contains new config variable - unix_tx_timeout -- it specifies the
510    transmit timeout of t_write_sock
511  - VM functionality was transfered into TM module. Instead of fetching the
512    email value from DB (as VM), TM looks for the "email" attribute to get the
513    value.
514    vm() function was replaced with t_write_req()
515    vm_reply() fifo functions was replcated by TM with t_reply() fifo function
516    NOTE!! because current version of SEMS/AA try to send reply via vm_reply,
517    it will not work with the TM version.
518  - xlog - printing the body of any header by specifying the name; new
519    specifiers for user-agent, message buffer, message length, message's flags,
520    message id.
521
522 new modules:
523  - avp / avp_db / avp_radius - load and check avps per caller or callee
524  - avpops - flexible module for operations with avps and database, introducing
525    a pseudo-varible support in SER configuration file
526  - cpl-c - implementation of Call Processing Language
527  - dispatcher - implements a dispatcher for incoming requests using hashes
528    over parts of the request to select the destination
529  - diversion - implements the Diversion extensions as per 
530    draft-levy-sip-diversion-08
531  - flatstore - simple module that implements very fast inserts for accounting
532    purposes
533  - gflags - keeps a bitmap of flags in shared memory and may be used to change
534    behaviour of server based on value of the flags
535  - options - answer server options requests
536  - speeddial - provides on-server speed dial facilities
537  - uri_db - split from uri module, performs various checks related to SIP URI
538    over database fields
539
540 removed modules:
541  - vm - the functionality was transfered to tm module (see t_write_req(...)
542    method)
543
544 core:
545  - new parts:
546        UNIX domain socket server implemented
547  - changes: 
548     - command line: removed -p port and extended -l:
549        -l [proto:]addr[:port] , where proto=udp|tcp and 
550        addr= host|ip_address|interface_name. The format is the same
551        as for listen in the config file. ipv6 addresses must be enclosed in
552        [].
553     - added from_uri & to_uri: behave exactly like uri but use the
554       "From:"/"To:" uris
555        (e.g.: if (from_uri==myself) ..., if (to_uri=~"^sip:test@")... )
556     - config: better escape support in strings (e.g. \", \<cr>, \x0a, \012)
557     - bad network addresses are now automatically fixed
558       (e.g. 192.168.1.80/27 => 192.168.1.64/27)
559     - avp (Attribute-Value Pair) support added
560     - avp alias support added
561     - multicast support added (see mcast_loopback & mcast_ttl)
562     - saving of procces group id enabled, if the -G option is specified
563       (a safe way to quickly kill all ser processes)
564     - core dump-ing is enabled by default, see also disable_core_dump
565     - protocol and port can be specified in the alias and listen lines, e.g.:
566         alias= tcp:foo.bar:* udp:test.bar:5080 foo.com
567         listen= eth0   tcp:eth0:5065 udp:127.0.0.1 [3ffe::1]
568     - multiple operator support: ==, != for special operations (e.g myself, ip)
569                               ==, !=, ~= for strings
570                               ==, !=, >, <, >=, <= for integers
571     - database api changed to support usage of different drivers
572       simultaneously. The database URL must start now with the name of the
573       driver (module). Example: for mysql the DB URL
574       'sql://user:password@dbhost:port/database' must be specified now as
575       'mysql://user:password@dbhost:port/database'
576  - new config variables:
577    mcast_loopback = <yes/no> - loopback sent multicast datagram, default no.
578    mcast_ttl = number - set multicast ttl, default OS specific (usually 1).
579    sock_mode = <permissions> (e.g. sock_mode=0600:  default value = 0660)
580        ser unix sockets and fifo will be created with this permissions
581        (old name fifo_mode is still supported, but deprecated)
582    sock_user = username|"uid"
583    sock_group = groupname|"gid"
584       change the owner and/or group of the ser unix sockets or fifo
585       Short example config snippet:
586            sock_mode=0600        # ser socket/fifo mode
587            sock_user="www-data"  # ser socket/fifo owner
588            sock_group=nogroup  
589            user=nobody       # ser user (ser will suid to it)
590    disable_core_dump= yes|no 
591        by default core dump limits are set to unlimited or a high enough
592        value, set this config variable o yes to disable core dump-ing
593        (will set core limits to 0)
594    open_files_limit= number
595        if set and bigger than the current open file limit, ser will try
596        to increase its open file limit to this number. Note: ser must be
597        started as root to be able to increase a limit past the hard limit
598        (which, for open files, is 1024 on most systems)
599    tcp_connect_timeout= seconds
600        time before an ongoing connect will be aborted
601    tcp_send_timeout= seconds
602        time after a tcp connection will be closed if it is not available 
603        for writing in this interval (and ser wants to send something on it)
604    tcp_accept_aliases= yes|no
605        if a message received over a tcp connection has "alias" in its via
606        a new tcp alias port will be created for the connection the message
607        came from (the alias port will be set to the via one).
608        Based on draft-ietf-sip-connect-reuse-00.txt, but using only the port
609        (host aliases are too dangerous IMHO, involve extra DNS
610         lookups and the need for them is questionable)
611        See force_tcp_alias for more details.
612    log_facility = LOG_LOCAL0
613        if ser logs to syslog, you can control the facility for logging. Very
614        useful when you want to divert all ser logs to a different log file.
615        See man page syslog(3) for more detailes.
616    unix_sock = "/tmp/ser.sock"
617        The name of the socket the unixsock server should listen on.
618    unix_sock_children = 1
619        The number of children that will listen on the unix domain socket.
620    unix_tx_timeout = 2000
621        Timeout (in ms) used when sending replies through unix sockets.
622  - new script commands:
623    force_send_socket([proto:]address[:port])
624        sends the message from the specified socket (it _must_ be one of the
625        sockets ser listens on). If the protocol doesn't match (e.g. udp
626        message "forced" to a tcp socket) the closest socket of the same
627        protocol is used.
628    force_tcp_alias()
629    force_tcp_alias(port)
630        adds a tcp port alias for the current connection (if tcp).
631        Usefull if you want to send all the trafic to port_alias through
632        the same connection this request came from [it could help 
633        for firewall or nat traversal].
634        With no parameters adds the port from the message via as the alias.
635        When the "aliased" connection is closed (e.g. it's idle for too
636        much time), all the port aliases are removed.
637        Note: by default ser closes idle connection after 3 minutes (stable)
638        or 1 minute (unstable) so to take full advantage of tcp aliases for
639        things like firewall and nat traversal, redefine TCP_CON_*TIMEOUT
640        in tcp_conn.h and recompile. Also right now there can be maximum
641        3 port aliases to a connection (you shouldn't need more than one).
642        To change this redefine TCP_CON_MAX_ALIASES in the same file
643        (set it to you desired value + 1; 1 is needed for the real port).
644
645 utilities:
646  - ngrep patch for displaying new lines in captured SIP messages is no longer
647    needed; use ngrep V 1.42 with the option "-W byline"
648
649
650
651 ***********************************************
652 * Changes/fixes introduced in 0.8.12
653 ***********************************************
654 +--------------------------------------------------------+
655 | WARNING: if you want to use a 0.8.11 config script     |
656 | with 0.8.12, replace if ( len_gt(number) ) with:       |
657 |                      if ( msg:len > bumber )           |
658 +--------------------------------------------------------+
659
660 New Features
661 ============
662
663 texops:
664  - subst('s/re/repl/flags') support
665 core:
666  - added switch to check the config file (-c)
667  - changes: removed len_gt() and replaced with if (msg:len op number|max_len)
668  - multiple operator support: ==, != for special operations (e.g myself, ip)
669                               ==, !=, ~= for strings
670                               ==, !=, >, <, >=, <= for integers
671  - new config variables:
672      advertised_address= ip | string
673        address advertised in via and in the DST_* lumps (e.g RR)
674        This is the default value, if empty (default) the socket
675        address will be used.
676        WARNING: - don't set it unless you know what you are doing
677                  (e.g. nat traversal)
678                - you can set anything here, no check is made
679                 (e.g. foo.bar will be accepted even if 
680                  foo.bar doesn't exist)
681     advertised_port= no
682        port advertised in via and in the DST_*lumps (e.g. RR)
683        This is the default value, if empty (default) the socket
684        port will be used.
685        Same warnings as above.
686  - new script commands:
687     set_advertised_address(ip|string)
688        same as advertised_address but it affects only the current message:
689        Message host/lump address= the set_advertised one if
690        present, else advertised_address else socket address.
691     set_advertised_port(no)
692        same as advertised_port but it affects only the current
693        message; see set_advertised_address & s/address/port/g
694
695 usrloc:
696  - usernames are case insensitive
697  
698 registrar:
699  - lookup function succeeds when appending of a branch failed
700
701 auth_db:
702  - support for rpid stored in database (thanks to Jakob Schlyter)
703
704 Bug fixes
705 =========
706 - memory leak in digest credentials parser fixed
707 - authenticathion ha1 didn't include domain if username was of the form
708   user@domain and calculate_ha1 was set to yes (modules/auth_db)
709 - tm reply processing race condition (modules/tm), special thanks go to
710  Dong Liu
711 - Many bugs in pa module fixed, works with registrar again.
712  
713 Security updates
714 ================
715  
716 - fifo processing code will write responses only to other
717  fifos and only if they are not hard-linked, also default
718  ser fifo persmissions were changed to 0600.
719                                                                                 
720 Performance improvements
721 ========================
722 - tuned internal malloc implementation parameters to better reflect the
723 actual workload (malloc is a little bit faster now)
724
725
726
727 ***********************************************
728 * Changes introduced in 0.8.11
729 ***********************************************
730
731 +--------------------------------------------------------+
732 | CAUTION: the 0.8.11 release include changes which      |
733 | are incompatible with scripts and databases used       |
734 | in previous versions. Care is advised when upgrading   |
735 | from previous releases to 0.8.11.                      |
736 +--------------------------------------------------------+
737
738 New features
739 =============
740 - RFC3261 support
741     - TCP support and cross-transport forwarding [core]
742     - loose routing support [rr module]
743 - New modules
744     - vm -- voicemail interface [vm]
745     - ENUM support [enum]
746     - presence agent [pa]
747     - dynamic domain management -- allows to manipulate 
748       hosting of multiple domains in run-time [module]
749     - flat-text-file database support [dbtext]
750     - rich access control lists [permissions]
751 - Feature Improvements
752     - click-to-dial, which is based on improved tm/FIFO 
753       that better supports external applications [tm module]
754     - web accounting -- acc module can report to serweb
755         on placed calls [acc module]
756     - improved exec module (header fields passed now
757       as environment variables to scripts) [exec module]
758 - Architectural Improvements
759     - powerpc fast locking support
760     - netbsd support
761     - 64 bits arch. support (e.g. netbsd/sparc64).
762 - New Experimental Features (not tested at all yet)
763     - nathelper utility for Cisco/ATA NAT traversal [nathelper]
764     - another NAT traversal utility [mangler]
765     - postgress support [postgress]
766     - fcp module [fcp]
767     - pdt module (prefix2domain) [pdt]
768
769 Changes to use of ser scripts
770 =============================
771
772 About Multiple Transport Support
773 --------------------------------
774 SER now suports multiple transport protocols: UDP and TCP. As there
775 may be UAs which support only either protocol and cannot speak to
776 each other directly, we recommend to alway record-route SIP requests,
777 to keep the transport-translating SER in path. Also, if a destination
778 transport is not known, stateful forwarding is recommended -- use of
779 stateless forwarding for TCP2UDP would result in loss of reliability.
780
781
782 core
783 ----
784 - reply_route has been renamed to failure_route -- the old name caused
785   too much confusion
786 - forward_tcp and forward_udp can force SER to forward via specific
787   transport protocol
788
789 acc module:
790 -----------
791 - radius and sql support integrated in this module; you need to
792   recompile to enable it
793 - acc_flag is now called log_flag to better reflect it relates
794   to the syslog mode (as opposed to sql/radius); for the same
795   reasons, the accounting action is now called "acc_log_request"
796   and the option for missed calls "log_missed_calls"
797 - log_fmt allows now to specify what will be printed to syslog
798
799 auth module:
800 ------------
801 - auth module has been split in auth, auth_db, auth_radius, group
802   group_radius, uri and uri_radius 
803 - all the parameters that were part of former auth module are now 
804   part of auth_db module
805 - auth_db module contains all functions needed for database
806   authentication
807 - auth_radius contains functions needed for radius authentication
808 - group module contains group membership checking functions
809 - group_radius contains radius group membeship checking functions
810 - is_in_group has been renamed to is_user_in and places to groups
811   module
812 - check_to and check_from have been moved to the uri module
813  
814
815 im module:
816 ----------
817 - im is no longer used and has been obsoleted by TM
818
819 exec module:
820 ------------
821 - exec_uri and exec_user have been obsoleted by exec_dset; 
822   exec_dset is identical to exec_uri in capabilities; it 
823   additionaly passes content of request elements (header 
824   fields and URI parts) in environment variables; users of 
825   exec_user can use exec_dset now and use the "URI_USER"  
826   variable to learn user part of URI
827 - exec_dset and exec_msg return false, if return value of 
828   script does not euqal zero
829 - exec_dset takes an additional parameter, which enables 
830   validation of SIP URIs returned by external application
831
832 jabber module:
833 --------------
834 - presence support for Jabber users is enabled loading the PA
835   module and using handle_subscribe("jabber") for SUBSCRIBE 
836   requests to jabber user 
837
838 msilo module:
839 -------------
840 - m_store has now a parameter to set what should be considered
841   for storing as destination uri. This enables support for saving
842   the messages on negative replies.
843
844 radius_acc module:
845 ------------------
846 - radius_acc module has been removed and radius accounting 
847   is now part of acc module
848
849 registrar/usrloc modules:
850 -------------------------
851 - multi domain support, the modules user username@domain as AOR
852   if enabled
853 - descent modification time ordering of contacts
854 - case sensitive/insensitive comparison of URI can be enabled
855
856 rr module:
857 ----------
858 - addRecordRoute has been replaced with record_route
859 - rewriteFromRoute has been replaced with loose_route()
860 - a new option, "enable_full_lr" can be set to make life
861   with misimplemented UAs easier and put LR in from "lr=on"
862 - rr module can insert two Record-Route header fields when
863   necesarry (disconnected networks, UDP->TCP and so on)
864
865 tm module:
866 ----------
867 - t_reply_unsafe, used in former versions within reply_routes,
868   is deprecated; now t_reply is used from any places in script
869 - t_on_negative is renamed to t_on_failure -- the old name just
870   caused too much confusion
871 - FIFO t_uac used by some applications (like serweb) has been
872   replaced with t_uac_dlg (which allows easier use by dialog-
873   oriented applications, like click-to-dial) 
874 - if you wish to do forward to another destination from 
875   failure_route (reply_route formerly), you need to call t_relay
876   or t_relay_to explicitely now
877 - t_relay_to has been replaced with t_relay_to_udp and t_relay_to_tcp
878