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